X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fxcqlutil.c;h=b884b6ec85b6300dffb5950a72e2efd344b9ec71;hp=9c38de1c06d803fa0a2068cc177bbee41b72d788;hb=42f18e58ed67f77727cde23bcee44dbd32ed242a;hpb=a4c9e87155ec7e343559946290ed8262cf5acf81 diff --git a/src/xcqlutil.c b/src/xcqlutil.c index 9c38de1..b884b6e 100644 --- a/src/xcqlutil.c +++ b/src/xcqlutil.c @@ -1,5 +1,5 @@ -/* $Id: xcqlutil.c,v 1.1 2003-10-27 12:21:36 adam Exp $ - Copyright (C) 2002-2003 +/* $Id: xcqlutil.c,v 1.2 2004-03-10 16:34:29 adam Exp $ + Copyright (C) 2002-2004 Index Data Aps This file is part of the YAZ toolkit. @@ -57,19 +57,19 @@ static void prefixes(struct cql_node *cn, if (cn) { pr_n("\n", pr, client_data, level); - for (; cn; cn = cn->u.mod.next) + for (; cn; cn = cn->u.st.modifiers) { pr_n("\n", pr, client_data, level+2); - if (cn->u.mod.name) + if (cn->u.st.index) { pr_n("", pr, client_data, level+4); - pr_cdata(cn->u.mod.name, pr, client_data); + pr_cdata(cn->u.st.index, pr, client_data); pr_n("\n", pr, client_data, 0); } - if (cn->u.mod.value) + if (cn->u.st.term) { pr_n("", pr, client_data, level+4); - pr_cdata(cn->u.mod.value, pr, client_data); + pr_cdata(cn->u.st.term, pr, client_data); pr_n("\n", pr, client_data, 0); } pr_n("\n", pr, client_data, level+2); @@ -78,6 +78,37 @@ static void prefixes(struct cql_node *cn, } } +static void cql_to_xml_mod(struct cql_node *m, + void (*pr)(const char *buf, void *client_data), + void *client_data, int level) +{ + if (m) + { + pr_n("\n", pr, client_data, level); + for (; m; m = m->u.st.modifiers) + { + pr_n("\n", pr, client_data, level+2); + pr_n("", pr, client_data, level+4); + pr_cdata(m->u.st.index, pr, client_data); + pr_n("\n", pr, client_data, 0); + if (m->u.st.relation) + { + pr_n("", pr, client_data, level+4); + pr_cdata(m->u.st.relation, pr, client_data); + pr_n("\n", pr, client_data, 0); + } + if (m->u.st.term) + { + pr_n("", pr, client_data, level+4); + pr_cdata(m->u.st.term, pr, client_data); + pr_n("\n", pr, client_data, 0); + } + pr_n("\n", pr, client_data, level+2); + } + pr_n("\n", pr, client_data, level); + } +} + static void cql_to_xml_r(struct cql_node *cn, void (*pr)(const char *buf, void *client_data), void *client_data, int level) @@ -97,22 +128,14 @@ static void cql_to_xml_r(struct cql_node *cn, } if (cn->u.st.relation) { - struct cql_node *m = cn->u.st.modifiers; pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata(cn->u.st.relation, pr, client_data); pr_n("\n", pr, client_data, 0); - if (m) - { - pr_n("\n", pr, client_data, level+4); - for (; m; m = m->u.mod.next) - { - pr_n("", pr, client_data, level+6); - pr_cdata(m->u.mod.value, pr, client_data); - pr_n("\n", pr, client_data, 0); - } - pr_n("\n", pr, client_data, level+4); - } + + cql_to_xml_mod(cn->u.st.modifiers, + pr, client_data, level+4); + pr_n("\n", pr, client_data, level+2); } if (cn->u.st.term) @@ -128,31 +151,15 @@ static void cql_to_xml_r(struct cql_node *cn, prefixes(cn->u.st.prefixes, pr, client_data, level+2); if (cn->u.boolean.value) { - struct cql_node *m = cn->u.boolean.modifiers; pr_n("\n", pr, client_data, level+2); pr_n("", pr, client_data, level+4); pr_cdata(cn->u.boolean.value, pr, client_data); pr_n("\n", pr, client_data, 0); - if (m) - { - pr_n("\n", pr, client_data, level+4); - for (; m; m = m->u.mod.next) - { - pr_n("", pr, client_data, level+6); - pr_cdata(m->u.mod.name, pr, client_data); - pr_n("", pr, client_data, 0); - if (m->u.mod.value) - { - pr_n("", pr, client_data, 0); - pr_cdata(m->u.mod.value, pr, client_data); - pr_n("", pr, client_data, 0); - } - pr_n("\n", pr, client_data, 0); - } - pr_n("\n", pr, client_data, level+4); - } + cql_to_xml_mod(cn->u.boolean.modifiers, + pr, client_data, level+4); + pr_n("\n", pr, client_data, level+2); } if (cn->u.boolean.left)