| 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__ */ | 
| 223 |  |