24930f3d41015c564a0e262fea69c677a153ae9b
[yaz-moved-to-github.git] / src / cclp.h
1 /*
2  * Copyright (C) 1995-2005, Index Data ApS
3  * See the file LICENSE for details.
4  *
5  * $Id: cclp.h,v 1.5 2007-05-01 12:22:11 adam Exp $
6  */
7
8 /** 
9  * \file cclp.h 
10  * \brief CCL header with private definitions 
11  */
12 #include <yaz/ccl.h>
13
14 #define CCL_TOK_EOL   0
15 #define CCL_TOK_TERM  1
16 #define CCL_TOK_REL   2
17 #define CCL_TOK_EQ    3
18 #define CCL_TOK_PROX  4
19 #define CCL_TOK_LP    5
20 #define CCL_TOK_RP    6
21 #define CCL_TOK_COMMA 7
22 #define CCL_TOK_AND   8
23 #define CCL_TOK_OR    9
24 #define CCL_TOK_NOT   10
25 #define CCL_TOK_SET   11
26
27 typedef struct ccl_qualifier *ccl_qualifier_t;
28
29 /** CCL token */
30 struct ccl_token {
31     char kind;
32     size_t len;                 /* length of name below */
33     const char *name;           /* string / name of token */
34     struct ccl_token *next;
35     struct ccl_token *prev;
36     const char *ws_prefix_buf;  /* leading white space buf */
37     size_t ws_prefix_len;       /* leading white space len */
38 };
39
40 /** CCL parser structure */
41 struct ccl_parser {
42     /** current lookahead token */
43     struct ccl_token *look_token;
44     
45     /** holds error code if error occur */
46     int error_code;
47     /** start of CCL string buffer */
48     const char *start_pos;
49     /** if error occurs, this holds position (starting from 0). */
50     const char *error_pos;
51     
52     /** current bibset */
53     CCL_bibset bibset;
54
55     /** names of and operator */
56     const char **ccl_token_and;
57     /** names of or operator */
58     const char **ccl_token_or;
59     /** names of not operator */
60     const char **ccl_token_not;
61     /** names of set operator */
62     const char **ccl_token_set;
63     /** 1=CCL parser is case sensitive, 0=case insensitive */
64     int ccl_case_sensitive;
65 };
66
67 /**
68  * Splits CCL command string into individual tokens using
69  * a CCL parser.
70  */
71 YAZ_EXPORT
72 struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command);
73
74 /** 
75  * Deletes token list
76  */
77 YAZ_EXPORT
78 void ccl_token_del (struct ccl_token *list);
79
80 /**
81  * Add single token after a given onde.
82  */
83 YAZ_EXPORT
84 struct ccl_token *ccl_token_add (struct ccl_token *at);
85
86
87 YAZ_EXPORT
88 struct ccl_rpn_node *ccl_parser_find_token(CCL_parser cclp,
89                                            struct ccl_token *list);
90
91
92 YAZ_EXPORT
93 ccl_qualifier_t ccl_qual_search(CCL_parser cclp, const char *name, 
94                                 size_t name_len, int seq);
95
96 YAZ_EXPORT
97 struct ccl_rpn_attr *ccl_qual_get_attr(ccl_qualifier_t q);
98
99 YAZ_EXPORT
100 const char *ccl_qual_get_name(ccl_qualifier_t q);
101
102 /*
103  * Local variables:
104  * c-basic-offset: 4
105  * indent-tabs-mode: nil
106  * End:
107  * vim: shiftwidth=4 tabstop=8 expandtab
108  */
109