|
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 * Callback function when doing a transition in the automata |
|
65 */ |
|
66 typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, |
|
67 const xmlChar *token, |
|
68 void *transdata, |
|
69 void *inputdata); |
|
70 |
|
71 /* |
|
72 * The progressive API |
|
73 */ |
|
74 XMLPUBFUN xmlRegExecCtxtPtr XMLCALL |
|
75 xmlRegNewExecCtxt (xmlRegexpPtr comp, |
|
76 xmlRegExecCallbacks callback, |
|
77 void *data); |
|
78 XMLPUBFUN void XMLCALL |
|
79 xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); |
|
80 XMLPUBFUN int XMLCALL |
|
81 xmlRegExecPushString(xmlRegExecCtxtPtr exec, |
|
82 const xmlChar *value, |
|
83 void *data); |
|
84 XMLPUBFUN int XMLCALL |
|
85 xmlRegExecPushString2(xmlRegExecCtxtPtr exec, |
|
86 const xmlChar *value, |
|
87 const xmlChar *value2, |
|
88 void *data); |
|
89 |
|
90 XMLPUBFUN int XMLCALL |
|
91 xmlRegExecNextValues(xmlRegExecCtxtPtr exec, |
|
92 int *nbval, |
|
93 int *nbneg, |
|
94 xmlChar **values, |
|
95 int *terminal); |
|
96 XMLPUBFUN int XMLCALL |
|
97 xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, |
|
98 const xmlChar **string, |
|
99 int *nbval, |
|
100 int *nbneg, |
|
101 xmlChar **values, |
|
102 int *terminal); |
|
103 #ifdef LIBXML_EXPR_ENABLED |
|
104 /* |
|
105 * Formal regular expression handling |
|
106 * Its goal is to do some formal work on content models |
|
107 */ |
|
108 |
|
109 /* expressions are used within a context */ |
|
110 typedef struct _xmlExpCtxt xmlExpCtxt; |
|
111 typedef xmlExpCtxt *xmlExpCtxtPtr; |
|
112 |
|
113 XMLPUBFUN void XMLCALL |
|
114 xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); |
|
115 XMLPUBFUN xmlExpCtxtPtr XMLCALL |
|
116 xmlExpNewCtxt (int maxNodes, |
|
117 xmlDictPtr dict); |
|
118 |
|
119 XMLPUBFUN int XMLCALL |
|
120 xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); |
|
121 XMLPUBFUN int XMLCALL |
|
122 xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); |
|
123 |
|
124 /* Expressions are trees but the tree is opaque */ |
|
125 typedef struct _xmlExpNode xmlExpNode; |
|
126 typedef xmlExpNode *xmlExpNodePtr; |
|
127 |
|
128 typedef enum { |
|
129 XML_EXP_EMPTY = 0, |
|
130 XML_EXP_FORBID = 1, |
|
131 XML_EXP_ATOM = 2, |
|
132 XML_EXP_SEQ = 3, |
|
133 XML_EXP_OR = 4, |
|
134 XML_EXP_COUNT = 5 |
|
135 } xmlExpNodeType; |
|
136 |
|
137 /* |
|
138 * 2 core expressions shared by all for the empty language set |
|
139 * and for the set with just the empty token |
|
140 */ |
|
141 XMLPUBVAR xmlExpNodePtr forbiddenExp; |
|
142 XMLPUBVAR xmlExpNodePtr emptyExp; |
|
143 |
|
144 /* |
|
145 * Expressions are reference counted internally |
|
146 */ |
|
147 XMLPUBFUN void XMLCALL |
|
148 xmlExpFree (xmlExpCtxtPtr ctxt, |
|
149 xmlExpNodePtr expr); |
|
150 XMLPUBFUN void XMLCALL |
|
151 xmlExpRef (xmlExpNodePtr expr); |
|
152 |
|
153 /* |
|
154 * constructors can be either manual or from a string |
|
155 */ |
|
156 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
157 xmlExpParse (xmlExpCtxtPtr ctxt, |
|
158 const char *expr); |
|
159 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
160 xmlExpNewAtom (xmlExpCtxtPtr ctxt, |
|
161 const xmlChar *name, |
|
162 int len); |
|
163 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
164 xmlExpNewOr (xmlExpCtxtPtr ctxt, |
|
165 xmlExpNodePtr left, |
|
166 xmlExpNodePtr right); |
|
167 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
168 xmlExpNewSeq (xmlExpCtxtPtr ctxt, |
|
169 xmlExpNodePtr left, |
|
170 xmlExpNodePtr right); |
|
171 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
172 xmlExpNewRange (xmlExpCtxtPtr ctxt, |
|
173 xmlExpNodePtr subset, |
|
174 int min, |
|
175 int max); |
|
176 /* |
|
177 * The really interesting APIs |
|
178 */ |
|
179 XMLPUBFUN int XMLCALL |
|
180 xmlExpIsNillable(xmlExpNodePtr expr); |
|
181 XMLPUBFUN int XMLCALL |
|
182 xmlExpMaxToken (xmlExpNodePtr expr); |
|
183 XMLPUBFUN int XMLCALL |
|
184 xmlExpGetLanguage(xmlExpCtxtPtr ctxt, |
|
185 xmlExpNodePtr expr, |
|
186 const xmlChar**langList, |
|
187 int len); |
|
188 XMLPUBFUN int XMLCALL |
|
189 xmlExpGetStart (xmlExpCtxtPtr ctxt, |
|
190 xmlExpNodePtr expr, |
|
191 const xmlChar**tokList, |
|
192 int len); |
|
193 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
194 xmlExpStringDerive(xmlExpCtxtPtr ctxt, |
|
195 xmlExpNodePtr expr, |
|
196 const xmlChar *str, |
|
197 int len); |
|
198 XMLPUBFUN xmlExpNodePtr XMLCALL |
|
199 xmlExpExpDerive (xmlExpCtxtPtr ctxt, |
|
200 xmlExpNodePtr expr, |
|
201 xmlExpNodePtr sub); |
|
202 XMLPUBFUN int XMLCALL |
|
203 xmlExpSubsume (xmlExpCtxtPtr ctxt, |
|
204 xmlExpNodePtr expr, |
|
205 xmlExpNodePtr sub); |
|
206 XMLPUBFUN void XMLCALL |
|
207 xmlExpDump (xmlBufferPtr buf, |
|
208 xmlExpNodePtr expr); |
|
209 #endif /* LIBXML_EXPR_ENABLED */ |
|
210 #ifdef __cplusplus |
|
211 } |
|
212 #endif |
|
213 |
|
214 #endif /* LIBXML_REGEXP_ENABLED */ |
|
215 |
|
216 #endif /*__XML_REGEXP_H__ */ |