X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcclqfile.c;h=943f84d59143d40c3d78e524a7a2964d818af325;hp=d2ca1c9d13f5db4a76151b87a32857120b3ad1b6;hb=b675ebc81ebe1f2cb7d28b4ce43a51ad5cb39598;hpb=c508282c3e52e145f998d0bb85c0ea6b36fe956c diff --git a/src/cclqfile.c b/src/cclqfile.c index d2ca1c9..943f84d 100644 --- a/src/cclqfile.c +++ b/src/cclqfile.c @@ -1,8 +1,8 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ -/** +/** * \file cclqfile.c * \brief Implements parsing of CCL qualifier specs in files */ @@ -40,7 +40,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, yaz_tok_cfg_destroy(yt); *addinfo = 0; - + t = yaz_tok_move(tp); while (t == YAZ_TOK_STRING) { @@ -109,7 +109,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, goto out; } value_str = yaz_tok_parse_string(tp); - + if (sscanf(type_str, "%d", &type) == 1) ; else if (strlen(type_str) != 1) @@ -132,7 +132,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, 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; @@ -146,7 +146,9 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, 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; @@ -162,7 +164,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, value = CCL_BIB1_TRU_CAN_REGEX; else if (!ccl_stricmp (value_str, "z")) value = CCL_BIB1_TRU_CAN_Z3958; - break; + break; case 'c': case 'C': type = CCL_BIB1_COM; @@ -232,12 +234,24 @@ void ccl_qual_field(CCL_bibset bibset, const char *cp, const char *qual_name) 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) @@ -270,7 +284,7 @@ void ccl_qual_line(CCL_bibset bibset, char *line) 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) @@ -290,8 +304,8 @@ void ccl_qual_line(CCL_bibset bibset, char *line) * Each line format is: * = = .... * Where is name of qualifier; - * = is a attribute definition pair where is one of: - * u(use), r(relation), p(position), t(truncation), c(completeness) + * = is a attribute definition pair where is one of: + * u(use), r(relation), p(position), t(truncation), c(completeness) * or plain integer. * is an integer or special pseudo-value. */