Added a few functions to set name of operands, etc.
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 8 Feb 2000 10:39:53 +0000 (10:39 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 8 Feb 2000 10:39:53 +0000 (10:39 +0000)
ccl/ccltoken.c
include/yaz/ccl.h

index 81af662..6e5cfdb 100644 (file)
  * Europagate, 1995
  *
  * $Log: ccltoken.c,v $
- * Revision 1.12  2000-01-31 13:15:21  adam
+ * Revision 1.13  2000-02-08 10:39:53  adam
+ * Added a few functions to set name of operands, etc.
+ *
+ * Revision 1.12  2000/01/31 13:15:21  adam
  * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
  * that some characters are not surrounded by spaces in resulting term.
  * ILL-code updates.
@@ -346,6 +349,14 @@ void ccl_token_del (struct ccl_token *list)
     }
 }
 
+static char *ccl_strdup (const char *str)
+{
+    int len = strlen(str);
+    char *p = (char*) malloc (len+1);
+    strcpy (p, str);
+    return p;
+}
+
 CCL_parser ccl_parser_create (void)
 {
     CCL_parser p = (CCL_parser)malloc (sizeof(*p));
@@ -356,10 +367,10 @@ CCL_parser ccl_parser_create (void)
     p->error_pos = NULL;
     p->bibset = NULL;
 
-    p->ccl_token_and = "and";
-    p->ccl_token_or = "or";
-    p->ccl_token_not = "not andnot";
-    p->ccl_token_set = "set";
+    p->ccl_token_and = ccl_strdup("and");
+    p->ccl_token_or = ccl_strdup("or");
+    p->ccl_token_not = ccl_strdup("not andnot");
+    p->ccl_token_set = ccl_strdup("set");
     p->ccl_case_sensitive = 1;
 
     return p;
@@ -369,6 +380,37 @@ void ccl_parser_destroy (CCL_parser p)
 {
     if (!p)
        return;
+    free (p->ccl_token_and);
+    free (p->ccl_token_or);
+    free (p->ccl_token_not);
+    free (p->ccl_token_set);
     free (p);
 }
 
+void ccl_parser_set_op_and (CCL_parser p, const char *op)
+{
+    if (p && op)
+       p->ccl_token_and = ccl_strdup (op);
+}
+
+void ccl_parser_set_op_or (CCL_parser p, const char *op)
+{
+    if (p && op)
+       p->ccl_token_or = ccl_strdup (op);
+}
+void ccl_parser_set_op_not (CCL_parser p, const char *op)
+{
+    if (p && op)
+       p->ccl_token_not = ccl_strdup (op);
+}
+void ccl_parser_set_op_set (CCL_parser p, const char *op)
+{
+    if (p && op)
+       p->ccl_token_set = ccl_strdup (op);
+}
+
+void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag)
+{
+    if (p)
+       p->ccl_case_sensitive = case_sensitivity_flag;
+}
index 5c8909f..89bdab2 100644 (file)
  * CCL - header file
  *
  * $Log: ccl.h,v $
- * Revision 1.2  2000-01-31 13:15:21  adam
+ * Revision 1.3  2000-02-08 10:39:53  adam
+ * Added a few functions to set name of operands, etc.
+ *
+ * Revision 1.2  2000/01/31 13:15:21  adam
  * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
  * that some characters are not surrounded by spaces in resulting term.
  * ILL-code updates.
@@ -242,7 +245,7 @@ struct ccl_parser {
     
 /* current bibset */
     CCL_bibset bibset;
-    
+
     char *ccl_token_and;
     char *ccl_token_or;
     char *ccl_token_not;
@@ -272,6 +275,17 @@ struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset,
 struct ccl_rpn_node *ccl_find (CCL_bibset abibset, struct ccl_token *list,
                                int *error, const char **pos);
 
+/* Parse CCL Find command */
+struct ccl_rpn_node *ccl_parser_find (CCL_parser cclp, struct ccl_token *list);
+
+/* Set various OPs */
+void ccl_parser_set_op_and (CCL_parser p, const char *op);
+void ccl_parser_set_op_or (CCL_parser p, const char *op);
+void ccl_parser_set_op_not (CCL_parser p, const char *op);
+void ccl_parser_set_op_set (CCL_parser p, const char *op);
+
+void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag);
+
 /* Return english-readable error message */
 const char *ccl_err_msg (int ccl_errno);
 
@@ -313,6 +327,7 @@ CCL_parser ccl_parser_create (void);
 /* Destroy CCL parser */
 void ccl_parser_destroy (CCL_parser p);
 
+
 #ifndef ccl_assert
 #define ccl_assert(x) ;
 #endif