Spaces:
Sleeping
Sleeping
/* | |
* Summary: regular expressions handling | |
* Description: basic API for libxml regular expressions handling used | |
* for XML Schemas and validation. | |
* | |
* Copy: See Copyright for the status of this software. | |
* | |
* Author: Daniel Veillard | |
*/ | |
extern "C" { | |
/** | |
* xmlRegexpPtr: | |
* | |
* A libxml regular expression, they can actually be far more complex | |
* thank the POSIX regex expressions. | |
*/ | |
typedef struct _xmlRegexp xmlRegexp; | |
typedef xmlRegexp *xmlRegexpPtr; | |
/** | |
* xmlRegExecCtxtPtr: | |
* | |
* A libxml progressive regular expression evaluation context | |
*/ | |
typedef struct _xmlRegExecCtxt xmlRegExecCtxt; | |
typedef xmlRegExecCtxt *xmlRegExecCtxtPtr; | |
} | |
extern "C" { | |
/* | |
* The POSIX like API | |
*/ | |
XMLPUBFUN xmlRegexpPtr XMLCALL | |
xmlRegexpCompile (const xmlChar *regexp); | |
XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp); | |
XMLPUBFUN int XMLCALL | |
xmlRegexpExec (xmlRegexpPtr comp, | |
const xmlChar *value); | |
XMLPUBFUN void XMLCALL | |
xmlRegexpPrint (FILE *output, | |
xmlRegexpPtr regexp); | |
XMLPUBFUN int XMLCALL | |
xmlRegexpIsDeterminist(xmlRegexpPtr comp); | |
/** | |
* xmlRegExecCallbacks: | |
* @exec: the regular expression context | |
* @token: the current token string | |
* @transdata: transition data | |
* @inputdata: input data | |
* | |
* Callback function when doing a transition in the automata | |
*/ | |
typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec, | |
const xmlChar *token, | |
void *transdata, | |
void *inputdata); | |
/* | |
* The progressive API | |
*/ | |
XMLPUBFUN xmlRegExecCtxtPtr XMLCALL | |
xmlRegNewExecCtxt (xmlRegexpPtr comp, | |
xmlRegExecCallbacks callback, | |
void *data); | |
XMLPUBFUN void XMLCALL | |
xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec); | |
XMLPUBFUN int XMLCALL | |
xmlRegExecPushString(xmlRegExecCtxtPtr exec, | |
const xmlChar *value, | |
void *data); | |
XMLPUBFUN int XMLCALL | |
xmlRegExecPushString2(xmlRegExecCtxtPtr exec, | |
const xmlChar *value, | |
const xmlChar *value2, | |
void *data); | |
XMLPUBFUN int XMLCALL | |
xmlRegExecNextValues(xmlRegExecCtxtPtr exec, | |
int *nbval, | |
int *nbneg, | |
xmlChar **values, | |
int *terminal); | |
XMLPUBFUN int XMLCALL | |
xmlRegExecErrInfo (xmlRegExecCtxtPtr exec, | |
const xmlChar **string, | |
int *nbval, | |
int *nbneg, | |
xmlChar **values, | |
int *terminal); | |
/* | |
* Formal regular expression handling | |
* Its goal is to do some formal work on content models | |
*/ | |
/* expressions are used within a context */ | |
typedef struct _xmlExpCtxt xmlExpCtxt; | |
typedef xmlExpCtxt *xmlExpCtxtPtr; | |
XMLPUBFUN void XMLCALL | |
xmlExpFreeCtxt (xmlExpCtxtPtr ctxt); | |
XMLPUBFUN xmlExpCtxtPtr XMLCALL | |
xmlExpNewCtxt (int maxNodes, | |
xmlDictPtr dict); | |
XMLPUBFUN int XMLCALL | |
xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt); | |
XMLPUBFUN int XMLCALL | |
xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt); | |
/* Expressions are trees but the tree is opaque */ | |
typedef struct _xmlExpNode xmlExpNode; | |
typedef xmlExpNode *xmlExpNodePtr; | |
typedef enum { | |
XML_EXP_EMPTY = 0, | |
XML_EXP_FORBID = 1, | |
XML_EXP_ATOM = 2, | |
XML_EXP_SEQ = 3, | |
XML_EXP_OR = 4, | |
XML_EXP_COUNT = 5 | |
} xmlExpNodeType; | |
/* | |
* 2 core expressions shared by all for the empty language set | |
* and for the set with just the empty token | |
*/ | |
XMLPUBVAR xmlExpNodePtr forbiddenExp; | |
XMLPUBVAR xmlExpNodePtr emptyExp; | |
/* | |
* Expressions are reference counted internally | |
*/ | |
XMLPUBFUN void XMLCALL | |
xmlExpFree (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr); | |
XMLPUBFUN void XMLCALL | |
xmlExpRef (xmlExpNodePtr expr); | |
/* | |
* constructors can be either manual or from a string | |
*/ | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpParse (xmlExpCtxtPtr ctxt, | |
const char *expr); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpNewAtom (xmlExpCtxtPtr ctxt, | |
const xmlChar *name, | |
int len); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpNewOr (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr left, | |
xmlExpNodePtr right); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpNewSeq (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr left, | |
xmlExpNodePtr right); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpNewRange (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr subset, | |
int min, | |
int max); | |
/* | |
* The really interesting APIs | |
*/ | |
XMLPUBFUN int XMLCALL | |
xmlExpIsNillable(xmlExpNodePtr expr); | |
XMLPUBFUN int XMLCALL | |
xmlExpMaxToken (xmlExpNodePtr expr); | |
XMLPUBFUN int XMLCALL | |
xmlExpGetLanguage(xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr, | |
const xmlChar**langList, | |
int len); | |
XMLPUBFUN int XMLCALL | |
xmlExpGetStart (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr, | |
const xmlChar**tokList, | |
int len); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpStringDerive(xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr, | |
const xmlChar *str, | |
int len); | |
XMLPUBFUN xmlExpNodePtr XMLCALL | |
xmlExpExpDerive (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr, | |
xmlExpNodePtr sub); | |
XMLPUBFUN int XMLCALL | |
xmlExpSubsume (xmlExpCtxtPtr ctxt, | |
xmlExpNodePtr expr, | |
xmlExpNodePtr sub); | |
XMLPUBFUN void XMLCALL | |
xmlExpDump (xmlBufferPtr buf, | |
xmlExpNodePtr expr); | |
} | |