/ libxml2 / include / libxml / xmlregexp.h
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__ */