/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) 1995-2011 Index Data
* See the file LICENSE for details.
*/
/**
* \file ccltoken.c
* \brief Implements CCL lexical analyzer (scanner)
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <string.h>
#include <stdlib.h>
-#include <ctype.h>
-
+#include <yaz/yaz-iconv.h>
#include "cclp.h"
/*
case '%':
case '!':
last->kind = CCL_TOK_PROX;
- while (isdigit(*cp))
+ while (yaz_isdigit(*cp))
{
++ last->len;
cp++;
else
last->kind = CCL_TOK_REL;
break;
- case '\"':
- last->kind = CCL_TOK_TERM;
- last->name = (const char *) cp;
- last->len = 0;
- while (*cp && *cp != '\"')
+ default:
+ --cp;
+ --last->len;
+ if (*cp == '"')
{
cp++;
- ++ last->len;
+ last->kind = CCL_TOK_TERM;
+ last->name = (const char *) cp;
+ while (*cp && *cp != '"')
+ {
+ cp++;
+ ++ last->len;
+ }
+ if (*cp)
+ cp++;
}
- if (*cp == '\"')
- cp++;
- break;
- default:
- if (!strchr("(),%!><= \t\n\r", cp[-1]))
+ else
{
+ last->kind = CCL_TOK_TERM;
+ last->name = (const char *) cp;
while (*cp && !strchr("(),%!><= \t\n\r", *cp))
{
- cp++;
++ last->len;
+ cp++;
}
+ aliases = ccl_qual_search_special(cclp->bibset, "and");
+ if (!aliases)
+ aliases = cclp->ccl_token_and;
+ if (token_cmp(cclp, aliases, last))
+ last->kind = CCL_TOK_AND;
+
+ aliases = ccl_qual_search_special(cclp->bibset, "or");
+ if (!aliases)
+ aliases = cclp->ccl_token_or;
+ if (token_cmp(cclp, aliases, last))
+ last->kind = CCL_TOK_OR;
+
+ aliases = ccl_qual_search_special(cclp->bibset, "not");
+ if (!aliases)
+ aliases = cclp->ccl_token_not;
+ if (token_cmp(cclp, aliases, last))
+ last->kind = CCL_TOK_NOT;
+
+ aliases = ccl_qual_search_special(cclp->bibset, "set");
+ if (!aliases)
+ aliases = cclp->ccl_token_set;
+
+ if (token_cmp(cclp, aliases, last))
+ last->kind = CCL_TOK_SET;
}
- last->kind = CCL_TOK_TERM;
-
- aliases = ccl_qual_search_special(cclp->bibset, "and");
- if (!aliases)
- aliases = cclp->ccl_token_and;
- if (token_cmp(cclp, aliases, last))
- last->kind = CCL_TOK_AND;
-
- aliases = ccl_qual_search_special(cclp->bibset, "or");
- if (!aliases)
- aliases = cclp->ccl_token_or;
- if (token_cmp(cclp, aliases, last))
- last->kind = CCL_TOK_OR;
-
- aliases = ccl_qual_search_special(cclp->bibset, "not");
- if (!aliases)
- aliases = cclp->ccl_token_not;
- if (token_cmp(cclp, aliases, last))
- last->kind = CCL_TOK_NOT;
-
- aliases = ccl_qual_search_special(cclp->bibset, "set");
- if (!aliases)
- aliases = cclp->ccl_token_set;
-
- if (token_cmp(cclp, aliases, last))
- last->kind = CCL_TOK_SET;
}
}
return first;