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