X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fcclqfile.c;h=aa947858a005901cfa0e5e3440cca4e9378dd170;hb=743e944e38c1f13a7304d924cd9d111c64f8c7f8;hp=b3abfd86cc4d9e39ff33828909d970531f18b2bf;hpb=1d8e2adb8e5cfeaf77a84f5f3277785bb24cdd56;p=yaz-moved-to-github.git diff --git a/src/cclqfile.c b/src/cclqfile.c index b3abfd8..aa94785 100644 --- a/src/cclqfile.c +++ b/src/cclqfile.c @@ -48,7 +48,7 @@ /* CCL qualifiers * Europagate, 1995 * - * $Id: cclqfile.c,v 1.9 2007-04-26 21:45:17 adam Exp $ + * $Id: cclqfile.c,v 1.11 2007-04-30 19:55:40 adam Exp $ * * Old Europagate Log: * @@ -78,7 +78,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, const char **addinfo) { - yaz_tokenizer_t yt = yaz_tokenizer_create(); + yaz_tok_cfg_t yt = yaz_tok_cfg_create(); int type_ar[MAX_QUAL]; int value_ar[MAX_QUAL]; @@ -87,34 +87,38 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, int pair_no = 0; char *type_str = 0; int t; + yaz_tok_parse_t tp; - yaz_tokenizer_single_tokens(yt, ",="); - yaz_tokenizer_read_buf(yt, cp); + yaz_tok_cfg_single_tokens(yt, ",="); + + tp = yaz_tok_parse_buf(yt, cp); + + yaz_tok_cfg_destroy(yt); *addinfo = 0; - t = yaz_tokenizer_move(yt); - while (t == YAZ_TOKENIZER_STRING) + t = yaz_tok_move(tp); + while (t == YAZ_TOK_STRING) { /* we don't know what lead is yet */ - char *lead_str = xstrdup(yaz_tokenizer_string(yt)); + char *lead_str = xstrdup(yaz_tok_parse_string(tp)); const char *value_str = 0; int type = 0, value = 0; /* indicates attribute value UNSET */ - t = yaz_tokenizer_move(yt); + t = yaz_tok_move(tp); if (t == ',') { /* full attribute spec: set, type = value */ /* lead is attribute set */ attsets[pair_no] = lead_str; - t = yaz_tokenizer_move(yt); - if (t != YAZ_TOKENIZER_STRING) + t = yaz_tok_move(tp); + if (t != YAZ_TOK_STRING) { *addinfo = "token expected"; goto out; } xfree(type_str); - type_str = xstrdup(yaz_tokenizer_string(yt)); - if (yaz_tokenizer_move(yt) != '=') + type_str = xstrdup(yaz_tok_parse_string(tp)); + if (yaz_tok_move(tp) != '=') { *addinfo = "= expected"; goto out; @@ -132,21 +136,33 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, { /* lead is first of a list of qualifier aliaeses */ /* qualifier alias: q1 q2 ... */ - xfree(lead_str); - yaz_tokenizer_destroy(yt); - ccl_qual_add_combi (bibset, qual_name, cp); + char *qlist[10]; + int i = 0; + + qlist[i++] = lead_str; + + while ((t=yaz_tok_move(tp)) == YAZ_TOK_STRING) + { + if (i < sizeof(qlist)/sizeof(*qlist)-1) + qlist[i++] = xstrdup(yaz_tok_parse_string(tp)); + } + qlist[i] = 0; + yaz_tok_parse_destroy(tp); + ccl_qual_add_combi (bibset, qual_name, (const char **) qlist); + for (i = 0; qlist[i]; i++) + xfree(qlist[i]); return 0; } while (1) /* comma separated attribute value list */ { - t = yaz_tokenizer_move(yt); + t = yaz_tok_move(tp); /* must have a value now */ - if (t != YAZ_TOKENIZER_STRING) + if (t != YAZ_TOK_STRING) { *addinfo = "value token expected"; goto out; } - value_str = yaz_tokenizer_string(yt); + value_str = yaz_tok_parse_string(tp); if (sscanf(type_str, "%d", &type) == 1) ; @@ -231,7 +247,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, *addinfo = "too many attribute values"; goto out; } - t = yaz_tokenizer_move(yt); + t = yaz_tok_move(tp); if (t != ',') break; attsets[pair_no] = attsets[pair_no-1]; @@ -241,7 +257,7 @@ int ccl_qual_field2(CCL_bibset bibset, const char *cp, const char *qual_name, xfree(type_str); type_str = 0; - yaz_tokenizer_destroy(yt); + yaz_tok_parse_destroy(tp); if (*addinfo) {