1 | /* |
2 | * Summary: regular expressions handling |
3 | * Description: basic API for libxml regular expressions handling used |
4 | * for XML Schemas and validation. |
5 | * |
6 | * Copy: See Copyright for the status of this software. |
7 | * |
8 | * Author: Daniel Veillard |
9 | */ |
10 | |
11 | #ifndef __XML_REGEXP_H__ |
12 | #define __XML_REGEXP_H__ |
13 | |
14 | #include <libxml/xmlversion.h> |
15 | |
16 | #ifdef LIBXML_REGEXP_ENABLED |
17 | |
18 | #ifdef __cplusplus |
19 | extern "C" { |
20 | #endif |
21 | |
22 | /** |
23 | * xmlRegexpPtr: |
24 | * |
25 | * A libxml regular expression, they can actually be far more complex |
26 | * thank the POSIX regex expressions. |
27 | */ |
28 | typedef struct _xmlRegexp xmlRegexp; |
29 | typedef xmlRegexp *xmlRegexpPtr; |
30 | |
31 | /** |
32 | * xmlRegExecCtxtPtr: |
33 | * |
34 | * A libxml progressive regular expression evaluation context |
35 | */ |
36 | typedef struct _xmlRegExecCtxt xmlRegExecCtxt; |
37 | typedef xmlRegExecCtxt *xmlRegExecCtxtPtr; |
38 | |
39 | #ifdef __cplusplus |
40 | } |
41 | #endif |
42 | #include <libxml/tree.h> |
43 | #include <libxml/dict.h> |
44 | #ifdef __cplusplus |
45 | extern "C" { |
46 | #endif |
47 | |
48 | /* |
49 | * The POSIX like API |
50 | */ |
51 | XMLPUBFUN xmlRegexpPtr XMLCALL |
52 | xmlRegexpCompile (const xmlChar *regexp); |
53 | XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp); |
54 | XMLPUBFUN int XMLCALL |
55 | xmlRegexpExec (xmlRegexpPtr comp, |
56 | const xmlChar *value); |
57 | XMLPUBFUN void XMLCALL |
58 | xmlRegexpPrint (FILE *output, |
59 | xmlRegexpPtr regexp); |
60 | XMLPUBFUN int XMLCALL |
61 | xmlRegexpIsDeterminist(xmlRegexpPtr comp); |
62 | |
63 | /** |
64 | * xmlRegExecCallbacks: |
65 | * @exec: the regular expression context |
66 | * @token: the current token string |
67 | * @transdata: transition data |
68 | * @inputdata: input data |
69 | * |
70 | * Callback function when doing a transition in the automata |
71 | */ |
72 | typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, |
73 | const xmlChar *token, |
74 | void *transdata, |
75 | void *inputdata); |
76 | |
77 | /* |
78 | * The progressive API |
79 | */ |
80 | XMLPUBFUN xmlRegExecCtxtPtr XMLCALL |
81 | xmlRegNewExecCtxt (xmlRegexpPtr comp, |
82 | xmlRegExecCallbacks callback, |
83 | void *data); |
84 | XMLPUBFUN void XMLCALL |
85 | xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); |
86 | XMLPUBFUN int XMLCALL |
87 | xmlRegExecPushString(xmlRegExecCtxtPtr exec, |
88 | const xmlChar *value, |
89 | void *data); |
90 | XMLPUBFUN int XMLCALL |
91 | xmlRegExecPushString2(xmlRegExecCtxtPtr exec, |
92 | const xmlChar *value, |
93 | const xmlChar *value2, |
94 | void *data); |
95 | |
96 | XMLPUBFUN int XMLCALL |
97 | xmlRegExecNextValues(xmlRegExecCtxtPtr exec, |
98 | int *nbval, |
99 | int *nbneg, |
100 | xmlChar **values, |
101 | int *terminal); |
102 | XMLPUBFUN int XMLCALL |
103 | xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, |
104 | const xmlChar **string, |
105 | int *nbval, |
106 | int *nbneg, |
107 | xmlChar **values, |
108 | int *terminal); |
109 | #ifdef LIBXML_EXPR_ENABLED |
110 | /* |
111 | * Formal regular expression handling |
112 | * Its goal is to do some formal work on content models |
113 | */ |
114 | |
115 | /* expressions are used within a context */ |
116 | typedef struct _xmlExpCtxt xmlExpCtxt; |
117 | typedef xmlExpCtxt *xmlExpCtxtPtr; |
118 | |
119 | XMLPUBFUN void XMLCALL |
120 | xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); |
121 | XMLPUBFUN xmlExpCtxtPtr XMLCALL |
122 | xmlExpNewCtxt (int maxNodes, |
123 | xmlDictPtr dict); |
124 | |
125 | XMLPUBFUN int XMLCALL |
126 | xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); |
127 | XMLPUBFUN int XMLCALL |
128 | xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); |
129 | |
130 | /* Expressions are trees but the tree is opaque */ |
131 | typedef struct _xmlExpNode xmlExpNode; |
132 | typedef xmlExpNode *xmlExpNodePtr; |
133 | |
134 | typedef enum { |
135 | XML_EXP_EMPTY = 0, |
136 | XML_EXP_FORBID = 1, |
137 | XML_EXP_ATOM = 2, |
138 | XML_EXP_SEQ = 3, |
139 | XML_EXP_OR = 4, |
140 | XML_EXP_COUNT = 5 |
141 | } xmlExpNodeType; |
142 | |
143 | /* |
144 | * 2 core expressions shared by all for the empty language set |
145 | * and for the set with just the empty token |
146 | */ |
147 | XMLPUBVAR xmlExpNodePtr forbiddenExp; |
148 | XMLPUBVAR xmlExpNodePtr emptyExp; |
149 | |
150 | /* |
151 | * Expressions are reference counted internally |
152 | */ |
153 | XMLPUBFUN void XMLCALL |
154 | xmlExpFree (xmlExpCtxtPtr ctxt, |
155 | xmlExpNodePtr expr); |
156 | XMLPUBFUN void XMLCALL |
157 | xmlExpRef (xmlExpNodePtr expr); |
158 | |
159 | /* |
160 | * constructors can be either manual or from a string |
161 | */ |
162 | XMLPUBFUN xmlExpNodePtr XMLCALL |
163 | xmlExpParse (xmlExpCtxtPtr ctxt, |
164 | const char *expr); |
165 | XMLPUBFUN xmlExpNodePtr XMLCALL |
166 | xmlExpNewAtom (xmlExpCtxtPtr ctxt, |
167 | const xmlChar *name, |
168 | int len); |
169 | XMLPUBFUN xmlExpNodePtr XMLCALL |
170 | xmlExpNewOr (xmlExpCtxtPtr ctxt, |
171 | xmlExpNodePtr left, |
172 | xmlExpNodePtr right); |
173 | XMLPUBFUN xmlExpNodePtr XMLCALL |
174 | xmlExpNewSeq (xmlExpCtxtPtr ctxt, |
175 | xmlExpNodePtr left, |
176 | xmlExpNodePtr right); |
177 | XMLPUBFUN xmlExpNodePtr XMLCALL |
178 | xmlExpNewRange (xmlExpCtxtPtr ctxt, |
179 | xmlExpNodePtr subset, |
180 | int min, |
181 | int max); |
182 | /* |
183 | * The really interesting APIs |
184 | */ |
185 | XMLPUBFUN int XMLCALL |
186 | xmlExpIsNillable(xmlExpNodePtr expr); |
187 | XMLPUBFUN int XMLCALL |
188 | xmlExpMaxToken (xmlExpNodePtr expr); |
189 | XMLPUBFUN int XMLCALL |
190 | xmlExpGetLanguage(xmlExpCtxtPtr ctxt, |
191 | xmlExpNodePtr expr, |
192 | const xmlChar**langList, |
193 | int len); |
194 | XMLPUBFUN int XMLCALL |
195 | xmlExpGetStart (xmlExpCtxtPtr ctxt, |
196 | xmlExpNodePtr expr, |
197 | const xmlChar**tokList, |
198 | int len); |
199 | XMLPUBFUN xmlExpNodePtr XMLCALL |
200 | xmlExpStringDerive(xmlExpCtxtPtr ctxt, |
201 | xmlExpNodePtr expr, |
202 | const xmlChar *str, |
203 | int len); |
204 | XMLPUBFUN xmlExpNodePtr XMLCALL |
205 | xmlExpExpDerive (xmlExpCtxtPtr ctxt, |
206 | xmlExpNodePtr expr, |
207 | xmlExpNodePtr sub); |
208 | XMLPUBFUN int XMLCALL |
209 | xmlExpSubsume (xmlExpCtxtPtr ctxt, |
210 | xmlExpNodePtr expr, |
211 | xmlExpNodePtr sub); |
212 | XMLPUBFUN void XMLCALL |
213 | xmlExpDump (xmlBufferPtr buf, |
214 | xmlExpNodePtr expr); |
215 | #endif /* LIBXML_EXPR_ENABLED */ |
216 | #ifdef __cplusplus |
217 | } |
218 | #endif |
219 | |
220 | #endif /* LIBXML_REGEXP_ENABLED */ |
221 | |
222 | #endif /*__XML_REGEXP_H__ */ |
223 | |