1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2010 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 */
58 int left_trunc; /* left truncated */
59 int right_trunc; /* right truncated */
62 /** CCL parser structure */
64 /** current lookahead token */
65 struct ccl_token *look_token;
67 /** holds error code if error occur */
69 /** start of CCL string buffer */
70 const char *start_pos;
71 /** if error occurs, this holds position (starting from 0). */
72 const char *error_pos;
77 /** names of and operator */
78 const char **ccl_token_and;
79 /** names of or operator */
80 const char **ccl_token_or;
81 /** names of not operator */
82 const char **ccl_token_not;
83 /** names of set operator */
84 const char **ccl_token_set;
85 /** 1=CCL parser is case sensitive, 0=case insensitive */
86 int ccl_case_sensitive;
90 * Splits CCL command string into individual tokens using
94 struct ccl_token *ccl_parser_tokenize (CCL_parser cclp, const char *command);
100 void ccl_token_del (struct ccl_token *list);
103 * Add single token after a given onde.
106 struct ccl_token *ccl_token_add (struct ccl_token *at);
110 struct ccl_rpn_node *ccl_parser_find_token(CCL_parser cclp,
111 struct ccl_token *list);
115 ccl_qualifier_t ccl_qual_search(CCL_parser cclp, const char *name,
116 size_t name_len, int seq);
119 struct ccl_rpn_attr *ccl_qual_get_attr(ccl_qualifier_t q);
122 const char *ccl_qual_get_name(ccl_qualifier_t q);
127 * c-file-style: "Stroustrup"
128 * indent-tabs-mode: nil
130 * vim: shiftwidth=4 tabstop=8 expandtab