CCL Truncation character may be defined.
[yaz-moved-to-github.git] / ccl / cclfind.c
index 4e0bdb4..5702322 100644 (file)
  * Europagate, 1995
  *
  * $Log: cclfind.c,v $
- * Revision 1.19  2000-11-16 09:58:02  adam
+ * Revision 1.23  2001-03-20 11:22:58  adam
+ * CCL Truncation character may be defined.
+ *
+ * Revision 1.22  2001/03/07 13:24:40  adam
+ * Member and_not in Z_Operator is kept for backwards compatibility.
+ * Added support for definition of CCL operators in field spec file.
+ *
+ * Revision 1.21  2001/02/21 13:46:53  adam
+ * C++ fixes.
+ *
+ * Revision 1.20  2000/11/16 13:03:12  adam
+ * Function ccl_rpn_query sets attributeSet to Bib-1.
+ *
+ * Revision 1.19  2000/11/16 09:58:02  adam
  * Implemented local AttributeSet setting for CCL field maps.
  *
  * Revision 1.18  2000/10/17 19:50:28  adam
@@ -297,7 +310,7 @@ static void add_attr (struct ccl_rpn_node *p, const char *set,
     ccl_assert (n);
     if (set)
     {
-        n->set = malloc (strlen(set)+1);
+        n->set = (char*) malloc (strlen(set)+1);
         strcpy (n->set, set);
     }
     else
@@ -324,6 +337,12 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp,
     int and_list = 0;
     int or_list = 0;
     char *attset;
+    const char *truncation_aliases;
+
+    truncation_aliases =
+       ccl_qual_search_special(cclp->bibset, "truncation");
+    if (!truncation_aliases)
+       truncation_aliases = "?";
 
     if (!qa)
     {
@@ -351,7 +370,7 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp,
         int truncation_value = -1;
         int completeness_value = -1;
         int len = 0;
-        int max = 200;
+        size_t max = 200;
         if (and_list || or_list)
             max = 1;
 
@@ -361,7 +380,8 @@ static struct ccl_rpn_node *search_term_x (CCL_parser cclp,
         for (no = 0; no < max && is_term_ok(lookahead->kind, term_list); no++)
         {
             for (i = 0; i<lookahead->len; i++)
-                if (truncation_value == -1 && lookahead->name[i] == '?')
+                if (truncation_value == -1 && strchr(truncation_aliases,
+                                                    lookahead->name[i]))
                 {
                     if (no == 0 && i == 0 && lookahead->len >= 1)
                         left_trunc = 1;
@@ -899,6 +919,8 @@ struct ccl_rpn_node *ccl_parser_find (CCL_parser cclp, struct ccl_token *list)
 {
     struct ccl_rpn_node *p;
 
+    
+
     cclp->look_token = list;
     p = find_spec (cclp, NULL);
     if (p && KIND != CCL_TOK_EOL)