blob: c32d3c59db993d319587429d605bd8802a2c1438 [file] [log] [blame]
Daniel Veillard29a11cc2000-10-25 13:32:39 +00001/*
2 * xpath.c: internal interfaces for XML Path Language implementation
3 * used to build new modules on top of XPath
4 *
5 * See COPYRIGHT for the status of this software
6 *
7 * Author: Daniel.Veillard@w3.org
8 */
9
10#ifndef __XML_XPATH_INTERNALS_H__
11#define __XML_XPATH_INTERNALS_H__
12
13#include <libxml/xpath.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19/************************************************************************
20 * *
21 * Helpers *
22 * *
23 ************************************************************************/
24
25#define CHECK_ERROR \
26 if (ctxt->error != XPATH_EXPRESSION_OK) return
27
28#define CHECK_ERROR0 \
29 if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
30
31#define XP_ERROR(X) \
32 { xmlXPatherror(ctxt, __FILE__, __LINE__, X); \
33 ctxt->error = (X); return; }
34
35#define XP_ERROR0(X) \
36 { xmlXPatherror(ctxt, __FILE__, __LINE__, X); \
37 ctxt->error = (X); return(0); }
38
39#define CHECK_TYPE(typeval) \
40 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
41 XP_ERROR(XPATH_INVALID_TYPE) \
42
43#define CHECK_ARITY(x) \
44 if (nargs != (x)) { \
45 XP_ERROR(XPATH_INVALID_ARITY); \
46 } \
47
48void xmlXPatherror (xmlXPathParserContextPtr ctxt,
49 const char *file,
50 int line,
51 int no);
52
53void xmlXPathDebugDumpObject (FILE *output,
54 xmlXPathObjectPtr cur,
55 int depth);
56
57/**
58 * Extending a context
59 */
60int xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
61 const xmlChar *name,
62 xmlXPathFunction f);
63int xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
64 const xmlChar *name,
65 xmlXPathObjectPtr value);
66xmlXPathFunction xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
67 const xmlChar *name);
68void xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt);
69xmlXPathObjectPtr xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
70 const xmlChar *name);
71void xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
72
73/**
74 * Utilities to extend XPath
75 */
76xmlXPathParserContextPtr
77 xmlXPathNewParserContext (const xmlChar *str,
78 xmlXPathContextPtr ctxt);
79void xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
80
81xmlXPathObjectPtr valuePop (xmlXPathParserContextPtr ctxt);
82int valuePush (xmlXPathParserContextPtr ctxt,
83 xmlXPathObjectPtr value);
84
85xmlXPathObjectPtr xmlXPathNewString (const xmlChar *val);
86xmlXPathObjectPtr xmlXPathNewCString (const char *val);
87xmlXPathObjectPtr xmlXPathNewFloat (double val);
88xmlXPathObjectPtr xmlXPathNewBoolean (int val);
89xmlXPathObjectPtr xmlXPathNewNodeSet (xmlNodePtr val);
90void xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
91 xmlNodePtr val);
92
93
94void xmlXPathIdFunction (xmlXPathParserContextPtr ctxt,
95 int nargs);
96void xmlXPathRoot (xmlXPathParserContextPtr ctxt);
97void xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
98xmlChar * xmlXPathParseName (xmlXPathParserContextPtr ctxt);
99
100/*
101 * Debug
102 */
103#ifdef LIBXML_DEBUG_ENABLED
104double xmlXPathStringEvalNumber(const xmlChar *str);
105void xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth);
106#endif
107/*
108 * Existing functions
109 */
110
111void xmlXPathInit(void);
112void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
113void xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt);
114xmlNodeSetPtr xmlXPathNodeSetCreate(xmlNodePtr val);
115void xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val);
116xmlNodeSetPtr xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2);
117void xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val);
118void xmlXPathNodeSetRemove(xmlNodeSetPtr cur, int val);
119void xmlXPathFreeNodeSet(xmlNodeSetPtr obj);
120xmlXPathObjectPtr xmlXPathNewNodeSet(xmlNodePtr val);
121xmlXPathObjectPtr xmlXPathNewNodeSetList(xmlNodeSetPtr val);
122xmlXPathObjectPtr xmlXPathWrapNodeSet(xmlNodeSetPtr val);
123void xmlXPathFreeNodeSetList(xmlXPathObjectPtr obj);
124
125
126xmlXPathObjectPtr xmlXPathNewFloat(double val);
127xmlXPathObjectPtr xmlXPathNewBoolean(int val);
128xmlXPathObjectPtr xmlXPathNewString(const xmlChar *val);
129xmlXPathObjectPtr xmlXPathNewCString(const char *val);
130void xmlXPathFreeObject(xmlXPathObjectPtr obj);
131xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc);
132void xmlXPathFreeContext(xmlXPathContextPtr ctxt);
133
134int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
135int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
136void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
137void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
138void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
139void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
140void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
141void xmlXPathModValues(xmlXPathParserContextPtr ctxt);
142
143/*
144 * The official core of XPath functions
145 */
146void xmlXPathRoot(xmlXPathParserContextPtr ctxt);
147void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
148void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
149void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
150void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
151void xmlXPathLocalPartFunction(xmlXPathParserContextPtr ctxt, int nargs);
152void xmlXPathNamespaceFunction(xmlXPathParserContextPtr ctxt, int nargs);
153void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
154void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
155void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
156void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
157void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
158void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
159void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
160void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
161void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
162void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
163void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
164void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
165void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
166void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
167void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
168void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
169void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
170void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
171void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
172#ifdef __cplusplus
173}
174#endif
175#endif /* ! __XML_XPATH_INTERNALS_H__ */