20 void (*pr)(
const char *buf,
void *client_data),
23 static void pr_term(
const char **cpp,
int stop_at_space,
24 void (*pr)(
const char *buf,
void *client_data),
29 for (cp = *cpp; *cp; cp++)
33 if (*cp ==
'\\' && cp[1])
37 pr(
"\"", client_data);
41 if (*cp ==
'\"' || *cp ==
'\\')
42 pr(
"\\", client_data);
51 pr(
"\"", client_data);
60 pr(
"\"", client_data);
65 else if (*cp ==
' ' && stop_at_space)
71 pr(
"\"", client_data);
80 pr(
"\"", client_data);
82 pr(
"\"\"", client_data);
87 void (*pr)(
const char *buf,
void *client_data),
90 const char *ccl_field = 0;
91 const char *split_op = 0;
92 const char *ccl_rel = 0;
93 const char *rel = cn->
u.
st.relation;
97 ccl_field = cn->
u.
st.index;
101 else if (!strcmp(rel,
"<") || !strcmp(rel,
"<=")
102 || !strcmp(rel,
">") || !strcmp(rel,
">=")
103 || !strcmp(rel,
"<>") || !strcmp(rel,
"="))
115 else if (!strcmp(rel,
"==") || !
cql_strcmp(rel,
"adj"))
124 for (; cn; cn = cn->
u.
st.extra_terms)
126 const char *cp = cn->
u.
st.term;
129 if (ccl_field && ccl_rel)
131 pr(ccl_field, client_data);
132 pr(ccl_rel, client_data);
136 pr_term(&cp, split_op ? 1 : 0, pr, client_data);
141 pr(
" ", client_data);
144 pr(split_op, client_data);
145 pr(
" ", client_data);
148 if (cn->
u.
st.extra_terms)
150 pr(
" ", client_data);
153 pr(split_op, client_data);
154 pr(
" ", client_data);
163 void (*pr)(
const char *buf,
void *client_data),
169 pr(
"(", client_data);
174 pr(
") ", client_data);
178 pr(value, client_data);
185 for (; n ; n = n->
u.
st.modifiers)
197 if (!strcmp(n->
u.
st.relation,
"<="))
198 distance = atoi(n->
u.
st.term);
199 else if (!strcmp(n->
u.
st.relation,
"<"))
200 distance = atoi(n->
u.
st.term) - 1;
215 pr(ordered ?
"!" :
"%", client_data);
219 sprintf(x,
"%d", distance);
223 pr(
" (", client_data);
226 pr(
")", client_data);
231 void (*pr)(
const char *buf,
void *client_data),
240 return node(cn, pr, client_data);
242 return bool(cn, pr, client_data);
250 void (*pr)(
const char *buf,
void *client_data),
270 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)
static int bool(struct cql_node *cn, 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 node(struct cql_node *cn, void(*pr)(const char *buf, void *client_data), void *client_data)
static int cql_to_ccl_r(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)
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
void cql_buf_write_handler(const char *b, void *client_data)
Handler for cql_buf_write_info.