X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=data1%2Fd1_read.c;h=c9d92b6fe1e81bf5b3ad677288751dffc4089bd5;hb=bd3a317131488141726cedfba9f86b9e479c5385;hp=4a96ec30eb4f5a3413397ff3eda4a065d9dd6ab7;hpb=cf22d9136ae778877b227aa9d47dc3856a6d9149;p=idzebra-moved-to-github.git
diff --git a/data1/d1_read.c b/data1/d1_read.c
index 4a96ec3..c9d92b6 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.19 2006-06-13 12:02:02 adam Exp $
Copyright (C) 1995-2005
Index Data ApS
@@ -188,7 +188,7 @@ void data1_free_tree (data1_handle dh, data1_node *t)
data1_node *data1_mk_root (data1_handle dh, NMEM nmem, const char *name)
{
- data1_absyn *absyn = data1_get_absyn (dh, name);
+ data1_absyn *absyn = data1_get_absyn(dh, name, 1);
data1_node *res;
if (!absyn)
{
@@ -205,7 +205,8 @@ data1_node *data1_mk_root (data1_handle dh, NMEM nmem, const char *name)
void data1_set_root(data1_handle dh, data1_node *res,
NMEM nmem, const char *name)
{
- data1_absyn *absyn = data1_get_absyn (dh, name);
+ data1_absyn *absyn = data1_get_absyn(
+ dh, name, DATA1_XPATH_INDEXING_ENABLE);
res->u.root.type = data1_insert_string (dh, res, nmem, name);
res->u.root.absyn = absyn;
@@ -697,8 +698,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 +709,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 +803,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 +855,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 +898,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
@@ -1150,3 +1179,11 @@ void data1_concat_text(data1_handle dh, NMEM m, data1_node *n)
data1_concat_text(dh, m, n->child);
}
}
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+