/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
* See the file LICENSE for details.
*/
-/**
+/**
* \file cclqfile.c
* \brief Implements parsing of CCL qualifier specs in files
*/
yaz_tok_cfg_destroy(yt);
*addinfo = 0;
-
+
t = yaz_tok_move(tp);
while (t == YAZ_TOK_STRING)
{
goto out;
}
value_str = yaz_tok_parse_string(tp);
-
+
if (sscanf(type_str, "%d", &type) == 1)
;
else if (strlen(type_str) != 1)
value = CCL_BIB1_REL_ORDER;
else if (!ccl_stricmp (value_str, "r"))
value = CCL_BIB1_REL_PORDER;
- break;
+ break;
case 'p':
case 'P':
type = CCL_BIB1_POS;
value = CCL_BIB1_STR_AND_LIST;
if (!ccl_stricmp (value_str, "ol"))
value = CCL_BIB1_STR_OR_LIST;
- break;
+ if (!ccl_stricmp (value_str, "ag"))
+ value = CCL_BIB1_STR_AUTO_GROUP;
+ break;
case 't':
case 'T':
type = CCL_BIB1_TRU;
value = CCL_BIB1_TRU_CAN_BOTH;
else if (!ccl_stricmp (value_str, "n"))
value = CCL_BIB1_TRU_CAN_NONE;
- break;
+ else if (!ccl_stricmp (value_str, "x"))
+ value = CCL_BIB1_TRU_CAN_REGEX;
+ else if (!ccl_stricmp (value_str, "z"))
+ value = CCL_BIB1_TRU_CAN_Z3958;
+ break;
case 'c':
case 'C':
type = CCL_BIB1_COM;
yaz_log(YLOG_WARN, "ccl_qual_field2 fail: %s", addinfo);
}
-void ccl_qual_fitem (CCL_bibset bibset, const char *cp, const char *qual_name)
+int ccl_qual_fitem2(CCL_bibset bibset, const char *cp, const char *qual_name,
+ const char **addinfo)
{
if (*qual_name == '@')
+ {
+ /* ccl_qual_add_special can not return error (yet) */
ccl_qual_add_special(bibset, qual_name+1, cp);
+ *addinfo = 0;
+ return 0;
+ }
else
- ccl_qual_field(bibset, cp, qual_name);
+ return ccl_qual_field2(bibset, cp, qual_name, addinfo);
+}
+
+void ccl_qual_fitem(CCL_bibset bibset, const char *cp, const char *qual_name)
+{
+ const char *addinfo = 0;
+ ccl_qual_fitem2(bibset, cp, qual_name, &addinfo);
}
void ccl_qual_buf(CCL_bibset bibset, const char *buf)
int no_scan = 0;
char qual_name[128];
char *cp1, *cp = line;
-
+
if (*cp == '#')
return; /* ignore lines starting with # */
if (sscanf (cp, "%100s%n", qual_name, &no_scan) < 1)
* Each line format is:
* <name> <t>=<v> <t>=<v> ....
* Where <name> is name of qualifier;
- * <t>=<v> is a attribute definition pair where <t> is one of:
- * u(use), r(relation), p(position), t(truncation), c(completeness)
+ * <t>=<v> is a attribute definition pair where <t> is one of:
+ * u(use), r(relation), p(position), t(truncation), c(completeness)
* or plain integer.
* <v> is an integer or special pseudo-value.
*/