#ifndef __XML_PATTERN_H__
#define __XML_PATTERN_H__
#include <libxml/xmlversion.h>
#include <libxml/tree.h>
#include <libxml/dict.h>
#include <libxml/xmlstring.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _xmlPattern xmlPattern;
typedef struct _xmlStreamCtxt xmlStreamCtxt;
typedef enum{
XML_PATTERN_DEFAULT = 0,
XML_PATTERN_XPATH = 1<<0,
XML_PATTERN_XSSEL = 1<<1,
XML_PATTERN_XSFIELD = 1<<2
} xmlPatternFlags;
XMLPUBFUN void xmlFreePattern (xmlPattern *comp);
XMLPUBFUN void xmlFreePatternList (xmlPattern *comp);
XMLPUBFUN void xmlFreeStreamCtxt (xmlStreamCtxt *stream);
XMLPUBFUN int xmlPatternCompileSafe (const xmlChar *pattern, xmlDict *dict, int flags, const xmlChar **namespaces, xmlPattern **patternOut);
XMLPUBFUN int xmlPatternFromRoot (xmlPattern *comp);
XMLPUBFUN xmlStreamCtxt * xmlPatternGetStreamCtxt (xmlPattern *comp);
XMLPUBFUN int xmlPatternMatch (xmlPattern *comp, xmlNode *node);
XMLPUBFUN int xmlPatternMaxDepth (xmlPattern *comp);
XMLPUBFUN int xmlPatternMinDepth (xmlPattern *comp);
XMLPUBFUN int xmlPatternStreamable (xmlPattern *comp);
XMLPUBFUN xmlPattern * xmlPatterncompile (const xmlChar *pattern, xmlDict *dict, int flags, const xmlChar **namespaces);
XMLPUBFUN int xmlStreamPop (xmlStreamCtxt *stream);
XMLPUBFUN int xmlStreamPush (xmlStreamCtxt *stream, const xmlChar *name, const xmlChar *ns);
XMLPUBFUN int xmlStreamPushAttr (xmlStreamCtxt *stream, const xmlChar *name, const xmlChar *ns);
XMLPUBFUN int xmlStreamPushNode (xmlStreamCtxt *stream, const xmlChar *name, const xmlChar *ns, int nodeType);
XMLPUBFUN int xmlStreamWantsAnyNode (xmlStreamCtxt *stream);
#ifdef __cplusplus
}
#endif
#endif