File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libxml2 / include / libxml / xmlregexp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:37:58 2012 UTC (12 years, 7 months ago) by misho
Branches: libxml2, MAIN
CVS tags: v2_9_1p0, v2_9_1, v2_8_0p0, v2_8_0, v2_7_8, HEAD
libxml2

    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__ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>