81 const char *value_str = 0;
178 (*pp)->attr_list.num_attributes = ae_num;
180 (*pp)->attr_list.attributes = 0;
186 memcpy((*pp)->attr_list.attributes, ae,
232 while (ret == 0 && fgets(line,
sizeof(line)-1, f))
292 FILE *f = fopen(fname,
"r");
308#define Z_AttributeValue_numeric 1
309#define Z_AttributeValue_complex 2
336 const char *category,
340 size_t clen = strlen(category);
343 if (!strncmp(e->
pattern, category, clen))
377 const char *pat1,
const char *pat2,
383 if (pat1 && pat2 && pat3)
384 sprintf(
pattern,
"%.39s.%.39s.%.39s", pat1, pat2, pat3);
385 else if (pat1 && pat2)
386 sprintf(
pattern,
"%.39s.%.39s", pat1, pat2);
387 else if (pat1 && pat3)
388 sprintf(
pattern,
"%.39s.%.39s", pat1, pat3);
390 sprintf(
pattern,
"%.39s", pat1);
403 const char *uri,
const char *val,
const char *default_val,
404 void (*pr)(
const char *buf,
void *client_data),
409 const char *eval = val ? val : default_val;
410 const char *prefix = 0;
418 !strcmp(e->
value, uri))
431 if (!res && !prefix && !strcmp(category,
"relation"))
433 if (!strcmp(val,
"=="))
435 if (!strcmp(val,
"="))
437 if (!strcmp(val,
"<="))
439 if (!strcmp(val,
">="))
449 const char *cp0 = res, *cp1;
450 while ((cp1 = strchr(cp0,
'=')))
453 while (*cp1 && *cp1 !=
' ')
455 if (cp1 - cp0 >= (ptrdiff_t)
sizeof(buf))
457 memcpy(buf, cp0, cp1 - cp0);
459 (*pr)(
"@attr ", client_data);
461 for (i = 0; buf[i]; i++)
464 (*pr)(eval, client_data);
470 (*pr)(tmp, client_data);
473 (*pr)(
" ", client_data);
489 const char *val,
const char *default_val,
490 void (*pr)(
const char *buf,
void *client_data),
495 val, default_val, pr, client_data, errcode);
500 void (*pr)(
const char *buf,
void *client_data),
504 sprintf(buf,
"%d", val);
505 (*pr)(buf, client_data);
506 (*pr)(
" ", client_data);
512 void (*pr)(
const char *buf,
void *client_data),
524 const char *term = mods->
u.
st.
term;
527 if (!strcmp(
name,
"distance")) {
528 distance = strtol(term, (
char**) 0, 0);
529 if (!strcmp(relation,
"="))
531 else if (!strcmp(relation,
">"))
533 else if (!strcmp(relation,
"<"))
535 else if (!strcmp(relation,
">="))
537 else if (!strcmp(relation,
"<="))
539 else if (!strcmp(relation,
"<>"))
547 else if (!strcmp(
name,
"ordered"))
549 else if (!strcmp(
name,
"unordered"))
551 else if (!strcmp(
name,
"unit"))
569 distance = (unit == 2) ? 1 : 0;
575 (*pr)(
"k ", client_data);
594 const char *
term,
int length,
595 void (*pr)(
const char *buf,
void *client_data),
601 int process_term = 1;
611 r =
cql_pr_attr(ct, addinfo,
"truncation",
"cql", 0,
622 for (i = 0; i < length; i++)
624 if (
term[i] ==
'\\' && i < length - 1)
633 else if (i == length - 1)
639 else if (i == length - 1)
652 r =
cql_pr_attr(ct, addinfo,
"position",
"firstAndLast", 0,
660 else if (anchor == 1)
662 r =
cql_pr_attr(ct, addinfo,
"position",
"first", 0,
670 else if (anchor == 2)
672 r =
cql_pr_attr(ct, addinfo,
"position",
"last", 0,
689 if (trunc == 3 && !
cql_pr_attr(ct, addinfo,
"truncation",
690 "both", 0, pr, client_data, 0))
695 else if (trunc == 1 && !
cql_pr_attr(ct, addinfo,
"truncation",
696 "left", 0, pr, client_data, 0))
701 else if (trunc == 2 && !
cql_pr_attr(ct, addinfo,
"truncation",
702 "right", 0, pr, client_data, 0))
714 r =
cql_pr_attr(ct, addinfo,
"truncation",
"z3958", 0,
736 "relationModifier", mod->
u.
st.
index, 0,
744 (*pr)(
"\"", client_data);
746 for (i = 0; i < length; i++)
749 if (
term[i] ==
'\\' && i < length - 1)
752 if (strchr(
"\"\\",
term[i]))
753 pr(
"\\", client_data);
754 if (z3958_mode && strchr(
"#?",
term[i]))
755 pr(
"\\\\", client_data);
760 else if (z3958_mode &&
term[i] ==
'*')
762 pr(
"?", client_data);
764 pr(
"\\\\", client_data);
766 else if (z3958_mode &&
term[i] ==
'?')
768 pr(
"#", client_data);
773 pr(
"\\", client_data);
774 if (z3958_mode && strchr(
"#?",
term[i]))
775 pr(
"\\\\", client_data);
783 for (i = 0; i < length; i++)
791 (*pr)(
"\" ", client_data);
797 void (*pr)(
const char *buf,
void *client_data),
805 (*pr)(
"@", client_data);
806 (*pr)(op, client_data);
807 (*pr)(
" ", client_data);
815 (*pr)(
"@", client_data);
816 (*pr)(op, client_data);
817 (*pr)(
" ", client_data);
827 void (*pr)(
const char *buf,
void *client_data),
832 const char *cp0 = cn->
u.
st.
term;
834 const char *last_term = 0;
840 cp1 = strchr(cp0,
' ');
843 (*pr)(
"@", client_data);
844 (*pr)(op, client_data);
845 (*pr)(
" ", client_data);
846 r =
emit_term(ct, cn, addinfo, last_term, last_length,
851 last_length = cp1 - cp0;
853 last_length = strlen(cp0);
857 r =
emit_term(ct, cn, addinfo, last_term, last_length, pr, client_data);
863 void (*pr)(
const char *buf,
void *client_data),
881 (*pr)(
"@set \"", client_data);
882 (*pr)(cn->
u.
st.
term, client_data);
883 (*pr)(
"\" ", client_data);
904 pr(
"@prox 0 0 0 0 k 8 ", client_data);
908 cql_pr_attr(ct, addinfo,
"always", 0, 0, pr, client_data, 0);
923 r =
emit_terms(ct, cn, addinfo, pr, client_data,
"and");
938 pr(mod->
u.
st.
term, client_data);
939 pr(
" ", client_data);
945 (*pr)(
"@", client_data);
947 (*pr)(
" ", client_data);
951 r =
cql_pr_prox(ct, mods, addinfo, pr, client_data);
973 fprintf(stderr,
"Fatal: impossible CQL node-type %d\n", cn->
which);
981 void (*pr)(
const char *buf,
void *client_data),
995 r =
emit_node(ct, cn, addinfo, pr, client_data);
1001 void (*pr)(
const char *buf,
void *client_data),
1031 sprintf(numbuf,
"%ld", (
long) info.
max);
1036 info.
buf[info.
off] =
'\0';
#define CQL_NODE_SORT
Node type: sortby single spec.
struct cql_transform_t_ * cql_transform_t
CQL transform handle. The transform describes how to convert from CQL to PQF (Type-1 AKA RPN).
#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)
int cql_strncmp(const char *s1, const char *s2, size_t n)
compares two CQL strings (ala strncmp)
struct cql_node * cql_apply_prefix(NMEM nmem, struct cql_node *n, const char *prefix, const char *uri)
applies a prefix+uri to "unresolved" index and relation URIs. "unresolved" URIs are those nodes where...
void cql_fputs(const char *buf, void *client_data)
stream handle for file (used by cql_to_xml_stdio)
const char * cql_uri(void)
returns the standard CQL context set URI.
Diagnostics: Generated by csvtodiag.tcl from ./srw.csv.
#define YAZ_SRW_UNSUPP_PROX_RELATION
#define YAZ_SRW_UNSUPP_CONTEXT_SET
#define YAZ_SRW_UNSUPP_INDEX
#define YAZ_SRW_MASKING_CHAR_UNSUPP
#define YAZ_SRW_UNSUPP_PROX_UNIT
#define YAZ_SRW_UNSUPP_BOOLEAN_MODIFIER
#define YAZ_SRW_UNSUPP_RELATION
#define YAZ_SRW_ANCHORING_CHAR_IN_UNSUPP_POSITION
#define YAZ_SRW_TOO_MANY_CHARS_IN_QUERY
#define YAZ_SRW_UNSUPP_RELATION_MODIFIER
#define YAZ_SRW_UNSUPP_COMBI_OF_RELATION_AND_TERM
void yaz_log(int level, const char *fmt,...)
Writes log message.
FILE * yaz_log_file(void)
returns FILE handle for log or NULL if no file is in use
#define YLOG_WARN
log level: warning
int yaz_memcmp(const void *a, const void *b, size_t len_a, size_t len_b)
compares two buffers of different size
Header for YAZ iconv interface.
NMEM nmem_create(void)
returns new NMEM handle
void * nmem_malloc(NMEM n, size_t size)
allocates memory block on NMEM handle
void nmem_destroy(NMEM n)
destroys NMEM handle and memory associated with it
nmem_int_t * nmem_intdup(NMEM mem, nmem_int_t v)
allocates and sets integer for NMEM
char * nmem_strdup(NMEM mem, const char *src)
allocates string on NMEM handle (similar strdup)
void odr_setprint_noclose(ODR o, FILE *file)
char * odr_getbuf(ODR o, int *len, int *size)
ODR odr_createmem(int direction)
Odr_oid * yaz_string_to_oid_nmem(yaz_oid_db_t oid_list, oid_class oclass, const char *name, NMEM nmem)
creates NMEM malloc'ed OID from string
yaz_oid_db_t yaz_oid_std(void)
returns standard OID database
const Odr_oid yaz_oid_attset_bib_1[]
int oid_oidcmp(const Odr_oid *o1, const Odr_oid *o2)
compares OIDs
int z_str_to_ProxUnit(const char *str)
converts unit name string to unit integer
Header for JSON functions.
Header for RPN to CQL tranform.
union Z_AttributeElement::@50 value
Z_ComplexAttribute * complex
Z_AttributeSetId * attributeSet
Z_AttributeElement ** attributes
Z_StringOrNumeric ** list
Odr_int ** semanticAction
union Z_StringOrNumeric::@72 u
Z_InternationalString * string
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
struct cql_node * extra_terms
struct cql_node * modifiers
Z_AttributeList attr_list
struct cql_prop_entry * next
yaz_tok_parse_t yaz_tok_parse_buf(yaz_tok_cfg_t t, const char *buf)
yaz_tok_cfg_t yaz_tok_cfg_create(void)
void yaz_tok_parse_destroy(yaz_tok_parse_t tp)
void yaz_tok_cfg_single_tokens(yaz_tok_cfg_t t, const char *simple)
void yaz_tok_cfg_destroy(yaz_tok_cfg_t t)
const char * yaz_tok_parse_string(yaz_tok_parse_t tp)
int yaz_tok_move(yaz_tok_parse_t tp)
Header with public definitions about YAZ' tokenizer.
void wrbuf_destroy(WRBUF b)
destroy WRBUF and its buffer
const char * wrbuf_cstr(WRBUF b)
returns WRBUF content as C-string
void wrbuf_rewind(WRBUF b)
empty WRBUF content (length of buffer set to 0)
WRBUF wrbuf_alloc(void)
construct WRBUF
void wrbuf_puts(WRBUF b, const char *buf)
appends C-string to WRBUF
Header for WRBUF (growing buffer)
void cql_buf_write_handler(const char *b, void *client_data)
Handler for cql_buf_write_info.
Header for memory handling functions.
#define xstrdup(s)
utility macro which calls xstrdup_f
#define xfree(x)
utility macro which calls xfree_f
#define xmalloc(x)
utility macro which calls malloc_f
ASN.1 Module Z39-50-APDU-1995.
#define Z_AttributeValue_numeric
int z_AttributeList(ODR o, Z_AttributeList **p, int opt, const char *name)
#define Z_AttributeValue_complex
#define Z_StringOrNumeric_string
int z_AttributeElement(ODR o, Z_AttributeElement **p, int opt, const char *name)