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 "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 "tree.h" 43 #include "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 * Callback function when doing a transition in the automata 65 */ 66 typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, 67 const xmlChar *token, 68 void *transdata, 69 void *inputdata); 70 71 /* 72 * The progressive API 73 */ 74 XMLPUBFUN xmlRegExecCtxtPtr XMLCALL 75 xmlRegNewExecCtxt (xmlRegexpPtr comp, 76 xmlRegExecCallbacks callback, 77 void *data); 78 XMLPUBFUN void XMLCALL 79 xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); 80 XMLPUBFUN int XMLCALL 81 xmlRegExecPushString(xmlRegExecCtxtPtr exec, 82 const xmlChar *value, 83 void *data); 84 XMLPUBFUN int XMLCALL 85 xmlRegExecPushString2(xmlRegExecCtxtPtr exec, 86 const xmlChar *value, 87 const xmlChar *value2, 88 void *data); 89 90 XMLPUBFUN int XMLCALL 91 xmlRegExecNextValues(xmlRegExecCtxtPtr exec, 92 int *nbval, 93 int *nbneg, 94 xmlChar **values, 95 int *terminal); 96 XMLPUBFUN int XMLCALL 97 xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, 98 const xmlChar **string, 99 int *nbval, 100 int *nbneg, 101 xmlChar **values, 102 int *terminal); 103 #ifdef LIBXML_EXPR_ENABLED 104 /* 105 * Formal regular expression handling 106 * Its goal is to do some formal work on content models 107 */ 108 109 /* expressions are used within a context */ 110 typedef struct _xmlExpCtxt xmlExpCtxt; 111 typedef xmlExpCtxt *xmlExpCtxtPtr; 112 113 XMLPUBFUN void XMLCALL 114 xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); 115 XMLPUBFUN xmlExpCtxtPtr XMLCALL 116 xmlExpNewCtxt (int maxNodes, 117 xmlDictPtr dict); 118 119 XMLPUBFUN int XMLCALL 120 xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); 121 XMLPUBFUN int XMLCALL 122 xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); 123 124 /* Expressions are trees but the tree is opaque */ 125 typedef struct _xmlExpNode xmlExpNode; 126 typedef xmlExpNode *xmlExpNodePtr; 127 128 typedef enum { 129 XML_EXP_EMPTY = 0, 130 XML_EXP_FORBID = 1, 131 XML_EXP_ATOM = 2, 132 XML_EXP_SEQ = 3, 133 XML_EXP_OR = 4, 134 XML_EXP_COUNT = 5 135 } xmlExpNodeType; 136 137 /* 138 * 2 core expressions shared by all for the empty language set 139 * and for the set with just the empty token 140 */ 141 XMLPUBVAR xmlExpNodePtr forbiddenExp; 142 XMLPUBVAR xmlExpNodePtr emptyExp; 143 144 /* 145 * Expressions are reference counted internally 146 */ 147 XMLPUBFUN void XMLCALL 148 xmlExpFree (xmlExpCtxtPtr ctxt, 149 xmlExpNodePtr expr); 150 XMLPUBFUN void XMLCALL 151 xmlExpRef (xmlExpNodePtr expr); 152 153 /* 154 * constructors can be either manual or from a string 155 */ 156 XMLPUBFUN xmlExpNodePtr XMLCALL 157 xmlExpParse (xmlExpCtxtPtr ctxt, 158 const char *expr); 159 XMLPUBFUN xmlExpNodePtr XMLCALL 160 xmlExpNewAtom (xmlExpCtxtPtr ctxt, 161 const xmlChar *name, 162 int len); 163 XMLPUBFUN xmlExpNodePtr XMLCALL 164 xmlExpNewOr (xmlExpCtxtPtr ctxt, 165 xmlExpNodePtr left, 166 xmlExpNodePtr right); 167 XMLPUBFUN xmlExpNodePtr XMLCALL 168 xmlExpNewSeq (xmlExpCtxtPtr ctxt, 169 xmlExpNodePtr left, 170 xmlExpNodePtr right); 171 XMLPUBFUN xmlExpNodePtr XMLCALL 172 xmlExpNewRange (xmlExpCtxtPtr ctxt, 173 xmlExpNodePtr subset, 174 int min, 175 int max); 176 /* 177 * The really interesting APIs 178 */ 179 XMLPUBFUN int XMLCALL 180 xmlExpIsNillable(xmlExpNodePtr expr); 181 XMLPUBFUN int XMLCALL 182 xmlExpMaxToken (xmlExpNodePtr expr); 183 XMLPUBFUN int XMLCALL 184 xmlExpGetLanguage(xmlExpCtxtPtr ctxt, 185 xmlExpNodePtr expr, 186 const xmlChar**langList, 187 int len); 188 XMLPUBFUN int XMLCALL 189 xmlExpGetStart (xmlExpCtxtPtr ctxt, 190 xmlExpNodePtr expr, 191 const xmlChar**tokList, 192 int len); 193 XMLPUBFUN xmlExpNodePtr XMLCALL 194 xmlExpStringDerive(xmlExpCtxtPtr ctxt, 195 xmlExpNodePtr expr, 196 const xmlChar *str, 197 int len); 198 XMLPUBFUN xmlExpNodePtr XMLCALL 199 xmlExpExpDerive (xmlExpCtxtPtr ctxt, 200 xmlExpNodePtr expr, 201 xmlExpNodePtr sub); 202 XMLPUBFUN int XMLCALL 203 xmlExpSubsume (xmlExpCtxtPtr ctxt, 204 xmlExpNodePtr expr, 205 xmlExpNodePtr sub); 206 XMLPUBFUN void XMLCALL 207 xmlExpDump (xmlBufferPtr buf, 208 xmlExpNodePtr expr); 209 #endif /* LIBXML_EXPR_ENABLED */ 210 #ifdef __cplusplus 211 } 212 #endif 213 214 #endif /* LIBXML_REGEXP_ENABLED */ 215 216 #endif /*__XML_REGEXP_H__ */ 217