1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2009 Index Data.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of Index Data nor the names of its contributors
13 * may be used to endorse or promote products derived from this
14 * software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 * \brief CCL header with private definitions
35 #define CCL_TOK_TERM 1
38 #define CCL_TOK_PROX 4
41 #define CCL_TOK_COMMA 7
44 #define CCL_TOK_NOT 10
45 #define CCL_TOK_SET 11
47 typedef struct ccl_qualifier *ccl_qualifier_t;
52 size_t len; /* length of name below */
53 const char *name; /* string / name of token */
54 struct ccl_token *next;
55 struct ccl_token *prev;
56 const char *ws_prefix_buf; /* leading white space buf */
57 size_t ws_prefix_len; /* leading white space len */
60 /** CCL parser structure */
62 /** current lookahead token */
63 struct ccl_token *look_token;
65 /** holds error code if error occur */
67 /** start of CCL string buffer */
68 const char *start_pos;
69 /** if error occurs, this holds position (starting from 0). */
70 const char *error_pos;
75 /** names of and operator */
76 const char **ccl_token_and;
77 /** names of or operator */
78 const char **ccl_token_or;
79 /** names of not operator */
80 const char **ccl_token_not;
81 /** names of set operator */
82 const char **ccl_token_set;
83 /** 1=CCL parser is case sensitive, 0=case insensitive */
84 int ccl_case_sensitive;
88 * Splits CCL command string into individual tokens using
92 struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command);
98 void ccl_token_del (struct ccl_token *list);
101 * Add single token after a given onde.
104 struct ccl_token *ccl_token_add (struct ccl_token *at);
108 struct ccl_rpn_node *ccl_parser_find_token(CCL_parser cclp,
109 struct ccl_token *list);
113 ccl_qualifier_t ccl_qual_search(CCL_parser cclp, const char *name,
114 size_t name_len, int seq);
117 struct ccl_rpn_attr *ccl_qual_get_attr(ccl_qualifier_t q);
120 const char *ccl_qual_get_name(ccl_qualifier_t q);
125 * indent-tabs-mode: nil
127 * vim: shiftwidth=4 tabstop=8 expandtab