X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=data1%2Fd1_read.c;h=91bea6ccf2cc4c3125e4cb8bb4c19763cc1622be;hb=e63cb633d580e1a364de81d4f24fb2c9fa70e279;hp=4a96ec30eb4f5a3413397ff3eda4a065d9dd6ab7;hpb=cf22d9136ae778877b227aa9d47dc3856a6d9149;p=idzebra-moved-to-github.git diff --git a/data1/d1_read.c b/data1/d1_read.c index 4a96ec3..91bea6c 100644 --- a/data1/d1_read.c +++ b/data1/d1_read.c @@ -1,4 +1,4 @@ -/* $Id: d1_read.c,v 1.15 2005-01-17 22:12:34 adam Exp $ +/* $Id: d1_read.c,v 1.17 2005-04-28 08:12:28 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -697,8 +697,7 @@ data1_node *data1_read_nodex (data1_handle dh, NMEM m, { data1_xattr *xattr; - char tag[64]; - char args[256]; + char tag[256]; int null_tag = 0; int end_tag = 0; size_t i = 0; @@ -709,6 +708,33 @@ data1_node *data1_read_nodex (data1_handle dh, NMEM m, end_tag = 1; c = ampr (get_byte, fh, &); } + else if (amp == 0 && c == '?') + { + int quote_mode = 0; + while ((c = ampr(get_byte, fh, &))) + { + if (amp) + continue; + if (quote_mode == 0) + { + if (c == '"') + quote_mode = c; + else if (c == '\'') + quote_mode = c; + else if (c == '>') + { + c = ampr(get_byte, fh, &); + break; + } + } + else + { + if (amp == 0 && c == quote_mode) + quote_mode = 0; + } + } + continue; + } else if (amp == 0 && c == '!') { int c0, amp0; @@ -776,7 +802,6 @@ data1_node *data1_read_nodex (data1_handle dh, NMEM m, } tag[i] = '\0'; xattr = data1_read_xattr (dh, m, get_byte, fh, wrbuf, &c, &); - args[0] = '\0'; if (amp == 0 && c == '/') { /* or */ null_tag = 1; @@ -829,17 +854,20 @@ data1_node *data1_read_nodex (data1_handle dh, NMEM m, } continue; } - else if (!strcmp(tag, "var")) + else if (!strcmp(tag, "var") + && xattr && xattr->next && xattr->next->next + && xattr->value == 0 + && xattr->next->value == 0 + && xattr->next->next->value == 0) { - char tclass[DATA1_MAX_SYMBOL], type[DATA1_MAX_SYMBOL]; + /* */ + const char *tclass = xattr->name; + const char *type = xattr->next->name; + const char *value = xattr->next->name; data1_vartype *tp; - int val_offset; - if (sscanf(args, "%s %s %n", tclass, type, &val_offset) != 2) - { - yaz_log(YLOG_WARN, "Malformed variant triple at '%s'", tag); - continue; - } + yaz_log(YLOG_LOG, "Variant class=%s type=%s value=%s", + tclass, type, value); if (!(tp = data1_getvartypebyct(dh, parent->root->u.root.absyn->varset, @@ -869,7 +897,7 @@ data1_node *data1_read_nodex (data1_handle dh, NMEM m, res = data1_mk_node2 (dh, m, DATA1N_variant, parent); res->u.variant.type = tp; res->u.variant.value = - data1_insert_string (dh, res, m, args + val_offset); + data1_insert_string (dh, res, m, value); } } else