/*
* CCL - header file
*
- * $Id: ccl.h,v 1.24 2007-04-25 20:52:18 adam Exp $
+ * $Id: ccl.h,v 1.29 2007-05-01 12:22:10 adam Exp $
*
* Old Europagate Log:
*
YAZ_BEGIN_CDECL
-/* CCL error numbers */
#define CCL_ERR_OK 0
#define CCL_ERR_TERM_EXPECTED 1
#define CCL_ERR_RP_EXPECTED 2
#define CCL_ERR_TRUNC_NOT_BOTH 11
#define CCL_ERR_TRUNC_NOT_RIGHT 12
-/** attribute node (type, value) pair as used in RPN */
+/** \brief attribute node (type, value) pair as used in RPN */
struct ccl_rpn_attr {
- /** next node */
+ /** \brief next attribute */
struct ccl_rpn_attr *next;
- /** attribute set */
+ /** \brief attribute set */
char *set;
- /** attribute type, Bib-1: 1=use, 2=relation, 3=position, .. */
+ /** \brief attribute type, Bib-1: 1=use, 2=relation, 3=position, .. */
int type;
- /** attribute value type (numeric or string) */
+ /** \brief attribute value type (numeric or string) */
int kind;
#define CCL_RPN_ATTR_NUMERIC 1
#define CCL_RPN_ATTR_STRING 2
union {
- /** numeric attribute value */
+ /** \brief numeric attribute value */
int numeric;
- /** string attribute value */
+ /** \brief string attribute value */
char *str;
} value;
};
-#define CCL_RPN_AND 1
-#define CCL_RPN_OR 2
-#define CCL_RPN_NOT 3
-#define CCL_RPN_TERM 4
-#define CCL_RPN_SET 5
-#define CCL_RPN_PROX 6
+/** \brief node type or RPN tree generated by the CCL parser */
+enum ccl_rpn_kind {
+ CCL_RPN_AND,
+ CCL_RPN_OR,
+ CCL_RPN_NOT,
+ CCL_RPN_TERM,
+ CCL_RPN_SET,
+ CCL_RPN_PROX
+};
-/** RPN tree structure node */
+/** \brief RPN tree structure node */
struct ccl_rpn_node {
- /** RPN tree node type */
- int kind;
+ /** \brief node type, one of CCL_RPN_AND, CCL_RPN_OR,.. */
+ enum ccl_rpn_kind kind;
union {
- /** Boolean including proximity 0=left, 2=right, 3=prox parms */
+ /** \brief Boolean including proximity 0=left, 1=right, 2=prox parms */
struct ccl_rpn_node *p[3];
- /** Attributes + Term */
+ /** \brief Attributes + Term */
struct {
char *term;
+ char *qual;
struct ccl_rpn_attr *attr_list;
} t;
/** Result set */
} u;
};
+/** \brief CCL bibset, AKA profile */
typedef struct ccl_qualifiers *CCL_bibset;
-/* use (1)
-
- relation (2)
- -1 none
- 0 ordered
- 1-6 relation (<, <=, =, >=, >, <>)
-
- position (3)
- -1 none
- 1 first in field
- 2 first in sub field
- 3 any position in field
- structure (4)
- -1 none
- 0 word/phrase auto select
- 1 phrase
- 2 word
- 3 key
- 4 year
- 5 date (normalized)
- 6 word list
- 100 date (un-normalized)
- 101 name (normalized)
- 102 name (un-normalized)
- truncation (5)
- completeness (6)
-*/
-
-#define CCL_BIB1_USE 1
-#define CCL_BIB1_REL 2
-#define CCL_BIB1_POS 3
-#define CCL_BIB1_STR 4
-#define CCL_BIB1_TRU 5
-#define CCL_BIB1_COM 6
-
-#define CCL_BIB1_STR_WP (-1)
-#define CCL_BIB1_STR_AND_LIST (-2)
-#define CCL_BIB1_STR_OR_LIST (-3)
-#define CCL_BIB1_REL_ORDER (-1)
-#define CCL_BIB1_REL_PORDER (-2)
-
-#define CCL_BIB1_TRU_CAN_LEFT (-1)
-#define CCL_BIB1_TRU_CAN_RIGHT (-2)
-#define CCL_BIB1_TRU_CAN_BOTH (-3)
-#define CCL_BIB1_TRU_CAN_NONE (-4)
-
+/** \brief CCL parser */
typedef struct ccl_parser *CCL_parser;
/**
- * Parses a CCL Find command in a simple C string. Returns CCL parse
- * tree node describing RPN if parsing is successful. If parsing is
- * unsuccesful, NULL is returned and error and pos is set accordingly.
- */
-YAZ_EXPORT
-struct ccl_rpn_node *ccl_find_str (CCL_bibset bibset,
- const char *str, int *error, int *pos);
-
-YAZ_EXPORT
-struct ccl_rpn_node *ccl_parser_find_str(CCL_parser cclp, const char *str);
-
-/** Set names for AND operator in parser */
-YAZ_EXPORT
-void ccl_parser_set_op_and (CCL_parser p, const char *op);
-
-/** Set names for OR operator in parser */
+ \brief parse CCL find string using CCL profile return RPN tree
+
+ Parses a CCL Find command in a simple C string. Returns CCL parse
+ tree node describing RPN if parsing is successful. If parsing is
+ unsuccesful, NULL is returned and error and pos is set accordingly.
+*/
YAZ_EXPORT
-void ccl_parser_set_op_or (CCL_parser p, const char *op);
+struct ccl_rpn_node *ccl_find_str(CCL_bibset bibset,
+ const char *str, int *error, int *pos);
-/** Set names for ANDNOT operator in parser */
-YAZ_EXPORT
-void ccl_parser_set_op_not (CCL_parser p, const char *op);
-/** Set names for ResultSet in parser */
+/**
+ \brief parse CCL find string with parser and return RPN tree
+
+ Parses a CCL Find command in a simple C string. Returns CCL parse
+ tree node describing RPN if parsing is successful. If parsing is
+ unsuccesful, NULL is returned and error and pos is set accordingly.
+*/
YAZ_EXPORT
-void ccl_parser_set_op_set (CCL_parser p, const char *op);
+struct ccl_rpn_node *ccl_parser_find_str(CCL_parser cclp, const char *str);
/** Set case sensitivity for parser */
YAZ_EXPORT
-void ccl_parser_set_case (CCL_parser p, int case_sensitivity_flag);
+void ccl_parser_set_case(CCL_parser p, int case_sensitivity_flag);
/** Return english-readable error message for CCL parser error number */
YAZ_EXPORT
-const char *ccl_err_msg (int ccl_errno);
+const char *ccl_err_msg(int ccl_errno);
/** Delete RPN tree returned by ccl_find */
YAZ_EXPORT
-void ccl_rpn_delete (struct ccl_rpn_node *rpn);
+void ccl_rpn_delete(struct ccl_rpn_node *rpn);
/** Dump RPN tree in readable format to fd_out */
YAZ_EXPORT
-void ccl_pr_tree (struct ccl_rpn_node *rpn, FILE *fd_out);
+void ccl_pr_tree(struct ccl_rpn_node *rpn, FILE *fd_out);
/** Add qualifier and supply attribute pairs for it */
YAZ_EXPORT
-void ccl_qual_add (CCL_bibset b, const char *name, int no, int *attr);
+void ccl_qual_add(CCL_bibset b, const char *name, int no, int *attr);
/** Add qualifier and supply attributes pairs+attribute set for it */
YAZ_EXPORT
-void ccl_qual_add_set (CCL_bibset b, const char *name, int no,
- int *type, int *value, char **svalue, char **attsets);
+void ccl_qual_add_set(CCL_bibset b, const char *name, int no,
+ int *type, int *value, char **svalue, char **attsets);
/** Add special qualifier */
YAZ_EXPORT
-void ccl_qual_add_special (CCL_bibset bibset, const char *n, const char *v);
+void ccl_qual_add_special(CCL_bibset bibset, const char *n, const char *cp);
/** Add combo qualifier */
YAZ_EXPORT
-void ccl_qual_add_combi (CCL_bibset b, const char *n, const char *names);
+void ccl_qual_add_combi(CCL_bibset b, const char *n, const char **names);
/** Read CCL qualifier list spec from file inf */
YAZ_EXPORT
-void ccl_qual_file (CCL_bibset bibset, FILE *inf);
+void ccl_qual_file(CCL_bibset bibset, FILE *inf);
/** Read CCL qualifier list spec from file inf */
YAZ_EXPORT
-int ccl_qual_fname (CCL_bibset bibset, const char *fname);
+int ccl_qual_fname(CCL_bibset bibset, const char *fname);
-/** Add CCL qualifier as buf spec (multiple lines). */
+/** Add CCL qualifier as buf spec(multiple lines). */
YAZ_EXPORT
void ccl_qual_buf(CCL_bibset bibset, const char *buf);
/* Add CCL qualifier by using qual_name + value pair */
YAZ_EXPORT
-void ccl_qual_fitem (CCL_bibset bibset, const char *value,
- const char *qual_name);
+void ccl_qual_fitem(CCL_bibset bibset, const char *value,
+ const char *qual_name);
/** Make CCL qualifier set */
YAZ_EXPORT
-CCL_bibset ccl_qual_mk (void);
+CCL_bibset ccl_qual_mk(void);
/** Delete CCL qualifier set */
YAZ_EXPORT
-void ccl_qual_rm (CCL_bibset *b);
+void ccl_qual_rm(CCL_bibset *b);
/** Char-to-upper function */
-extern int (*ccl_toupper)(int c);
+extern int(*ccl_toupper)(int c);
/** CCL version of ccl_stricmp */
YAZ_EXPORT
-int ccl_stricmp (const char *s1, const char *s2);
+int ccl_stricmp(const char *s1, const char *s2);
/** CCL version of ccl_memicmp */
YAZ_EXPORT
-int ccl_memicmp (const char *s1, const char *s2, size_t n);
-
-/** Search for qualifier 'name' in set 'b'. */
-YAZ_EXPORT
-struct ccl_rpn_attr *ccl_qual_search (CCL_parser cclp, const char *name,
- size_t len, int seq);
+int ccl_memicmp(const char *s1, const char *s2, size_t n);
/** Create CCL parser */
YAZ_EXPORT
-CCL_parser ccl_parser_create (CCL_bibset bibset);
+CCL_parser ccl_parser_create(CCL_bibset bibset);
/** Destroy CCL parser */
YAZ_EXPORT
-void ccl_parser_destroy (CCL_parser p);
-
-/** String dup utility (ala strdup) */
-YAZ_EXPORT
-char *ccl_strdup (const char *str);
+void ccl_parser_destroy(CCL_parser p);
/** Search for special qualifier */
YAZ_EXPORT
-const char *ccl_qual_search_special (CCL_bibset b, const char *name);
+const char **ccl_qual_search_special(CCL_bibset b, const char *name);
/** Pretty-print CCL RPN node tree to WRBUF */
YAZ_EXPORT
-void ccl_pquery (WRBUF w, struct ccl_rpn_node *p);
+void ccl_pquery(WRBUF w, struct ccl_rpn_node *p);
YAZ_EXPORT
-CCL_bibset ccl_parser_get_bibset(CCL_parser cclp);
+int ccl_parser_get_error(CCL_parser cclp, int *pos);
YAZ_EXPORT
-int ccl_parser_get_error(CCL_parser cclp, int *pos);
+struct ccl_rpn_node *ccl_rpn_node_create(enum ccl_rpn_kind kind);
+
+YAZ_EXPORT
+void ccl_add_attr_numeric(struct ccl_rpn_node *p, const char *set,
+ int type, int value);
+
+YAZ_EXPORT
+void ccl_add_attr_string(struct ccl_rpn_node *p, const char *set,
+ int type, char *value);
+
+YAZ_EXPORT
+int ccl_search_stop(CCL_bibset bibset, const char *qname,
+ const char *src_str, size_t src_len);
+
+
+/** \brief stop words handle (pimpl) */
+typedef struct ccl_stop_words *ccl_stop_words_t;
+
+/** \brief creates stop words handle */
+YAZ_EXPORT
+ccl_stop_words_t ccl_stop_words_create(void);
+
+/** \brief destroys stop words handle */
+YAZ_EXPORT
+void ccl_stop_words_destroy(ccl_stop_words_t csw);
+
+/** \brief removes stop words from RPN tree */
+YAZ_EXPORT
+int ccl_stop_words_tree(ccl_stop_words_t csw,
+ CCL_bibset bibset, struct ccl_rpn_node **t);
+
+/** \brief returns information about removed "stop" words */
+YAZ_EXPORT
+int ccl_stop_words_info(ccl_stop_words_t csw, int idx,
+ const char **qualname, const char **term);
#ifndef ccl_assert
#define ccl_assert(x) ;
#endif
+
+/** \brief common attributes
+
+ use (1)
+
+ relation (2)
+ -1 none
+ 0 ordered
+ 1-6 relation (<, <=, =, >=, >, <>)
+
+ position (3)
+ -1 none
+ 1 first in field
+ 2 first in sub field
+ 3 any position in field
+ structure (4)
+ -1 none
+ 0 word/phrase auto select
+ 1 phrase
+ 2 word
+ 3 key
+ 4 year
+ 5 date (normalized)
+ 6 word list
+ 100 date (un-normalized)
+ 101 name (normalized)
+ 102 name (un-normalized)
+ truncation (5)
+ completeness (6)
+*/
+
+#define CCL_BIB1_USE 1
+#define CCL_BIB1_REL 2
+#define CCL_BIB1_POS 3
+#define CCL_BIB1_STR 4
+#define CCL_BIB1_TRU 5
+#define CCL_BIB1_COM 6
+
+#define CCL_BIB1_STR_WP (-1)
+#define CCL_BIB1_STR_AND_LIST (-2)
+#define CCL_BIB1_STR_OR_LIST (-3)
+#define CCL_BIB1_REL_ORDER (-1)
+#define CCL_BIB1_REL_PORDER (-2)
+
+#define CCL_BIB1_TRU_CAN_LEFT (-1)
+#define CCL_BIB1_TRU_CAN_RIGHT (-2)
+#define CCL_BIB1_TRU_CAN_BOTH (-3)
+#define CCL_BIB1_TRU_CAN_NONE (-4)
+
+
+
YAZ_END_CDECL
#endif