2 * Summary: regular expressions handling
3 * Description: basic API for libxml regular expressions handling used
4 * for XML Schemas and validation.
6 * Copy: See Copyright for the status of this software.
8 * Author: Daniel Veillard
11 #ifndef __XML_REGEXP_H__
12 #define __XML_REGEXP_H__
14 #include <libxml/xmlversion.h>
16 #ifdef LIBXML_REGEXP_ENABLED
25 * A libxml regular expression, they can actually be far more complex
26 * thank the POSIX regex expressions.
28 typedef struct _xmlRegexp xmlRegexp;
29 typedef xmlRegexp *xmlRegexpPtr;
34 * A libxml progressive regular expression evaluation context
36 typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
37 typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
42 #include <libxml/tree.h>
43 #include <libxml/dict.h>
51 XMLPUBFUN xmlRegexpPtr XMLCALL
52 xmlRegexpCompile (const xmlChar *regexp);
53 XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp);
55 xmlRegexpExec (xmlRegexpPtr comp,
56 const xmlChar *value);
57 XMLPUBFUN void XMLCALL
58 xmlRegexpPrint (FILE *output,
61 xmlRegexpIsDeterminist(xmlRegexpPtr comp);
64 * xmlRegExecCallbacks:
65 * @exec: the regular expression context
66 * @token: the current token string
67 * @transdata: transition data
68 * @inputdata: input data
70 * Callback function when doing a transition in the automata
72 typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
80 XMLPUBFUN xmlRegExecCtxtPtr XMLCALL
81 xmlRegNewExecCtxt (xmlRegexpPtr comp,
82 xmlRegExecCallbacks callback,
84 XMLPUBFUN void XMLCALL
85 xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec);
87 xmlRegExecPushString(xmlRegExecCtxtPtr exec,
91 xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
93 const xmlChar *value2,
97 xmlRegExecNextValues(xmlRegExecCtxtPtr exec,
102 XMLPUBFUN int XMLCALL
103 xmlRegExecErrInfo (xmlRegExecCtxtPtr exec,
104 const xmlChar **string,
109 #ifdef LIBXML_EXPR_ENABLED
111 * Formal regular expression handling
112 * Its goal is to do some formal work on content models
115 /* expressions are used within a context */
116 typedef struct _xmlExpCtxt xmlExpCtxt;
117 typedef xmlExpCtxt *xmlExpCtxtPtr;
119 XMLPUBFUN void XMLCALL
120 xmlExpFreeCtxt (xmlExpCtxtPtr ctxt);
121 XMLPUBFUN xmlExpCtxtPtr XMLCALL
122 xmlExpNewCtxt (int maxNodes,
125 XMLPUBFUN int XMLCALL
126 xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
127 XMLPUBFUN int XMLCALL
128 xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
130 /* Expressions are trees but the tree is opaque */
131 typedef struct _xmlExpNode xmlExpNode;
132 typedef xmlExpNode *xmlExpNodePtr;
144 * 2 core expressions shared by all for the empty language set
145 * and for the set with just the empty token
147 XMLPUBVAR xmlExpNodePtr forbiddenExp;
148 XMLPUBVAR xmlExpNodePtr emptyExp;
151 * Expressions are reference counted internally
153 XMLPUBFUN void XMLCALL
154 xmlExpFree (xmlExpCtxtPtr ctxt,
156 XMLPUBFUN void XMLCALL
157 xmlExpRef (xmlExpNodePtr expr);
160 * constructors can be either manual or from a string
162 XMLPUBFUN xmlExpNodePtr XMLCALL
163 xmlExpParse (xmlExpCtxtPtr ctxt,
165 XMLPUBFUN xmlExpNodePtr XMLCALL
166 xmlExpNewAtom (xmlExpCtxtPtr ctxt,
169 XMLPUBFUN xmlExpNodePtr XMLCALL
170 xmlExpNewOr (xmlExpCtxtPtr ctxt,
172 xmlExpNodePtr right);
173 XMLPUBFUN xmlExpNodePtr XMLCALL
174 xmlExpNewSeq (xmlExpCtxtPtr ctxt,
176 xmlExpNodePtr right);
177 XMLPUBFUN xmlExpNodePtr XMLCALL
178 xmlExpNewRange (xmlExpCtxtPtr ctxt,
179 xmlExpNodePtr subset,
183 * The really interesting APIs
185 XMLPUBFUN int XMLCALL
186 xmlExpIsNillable(xmlExpNodePtr expr);
187 XMLPUBFUN int XMLCALL
188 xmlExpMaxToken (xmlExpNodePtr expr);
189 XMLPUBFUN int XMLCALL
190 xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
192 const xmlChar**langList,
194 XMLPUBFUN int XMLCALL
195 xmlExpGetStart (xmlExpCtxtPtr ctxt,
197 const xmlChar**tokList,
199 XMLPUBFUN xmlExpNodePtr XMLCALL
200 xmlExpStringDerive(xmlExpCtxtPtr ctxt,
204 XMLPUBFUN xmlExpNodePtr XMLCALL
205 xmlExpExpDerive (xmlExpCtxtPtr ctxt,
208 XMLPUBFUN int XMLCALL
209 xmlExpSubsume (xmlExpCtxtPtr ctxt,
212 XMLPUBFUN void XMLCALL
213 xmlExpDump (xmlBufferPtr buf,
215 #endif /* LIBXML_EXPR_ENABLED */
220 #endif /* LIBXML_REGEXP_ENABLED */
222 #endif /*__XML_REGEXP_H__ */