- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / libxml / src / include / libxml / xmlregexp.h
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__ */