Added MarcXchange support.
[yaz-moved-to-github.git] / src / ccltoken.c
index 70bc47d..7584473 100644 (file)
  * USE OR PERFORMANCE OF THIS SOFTWARE.
  *
  */
+/** 
+ * \file ccltoken.c
+ * \brief Implements CCL lexical analyzer (scanner)
+ */
 /* CCL - lexical analysis
  * Europagate, 1995
  *
- * $Id: ccltoken.c,v 1.1 2003-10-27 12:21:30 adam Exp $
+ * $Id: ccltoken.c,v 1.5 2004-10-15 00:19:00 adam Exp $
  *
  * Old Europagate Log:
  *
@@ -201,7 +205,7 @@ struct ccl_token *ccl_token_simple (const char *command)
 struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
 {
     const char *aliases;
-    const char *cp = command;
+    const unsigned char *cp = (const unsigned char *) command;
     struct ccl_token *first = NULL;
     struct ccl_token *last = NULL;
 
@@ -226,7 +230,7 @@ struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
            last = last->next;
        }
        last->next = NULL;
-       last->name = cp;
+       last->name = (const char *) cp;
        last->len = 1;
        switch (*cp++)
        {
@@ -267,7 +271,7 @@ struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
            break;
        case '\"':
            last->kind = CCL_TOK_TERM;
-           last->name = cp;
+           last->name = (const char *) cp;
            last->len = 0;
            while (*cp && *cp != '\"')
            {
@@ -317,6 +321,22 @@ struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command)
     return first;
 }
 
+struct ccl_token *ccl_token_add (struct ccl_token *at)
+{
+    struct ccl_token *n = (struct ccl_token *)xmalloc (sizeof(*n));
+    ccl_assert(n);
+    n->next = at->next;
+    n->prev = at;
+    at->next = n;
+    if (n->next)
+       n->next->prev = n;
+
+    n->kind = CCL_TOK_TERM;
+    n->name = 0;
+    n->len = 0;
+    return n;
+}
+    
 struct ccl_token *ccl_tokenize (const char *command)
 {
     CCL_parser cclp = ccl_parser_create ();