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__ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>