Eneboo - Documentación para desarrolladores
|
00001 /* 00002 * Summary: regular expressions handling 00003 * Description: basic API for libxml regular expressions handling used 00004 * for XML Schemas and validation. 00005 * 00006 * Copy: See Copyright for the status of this software. 00007 * 00008 * Author: Daniel Veillard 00009 */ 00010 00011 #ifndef __XML_REGEXP_H__ 00012 #define __XML_REGEXP_H__ 00013 00014 #include <libxml/xmlversion.h> 00015 00016 #ifdef LIBXML_REGEXP_ENABLED 00017 00018 #ifdef __cplusplus 00019 extern "C" { 00020 #endif 00021 00028 typedef struct _xmlRegexp xmlRegexp; 00029 typedef xmlRegexp *xmlRegexpPtr; 00030 00036 typedef struct _xmlRegExecCtxt xmlRegExecCtxt; 00037 typedef xmlRegExecCtxt *xmlRegExecCtxtPtr; 00038 00039 #ifdef __cplusplus 00040 } 00041 #endif 00042 #include <libxml/tree.h> 00043 #include <libxml/dict.h> 00044 #ifdef __cplusplus 00045 extern "C" { 00046 #endif 00047 00048 /* 00049 * The POSIX like API 00050 */ 00051 XMLPUBFUN xmlRegexpPtr XMLCALL 00052 xmlRegexpCompile (const xmlChar *regexp); 00053 XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp); 00054 XMLPUBFUN int XMLCALL 00055 xmlRegexpExec (xmlRegexpPtr comp, 00056 const xmlChar *value); 00057 XMLPUBFUN void XMLCALL 00058 xmlRegexpPrint (FILE *output, 00059 xmlRegexpPtr regexp); 00060 XMLPUBFUN int XMLCALL 00061 xmlRegexpIsDeterminist(xmlRegexpPtr comp); 00062 00072 typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, 00073 const xmlChar *token, 00074 void *transdata, 00075 void *inputdata); 00076 00077 /* 00078 * The progressive API 00079 */ 00080 XMLPUBFUN xmlRegExecCtxtPtr XMLCALL 00081 xmlRegNewExecCtxt (xmlRegexpPtr comp, 00082 xmlRegExecCallbacks callback, 00083 void *data); 00084 XMLPUBFUN void XMLCALL 00085 xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); 00086 XMLPUBFUN int XMLCALL 00087 xmlRegExecPushString(xmlRegExecCtxtPtr exec, 00088 const xmlChar *value, 00089 void *data); 00090 XMLPUBFUN int XMLCALL 00091 xmlRegExecPushString2(xmlRegExecCtxtPtr exec, 00092 const xmlChar *value, 00093 const xmlChar *value2, 00094 void *data); 00095 00096 XMLPUBFUN int XMLCALL 00097 xmlRegExecNextValues(xmlRegExecCtxtPtr exec, 00098 int *nbval, 00099 int *nbneg, 00100 xmlChar **values, 00101 int *terminal); 00102 XMLPUBFUN int XMLCALL 00103 xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, 00104 const xmlChar **string, 00105 int *nbval, 00106 int *nbneg, 00107 xmlChar **values, 00108 int *terminal); 00109 #ifdef LIBXML_EXPR_ENABLED 00110 /* 00111 * Formal regular expression handling 00112 * Its goal is to do some formal work on content models 00113 */ 00114 00115 /* expressions are used within a context */ 00116 typedef struct _xmlExpCtxt xmlExpCtxt; 00117 typedef xmlExpCtxt *xmlExpCtxtPtr; 00118 00119 XMLPUBFUN void XMLCALL 00120 xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); 00121 XMLPUBFUN xmlExpCtxtPtr XMLCALL 00122 xmlExpNewCtxt (int maxNodes, 00123 xmlDictPtr dict); 00124 00125 XMLPUBFUN int XMLCALL 00126 xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); 00127 XMLPUBFUN int XMLCALL 00128 xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); 00129 00130 /* Expressions are trees but the tree is opaque */ 00131 typedef struct _xmlExpNode xmlExpNode; 00132 typedef xmlExpNode *xmlExpNodePtr; 00133 00134 typedef enum { 00135 XML_EXP_EMPTY = 0, 00136 XML_EXP_FORBID = 1, 00137 XML_EXP_ATOM = 2, 00138 XML_EXP_SEQ = 3, 00139 XML_EXP_OR = 4, 00140 XML_EXP_COUNT = 5 00141 } xmlExpNodeType; 00142 00143 /* 00144 * 2 core expressions shared by all for the empty language set 00145 * and for the set with just the empty token 00146 */ 00147 XMLPUBVAR xmlExpNodePtr forbiddenExp; 00148 XMLPUBVAR xmlExpNodePtr emptyExp; 00149 00150 /* 00151 * Expressions are reference counted internally 00152 */ 00153 XMLPUBFUN void XMLCALL 00154 xmlExpFree (xmlExpCtxtPtr ctxt, 00155 xmlExpNodePtr expr); 00156 XMLPUBFUN void XMLCALL 00157 xmlExpRef (xmlExpNodePtr expr); 00158 00159 /* 00160 * constructors can be either manual or from a string 00161 */ 00162 XMLPUBFUN xmlExpNodePtr XMLCALL 00163 xmlExpParse (xmlExpCtxtPtr ctxt, 00164 const char *expr); 00165 XMLPUBFUN xmlExpNodePtr XMLCALL 00166 xmlExpNewAtom (xmlExpCtxtPtr ctxt, 00167 const xmlChar *name, 00168 int len); 00169 XMLPUBFUN xmlExpNodePtr XMLCALL 00170 xmlExpNewOr (xmlExpCtxtPtr ctxt, 00171 xmlExpNodePtr left, 00172 xmlExpNodePtr right); 00173 XMLPUBFUN xmlExpNodePtr XMLCALL 00174 xmlExpNewSeq (xmlExpCtxtPtr ctxt, 00175 xmlExpNodePtr left, 00176 xmlExpNodePtr right); 00177 XMLPUBFUN xmlExpNodePtr XMLCALL 00178 xmlExpNewRange (xmlExpCtxtPtr ctxt, 00179 xmlExpNodePtr subset, 00180 int min, 00181 int max); 00182 /* 00183 * The really interesting APIs 00184 */ 00185 XMLPUBFUN int XMLCALL 00186 xmlExpIsNillable(xmlExpNodePtr expr); 00187 XMLPUBFUN int XMLCALL 00188 xmlExpMaxToken (xmlExpNodePtr expr); 00189 XMLPUBFUN int XMLCALL 00190 xmlExpGetLanguage(xmlExpCtxtPtr ctxt, 00191 xmlExpNodePtr expr, 00192 const xmlChar**langList, 00193 int len); 00194 XMLPUBFUN int XMLCALL 00195 xmlExpGetStart (xmlExpCtxtPtr ctxt, 00196 xmlExpNodePtr expr, 00197 const xmlChar**tokList, 00198 int len); 00199 XMLPUBFUN xmlExpNodePtr XMLCALL 00200 xmlExpStringDerive(xmlExpCtxtPtr ctxt, 00201 xmlExpNodePtr expr, 00202 const xmlChar *str, 00203 int len); 00204 XMLPUBFUN xmlExpNodePtr XMLCALL 00205 xmlExpExpDerive (xmlExpCtxtPtr ctxt, 00206 xmlExpNodePtr expr, 00207 xmlExpNodePtr sub); 00208 XMLPUBFUN int XMLCALL 00209 xmlExpSubsume (xmlExpCtxtPtr ctxt, 00210 xmlExpNodePtr expr, 00211 xmlExpNodePtr sub); 00212 XMLPUBFUN void XMLCALL 00213 xmlExpDump (xmlBufferPtr buf, 00214 xmlExpNodePtr expr); 00215 #endif /* LIBXML_EXPR_ENABLED */ 00216 #ifdef __cplusplus 00217 } 00218 #endif 00219 00220 #endif /* LIBXML_REGEXP_ENABLED */ 00221 00222 #endif /*__XML_REGEXP_H__ */