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