Home | History | Annotate | Download | only in libxml
      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__ */
    223