changed output to be non-cascarding when using -n switch
[yaz-moved-to-github.git] / src / cql.y
index 1086549..187cba1 100644 (file)
--- a/src/cql.y
+++ b/src/cql.y
@@ -1,6 +1,6 @@
-/* $Id: cql.y,v 1.8 2004-11-01 20:13:02 adam Exp $
-   Copyright (C) 2002-2004
-   Index Data Aps
+/* $Id: cql.y,v 1.13 2006-12-14 09:05:18 adam Exp $
+   Copyright (C) 2002-2006
+   Index Data ApS
 
 This file is part of the YAZ toolkit.
 
@@ -135,8 +135,7 @@ searchClause:
 /* unary NOT search TERM here .. */
 
 boolean: 
-  AND | OR | NOT | PROX 
-  ;
+  AND | OR | NOT | PROX ;
 
 modifiers: modifiers '/' searchTerm
 { 
@@ -286,27 +285,38 @@ int yylex(YYSTYPE *lval, void *vp)
     }
     else
     {
-        putb(lval, cp, c);
-        while ((c = cp->getbyte(cp->client_data)) != 0 &&
-               !strchr(" \n()=<>/", c))
+        while (c != 0 && !strchr(" \n()=<>/", c))
         {
             if (c == '\\')
                 c = cp->getbyte(cp->client_data);
             putb(lval, cp, c);
+           c = cp->getbyte(cp->client_data);
         }
 #if YYDEBUG
         printf ("got %s\n", lval->buf);
 #endif
         if (c != 0)
             cp->ungetbyte(c, cp->client_data);
-        if (!strcmp(lval->buf, "and"))
+        if (!cql_strcmp(lval->buf, "and"))
+       {
+           lval->buf = "and";
             return AND;
-        if (!strcmp(lval->buf, "or"))
+       }
+        if (!cql_strcmp(lval->buf, "or"))
+       {
+           lval->buf = "or";
             return OR;
-        if (!strcmp(lval->buf, "not"))
+       }
+        if (!cql_strcmp(lval->buf, "not"))
+       {
+           lval->buf = "not";
             return NOT;
-        if (!strncmp(lval->buf, "prox", 4))
+       }
+        if (!cql_strcmp(lval->buf, "prox"))
+       {
+           lval->buf = "prox";
             return PROX;
+       }
     }
     return TERM;
 }