21 void (*pr)(
const char *buf,
void *client_data),
24static void pr_term(
const char **cpp,
int stop_at_space,
25 void (*pr)(
const char *buf,
void *client_data),
30 for (cp = *cpp; *cp; cp++)
34 if (*cp ==
'\\' && cp[1])
38 pr(
"\"", client_data);
42 if (*cp ==
'\"' || *cp ==
'\\')
43 pr(
"\\", client_data);
52 pr(
"\"", client_data);
61 pr(
"\"", client_data);
66 else if (*cp ==
' ' && stop_at_space)
72 pr(
"\"", client_data);
81 pr(
"\"", client_data);
83 pr(
"\"\"", client_data);
88 void (*pr)(
const char *buf,
void *client_data),
91 const char *ccl_field = 0;
92 const char *split_op = 0;
93 const char *ccl_rel = 0;
102 else if (!strcmp(rel,
"<") || !strcmp(rel,
"<=")
103 || !strcmp(rel,
">") || !strcmp(rel,
">=")
104 || !strcmp(rel,
"<>") || !strcmp(rel,
"="))
116 else if (!strcmp(rel,
"==") || !
cql_strcmp(rel,
"adj"))
127 const char *cp = cn->
u.
st.
term;
130 if (ccl_field && ccl_rel)
132 pr(ccl_field, client_data);
133 pr(ccl_rel, client_data);
137 pr_term(&cp, split_op ? 1 : 0, pr, client_data);
142 pr(
" ", client_data);
145 pr(split_op, client_data);
146 pr(
" ", client_data);
151 pr(
" ", client_data);
154 pr(split_op, client_data);
155 pr(
" ", client_data);
164 void (*pr)(
const char *buf,
void *client_data),
170 pr(
"(", client_data);
175 pr(
") ", client_data);
179 pr(value, client_data);
201 distance = atoi(n->
u.
st.
term) - 1;
216 pr(ordered ?
"!" :
"%", client_data);
224 pr(
" (", client_data);
227 pr(
")", client_data);
232 void (*pr)(
const char *buf,
void *client_data),
241 return node_st(cn, pr, client_data);
251 void (*pr)(
const char *buf,
void *client_data),
271 info.
buf[info.
off] =
'\0';
static void pr_term(const char **cpp, int stop_at_space, void(*pr)(const char *buf, void *client_data), void *client_data)
int cql_to_ccl(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
converts CQL tree to CCL and writes to user-defined stream
static int cql_to_ccl_r(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
static int node_st(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
static int node_bool(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
int cql_to_ccl_buf(struct cql_node *cn, char *out, int max)
converts CQL tree to CCL and writes result to buffer
void cql_to_ccl_stdio(struct cql_node *cn, FILE *f)
converts CQL tree to CCL and writes to file
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.
int cql_strcmp(const char *s1, const char *s2)
compares two CQL strings (ala strcmp)
void cql_fputs(const char *buf, void *client_data)
stream handle for file (used by cql_to_xml_stdio)
void yaz_snprintf(char *buf, size_t size, const char *fmt,...)
Header for config file reading utilities.
Structure used by cql_buf_write_handler.
struct cql_node::@103257335133214234142137075341003020020243260314::@231337216262210265241053375071103126222160053350 st
union cql_node::@103257335133214234142137075341003020020243260314 u
struct cql_node * extra_terms
struct cql_node::@103257335133214234142137075341003020020243260314::@240210333203360145104277071333350273146264012233 boolean
struct cql_node * modifiers
struct cql_node::@103257335133214234142137075341003020020243260314::@115152140343061015107127141216014153002063077012 sort
void cql_buf_write_handler(const char *b, void *client_data)
Handler for cql_buf_write_info.