xmlregexp.h

Go to the documentation of this file.
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 
00063 /*
00064  * Callback function when doing a transition in the automata
00065  */
00066 typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
00067                                  const xmlChar *token,
00068                      void *transdata,
00069                      void *inputdata);
00070 
00071 /*
00072  * The progressive API
00073  */
00074 XMLPUBFUN xmlRegExecCtxtPtr XMLCALL 
00075                 xmlRegNewExecCtxt   (xmlRegexpPtr comp,
00076                      xmlRegExecCallbacks callback,
00077                      void *data);
00078 XMLPUBFUN void XMLCALL          
00079             xmlRegFreeExecCtxt  (xmlRegExecCtxtPtr exec);
00080 XMLPUBFUN int XMLCALL           
00081                 xmlRegExecPushString(xmlRegExecCtxtPtr exec,
00082                      const xmlChar *value,
00083                      void *data);
00084 XMLPUBFUN int XMLCALL           
00085             xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
00086                      const xmlChar *value,
00087                      const xmlChar *value2,
00088                      void *data);
00089 
00090 XMLPUBFUN int XMLCALL
00091             xmlRegExecNextValues(xmlRegExecCtxtPtr exec,
00092                          int *nbval,
00093                          int *nbneg,
00094                      xmlChar **values,
00095                      int *terminal);
00096 XMLPUBFUN int XMLCALL
00097             xmlRegExecErrInfo   (xmlRegExecCtxtPtr exec,
00098                          const xmlChar **string,
00099                      int *nbval,
00100                          int *nbneg,
00101                      xmlChar **values,
00102                      int *terminal);
00103 #ifdef LIBXML_EXPR_ENABLED
00104 /*
00105  * Formal regular expression handling
00106  * Its goal is to do some formal work on content models
00107  */
00108 
00109 /* expressions are used within a context */
00110 typedef struct _xmlExpCtxt xmlExpCtxt;
00111 typedef xmlExpCtxt *xmlExpCtxtPtr;
00112 
00113 XMLPUBFUN void XMLCALL
00114             xmlExpFreeCtxt  (xmlExpCtxtPtr ctxt);
00115 XMLPUBFUN xmlExpCtxtPtr XMLCALL
00116             xmlExpNewCtxt   (int maxNodes,
00117                      xmlDictPtr dict);
00118 
00119 XMLPUBFUN int XMLCALL
00120             xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
00121 XMLPUBFUN int XMLCALL
00122             xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
00123 
00124 /* Expressions are trees but the tree is opaque */
00125 typedef struct _xmlExpNode xmlExpNode;
00126 typedef xmlExpNode *xmlExpNodePtr;
00127 
00128 typedef enum {
00129     XML_EXP_EMPTY = 0,
00130     XML_EXP_FORBID = 1,
00131     XML_EXP_ATOM = 2,
00132     XML_EXP_SEQ = 3,
00133     XML_EXP_OR = 4,
00134     XML_EXP_COUNT = 5
00135 } xmlExpNodeType;
00136 
00137 /*
00138  * 2 core expressions shared by all for the empty language set 
00139  * and for the set with just the empty token
00140  */
00141 XMLPUBVAR xmlExpNodePtr forbiddenExp;
00142 XMLPUBVAR xmlExpNodePtr emptyExp;
00143 
00144 /*
00145  * Expressions are reference counted internally
00146  */
00147 XMLPUBFUN void XMLCALL
00148             xmlExpFree  (xmlExpCtxtPtr ctxt,
00149                      xmlExpNodePtr expr);
00150 XMLPUBFUN void XMLCALL
00151             xmlExpRef   (xmlExpNodePtr expr);
00152 
00153 /*
00154  * constructors can be either manual or from a string
00155  */
00156 XMLPUBFUN xmlExpNodePtr XMLCALL
00157             xmlExpParse (xmlExpCtxtPtr ctxt,
00158                      const char *expr);
00159 XMLPUBFUN xmlExpNodePtr XMLCALL
00160             xmlExpNewAtom   (xmlExpCtxtPtr ctxt,
00161                      const xmlChar *name,
00162                      int len);
00163 XMLPUBFUN xmlExpNodePtr XMLCALL
00164             xmlExpNewOr (xmlExpCtxtPtr ctxt,
00165                      xmlExpNodePtr left,
00166                      xmlExpNodePtr right);
00167 XMLPUBFUN xmlExpNodePtr XMLCALL
00168             xmlExpNewSeq    (xmlExpCtxtPtr ctxt,
00169                      xmlExpNodePtr left,
00170                      xmlExpNodePtr right);
00171 XMLPUBFUN xmlExpNodePtr XMLCALL
00172             xmlExpNewRange  (xmlExpCtxtPtr ctxt,
00173                      xmlExpNodePtr subset,
00174                      int min,
00175                      int max);
00176 /*
00177  * The really interesting APIs
00178  */
00179 XMLPUBFUN int XMLCALL
00180             xmlExpIsNillable(xmlExpNodePtr expr);
00181 XMLPUBFUN int XMLCALL
00182             xmlExpMaxToken  (xmlExpNodePtr expr);
00183 XMLPUBFUN int XMLCALL
00184             xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
00185                      xmlExpNodePtr expr,
00186                      const xmlChar**langList,
00187                      int len);
00188 XMLPUBFUN int XMLCALL
00189             xmlExpGetStart  (xmlExpCtxtPtr ctxt,
00190                      xmlExpNodePtr expr,
00191                      const xmlChar**tokList,
00192                      int len);
00193 XMLPUBFUN xmlExpNodePtr XMLCALL
00194             xmlExpStringDerive(xmlExpCtxtPtr ctxt,
00195                      xmlExpNodePtr expr,
00196                      const xmlChar *str,
00197                      int len);
00198 XMLPUBFUN xmlExpNodePtr XMLCALL
00199             xmlExpExpDerive (xmlExpCtxtPtr ctxt,
00200                      xmlExpNodePtr expr,
00201                      xmlExpNodePtr sub);
00202 XMLPUBFUN int XMLCALL
00203             xmlExpSubsume   (xmlExpCtxtPtr ctxt,
00204                      xmlExpNodePtr expr,
00205                      xmlExpNodePtr sub);
00206 XMLPUBFUN void XMLCALL
00207             xmlExpDump  (xmlBufferPtr buf,
00208                      xmlExpNodePtr expr);
00209 #endif /* LIBXML_EXPR_ENABLED */
00210 #ifdef __cplusplus
00211 }
00212 #endif 
00213 
00214 #endif /* LIBXML_REGEXP_ENABLED */
00215 
00216 #endif /*__XML_REGEXP_H__ */
footer
 SourceForge.net Logo