X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fxcqlutil.c;h=19b5036fe78f954c50ac5d6bda1d35b680c97b5e;hb=443e78f2e7d7894a1a9cb3cac79e4b1a84ec7a11;hp=30be8acca2c722bcba706bac9ded046749bdab9a;hpb=d0e351c12fff564d876958e860338d43716dc269;p=yaz-moved-to-github.git
diff --git a/src/xcqlutil.c b/src/xcqlutil.c
index 30be8ac..19b5036 100644
--- a/src/xcqlutil.c
+++ b/src/xcqlutil.c
@@ -1,5 +1,5 @@
/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) 1995-2011 Index Data
* See the file LICENSE for details.
*/
/**
@@ -118,9 +118,36 @@ static void cql_to_xml_mod(struct cql_node *m,
}
}
+static void cql_sort_to_xml(struct cql_node *cn,
+ void (*pr)(const char *buf, void *client_data),
+ void *client_data, int level)
+{
+ if (cn)
+ {
+ pr_n("\n", pr, client_data, level);
+ for (; cn; cn = cn->u.sort.next)
+ {
+ pr_n("\n", pr, client_data, level+2);
+
+ if (cn->u.sort.index)
+ {
+ pr_n("", pr, client_data, level+4);
+ pr_cdata(cn->u.sort.index, pr, client_data);
+ pr_n("\n", pr, client_data, 0);
+
+ cql_to_xml_mod(cn->u.sort.modifiers,
+ pr, client_data, level+6);
+ }
+ 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)
+ void *client_data, int level,
+ struct cql_node *sort_node)
{
if (!cn)
return;
@@ -171,6 +198,7 @@ static void cql_to_xml_r(struct cql_node *cn,
pr_n("\n", pr, client_data, 0);
}
}
+ cql_sort_to_xml(sort_node, pr, client_data, level+2);
pr_n("\n", pr, client_data, level);
break;
case CQL_NODE_BOOL:
@@ -191,16 +219,20 @@ static void cql_to_xml_r(struct cql_node *cn,
if (cn->u.boolean.left)
{
printf ("%*s\n", level+2, "");
- cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4);
+ cql_to_xml_r(cn->u.boolean.left, pr, client_data, level+4, 0);
printf ("%*s\n", level+2, "");
}
if (cn->u.boolean.right)
{
printf ("%*s\n", level+2, "");
- cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4);
+ cql_to_xml_r(cn->u.boolean.right, pr, client_data, level+4, 0);
printf ("%*s\n", level+2, "");
}
+ cql_sort_to_xml(sort_node, pr, client_data, level+2);
pr_n("\n", pr, client_data, level);
+ break;
+ case CQL_NODE_SORT:
+ cql_to_xml_r(cn->u.sort.search, pr, client_data, level, cn);
}
}
@@ -208,7 +240,7 @@ void cql_to_xml(struct cql_node *cn,
void (*pr)(const char *buf, void *client_data),
void *client_data)
{
- cql_to_xml_r(cn, pr, client_data, 0);
+ cql_to_xml_r(cn, pr, client_data, 0, 0);
}
void cql_to_xml_stdio(struct cql_node *cn, FILE *f)