* 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: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

/if not defined(XML_REGEXP_H__)
/define XML_REGEXP_H__

/include "libxmlrpg/xmlversion"

/if defined(LIBXML_REGEXP_ENABLED)

/include "libxmlrpg/xmlTypesC"

* xmlRegexpPtr:
*
* A libxml regular expression, they can actually be far more complex
* thank the POSIX regex expressions.

d xmlRegexpPtr s * based(######typedef######)

* xmlRegExecCtxtPtr:
*
* A libxml progressive regular expression evaluation context

d xmlRegExecCtxtPtr… d s * based(######typedef######)

/include "libxmlrpg/tree"
/include "libxmlrpg/dict"

* The POSIX like API

d xmlRegexpCompile… d pr extproc('xmlRegexpCompile') d like(xmlRegexpPtr) d regexp * value options(*string) const xmlChar *

d xmlRegFreeRegexp… d pr extproc('xmlRegFreeRegexp') d regexp value like(xmlRegexpPtr)

d xmlRegexpExec pr extproc('xmlRegexpExec') d like(xmlCint) d comp value like(xmlRegexpPtr) d value * value options(*string) const xmlChar *

d xmlRegexpPrint pr extproc('xmlRegexpPrint') d output * value FILE * d regexp value like(xmlRegexpPtr)

d xmlRegexpIsDeterminist… d pr extproc('xmlRegexpIsDeterminist') d like(xmlCint) d comp value like(xmlRegexpPtr)

* 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

d xmlRegExecCallbacks… d s * based(######typedef######) d procptr

* The progressive API

d xmlRegNewExecCtxt… d pr extproc('xmlRegNewExecCtxt') d like(xmlRegExecCtxtPtr) d comp value like(xmlRegexpPtr) d callback value like(xmlRegExecCallbacks) d data * value void *

d xmlRegFreeExecCtxt… d pr extproc('xmlRegFreeExecCtxt') d exec value like(xmlRegExecCtxtPtr)

d xmlRegExecPushString… d pr extproc('xmlRegExecPushString') d like(xmlCint) d exec value like(xmlRegExecCtxtPtr) d value * value options(*string) const xmlChar * d data * value void *

d xmlRegExecPushString2… d pr extproc('xmlRegExecPushString2') d like(xmlCint) d exec value like(xmlRegExecCtxtPtr) d value * value options(*string) const xmlChar * d value2 * value options(*string) const xmlChar * d data * value void *

d xmlRegExecNextValues… d pr extproc('xmlRegExecNextValues') d like(xmlCint) d exec value like(xmlRegExecCtxtPtr) d nbval like(xmlCint) d nbneg like(xmlCint) d values * xmlChar * (*) d terminal like(xmlCint)

d xmlRegExecErrInfo… d pr extproc('xmlRegExecErrInfo') d like(xmlCint) d exec value like(xmlRegExecCtxtPtr) d string * const xmlChar * (*) d nbval like(xmlCint) d nbneg like(xmlCint) d values * xmlChar * (*) d terminal like(xmlCint)

/if defined(LIBXML_EXPR_ENABLED)

* Formal regular expression handling
* Its goal is to do some formal work on content models

* expressions are used within a context

d xmlExpCtxtPtr s * based(######typedef######)

d xmlExpFreeCtxt pr extproc('xmlExpFreeCtxt') d ctxt value like(xmlExpCtxtPtr)

d xmlExpNewCtxt pr extproc('xmlExpNewCtxt') d like(xmlExpCtxtPtr) d maxNodes value like(xmlCint) d dict value like(xmlDictPtr)

d xmlExpCtxtNbNodes… d pr extproc('xmlExpCtxtNbNodes') d like(xmlCint) d ctxt value like(xmlExpCtxtPtr)

d xmlExpCtxtNbCons… d pr extproc('xmlExpCtxtNbCons') d like(xmlCint) d ctxt value like(xmlExpCtxtPtr)

* Expressions are trees but the tree is opaque

d xmlExpNodePtr s * based(######typedef######)

d xmlExpNodeType s based(######typedef######) d like(xmlCenum) d XML_EXP_EMPTY c 0 d XML_EXP_FORBID… d c 1 d XML_EXP_ATOM c 2 d XML_EXP_SEQ c 3 d XML_EXP_OR c 4 d XML_EXP_COUNT c 5

* 2 core expressions shared by all for the empty language set
* and for the set with just the empty token

d forbiddenExp s import('forbiddenExp') d like(xmlExpNodePtr)

d emptyExp s import('emptyExp') d like(xmlExpNodePtr)

* Expressions are reference counted internally

d xmlExpFree pr extproc('xmlExpFree') d expr value like(xmlExpNodePtr)

d xmlExpRef pr extproc('xmlExpRef') d expr value like(xmlExpNodePtr)

* constructors can be either manual or from a string

d xmlExpParse pr extproc('xmlExpParse') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d expr * value options(*string) const char *

d xmlExpNewAtom pr extproc('xmlExpNewAtom') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d name * value options(*string) const xmlChar * d len value like(xmlCint)

d xmlExpNewOr pr extproc('xmlExpNewOr') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d left value like(xmlExpNodePtr) d right value like(xmlExpNodePtr)

d xmlExpNewSeq pr extproc('xmlExpNewSeq') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d left value like(xmlExpNodePtr) d right value like(xmlExpNodePtr)

d xmlExpNewRange pr extproc('xmlExpNewRange') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d subset value like(xmlExpNodePtr) d min value like(xmlCint) d max value like(xmlCint)

* The really interesting APIs

d xmlExpIsNillable… d pr extproc('xmlExpIsNillable') d like(xmlCint) d expr value like(xmlExpNodePtr)

d xmlExpMaxToken pr extproc('xmlExpMaxToken') d like(xmlCint) d expr value like(xmlExpNodePtr)

d xmlExpGetLanguage… d pr extproc('xmlExpGetLanguage') d like(xmlCint) d ctxt value like(xmlExpCtxtPtr) d expr value like(xmlExpNodePtr) d langList * const xmlChar *(*) d len value like(xmlCint)

d xmlExpGetStart pr extproc('xmlExpGetStart') d like(xmlCint) d ctxt value like(xmlExpCtxtPtr) d expr value like(xmlExpNodePtr) d tokList * const xmlChar *(*) d len value like(xmlCint)

d xmlExpStringDerive… d pr extproc('xmlExpStringDerive') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d expr value like(xmlExpNodePtr) d str * value options(*string) const xmlChar * d len value like(xmlCint)

d xmlExpExpDerive… d pr extproc('xmlExpExpDerive') d like(xmlExpNodePtr) d ctxt value like(xmlExpCtxtPtr) d expr value like(xmlExpNodePtr) d sub value like(xmlExpNodePtr)

d xmlExpSubsume pr extproc('xmlExpSubsume') d like(xmlCint) d ctxt value like(xmlExpCtxtPtr) d expr value like(xmlExpNodePtr) d sub value like(xmlExpNodePtr)

d xmlExpDump pr extproc('xmlExpDump') d buf value like(xmlBufferPtr) d expr value like(xmlExpNodePtr)

/endif                                                                    LIBXML_EXPR_ENABLED
/endif                                                                    LIBXML_REGEXP_ENABLD
/endif                                                                    XML_REGEXP_H__