19 static void pr_n(
const char *buf,
20 void (*pr)(
const char *buf,
void *client_data),
21 void *client_data,
int n)
25 (*pr)(
" ", client_data);
26 (*pr)(buf, client_data);
30 void (*pr)(
const char *buf,
void *client_data),
33 const char *src = buf;
40 (*pr)(
"&", client_data);
43 (*pr)(
"<", client_data);
46 (*pr)(
">", client_data);
51 (*pr)(bf, client_data);
58 void (*pr)(
const char *buf,
void *client_data),
59 void *client_data,
int level)
62 if (cn->
u.
st.index_uri)
64 pr_n(
"<prefixes>\n", pr, client_data, level);
67 pr_n(
"<prefix>\n", pr, client_data, level+2);
68 pr_n(
"<identifier>", pr, client_data, level+4);
70 pr_n(
"</identifier>\n", pr, client_data, 0);
71 pr_n(
"</prefix>\n", pr, client_data, level+2);
73 if (cn->
u.
st.relation_uri && cn->
u.
st.relation)
76 pr_n(
"<prefixes>\n", pr, client_data, level);
77 pr_n(
"<prefix>\n", pr, client_data, level+2);
78 pr_n(
"<name>", pr, client_data, level+4);
80 pr_n(
"</name>\n", pr, client_data, 0);
81 pr_n(
"<identifier>", pr, client_data, level+4);
83 pr_n(
"</identifier>\n", pr, client_data, 0);
84 pr_n(
"</prefix>\n", pr, client_data, level+2);
87 pr_n(
"</prefixes>\n", pr, client_data, level);
91 void (*pr)(
const char *buf,
void *client_data),
92 void *client_data,
int level)
96 pr_n(
"<modifiers>\n", pr, client_data, level);
97 for (; m; m = m->
u.
st.modifiers)
99 pr_n(
"<modifier>\n", pr, client_data, level+2);
100 pr_n(
"<type>", pr, client_data, level+4);
102 pr_n(
"</type>\n", pr, client_data, 0);
103 if (m->
u.
st.relation)
105 pr_n(
"<comparison>", pr, client_data, level+4);
107 pr_n(
"</comparison>\n", pr, client_data, 0);
111 pr_n(
"<value>", pr, client_data, level+4);
113 pr_n(
"</value>\n", pr, client_data, 0);
115 pr_n(
"</modifier>\n", pr, client_data, level+2);
117 pr_n(
"</modifiers>\n", pr, client_data, level);
122 void (*pr)(
const char *buf,
void *client_data),
123 void *client_data,
int level)
127 pr_n(
"<sortKeys>\n", pr, client_data, level);
128 for (; cn; cn = cn->
u.
sort.next)
130 pr_n(
"<key>\n", pr, client_data, level+2);
132 if (cn->
u.
sort.index)
134 pr_n(
"<index>", pr, client_data, level+4);
136 pr_n(
"</index>\n", pr, client_data, 0);
139 pr, client_data, level+6);
141 pr_n(
"</key>\n", pr, client_data, level+2);
143 pr_n(
"</sortKeys>\n", pr, client_data, level);
148 void (*pr)(
const char *buf,
void *client_data),
149 void *client_data,
int level,
157 pr_n(
"<searchClause>\n", pr, client_data, level);
158 prefixes(cn, pr, client_data, level+2);
161 pr_n(
"<index>", pr, client_data, level+2);
163 pr_n(
"</index>\n", pr, client_data, 0);
165 if (cn->
u.
st.relation)
167 pr_n(
"<relation>\n", pr, client_data, level+2);
168 pr_n(
"<value>", pr, client_data, level+4);
169 if (cn->
u.
st.relation_uri)
172 pr_n(
"</value>\n", pr, client_data, 0);
174 if (cn->
u.
st.relation_uri)
176 pr_n(
"<identifier>", pr, client_data, level+4);
178 pr_n(
"</identifier>\n", pr, client_data, 0);
181 pr, client_data, level+4);
183 pr_n(
"</relation>\n", pr, client_data, level+2);
187 pr_n(
"<term>", pr, client_data, level+2);
189 pr_n(
"</term>\n", pr, client_data, 0);
191 if (cn->
u.
st.extra_terms)
194 for (; n; n = n->
u.
st.extra_terms)
196 pr_n(
"<term>", pr, client_data, level+2);
198 pr_n(
"</term>\n", pr, client_data, 0);
202 pr_n(
"</searchClause>\n", pr, client_data, level);
205 pr_n(
"<triple>\n", pr, client_data, level);
208 pr_n(
"<boolean>\n", pr, client_data, level+2);
210 pr_n(
"<value>", pr, client_data, level+4);
212 pr_n(
"</value>\n", pr, client_data, 0);
215 pr, client_data, level+4);
217 pr_n(
"</boolean>\n", pr, client_data, level+2);
221 printf (
"%*s<leftOperand>\n", level+2,
"");
223 printf (
"%*s</leftOperand>\n", level+2,
"");
227 printf (
"%*s<rightOperand>\n", level+2,
"");
229 printf (
"%*s</rightOperand>\n", level+2,
"");
232 pr_n(
"</triple>\n", pr, client_data, level);
240 void (*pr)(
const char *buf,
void *client_data),
255 if (info->
off < 0 || (info->
off + l >= info->
max))
260 memcpy (info->
buf + info->
off, b, l);
272 info.
buf[info.
off] =
'\0';
Header with public definitions about CQL.
#define CQL_NODE_SORT
Node type: sortby single spec.
#define CQL_NODE_ST
Node type: search term.
#define CQL_NODE_BOOL
Node type: boolean.
void cql_fputs(const char *buf, void *client_data)
stream handle for file (used by cql_to_xml_stdio)
Structure used by cql_buf_write_handler.
struct cql_node::@10::@12 boolean
struct cql_node::@10::@13 sort
struct cql_node::@10::@11 st
static void cql_sort_to_xml(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data, int level)
void cql_to_xml(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
converts CQL tree to XCQL and writes to user-defined stream
static void cql_to_xml_r(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data, int level, struct cql_node *sort_node)
static void pr_n(const char *buf, void(*pr)(const char *buf, void *client_data), void *client_data, int n)
static void cql_to_xml_mod(struct cql_node *m, void(*pr)(const char *buf, void *client_data), void *client_data, int level)
static void pr_cdata(const char *buf, void(*pr)(const char *buf, void *client_data), void *client_data)
void cql_to_xml_stdio(struct cql_node *cn, FILE *f)
converts CQL tree to XCQL and writes to file
int cql_to_xml_buf(struct cql_node *cn, char *out, int max)
converts CQL tree to XCQL and writes result to buffer
static void prefixes(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data, int level)
void cql_buf_write_handler(const char *b, void *client_data)
Handler for cql_buf_write_info.