Annotation of XML/xpathInternals.h, revision 1.5
1.1 veillard 1: /*
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
16: extern "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)) \
1.3 veillard 41: XP_ERROR(XPATH_INVALID_TYPE)
1.1 veillard 42:
43: #define CHECK_ARITY(x) \
1.3 veillard 44: if (nargs != (x)) \
45: XP_ERROR(XPATH_INVALID_ARITY);
46:
47: #define CAST_TO_STRING \
48: if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
49: xmlXPathStringFunction(ctxt, 1);
50:
51: #define CAST_TO_NUMBER \
52: if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
53: xmlXPathNumberFunction(ctxt, 1);
54:
55: #define CAST_TO_BOOLEAN \
56: if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
57: xmlXPathBooleanFunction(ctxt, 1);
1.1 veillard 58:
59: void xmlXPatherror (xmlXPathParserContextPtr ctxt,
60: const char *file,
61: int line,
62: int no);
63:
64: void xmlXPathDebugDumpObject (FILE *output,
65: xmlXPathObjectPtr cur,
66: int depth);
67:
68: /**
69: * Extending a context
70: */
1.5 ! veillard 71: int xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
! 72: const xmlChar *prefix,
! 73: const xmlChar *ns_uri);
! 74: const xmlChar * xmlXPathNsLookup (xmlXPathContextPtr ctxt,
! 75: const xmlChar *ns_uri);
! 76: void xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
! 77:
1.1 veillard 78: int xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
79: const xmlChar *name,
80: xmlXPathFunction f);
1.3 veillard 81: int xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
82: const xmlChar *name,
83: const xmlChar *ns_uri,
84: xmlXPathFunction f);
1.1 veillard 85: int xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
86: const xmlChar *name,
87: xmlXPathObjectPtr value);
1.3 veillard 88: int xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
89: const xmlChar *name,
90: const xmlChar *ns_uri,
91: xmlXPathObjectPtr value);
1.1 veillard 92: xmlXPathFunction xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
93: const xmlChar *name);
1.3 veillard 94: xmlXPathFunction xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
95: const xmlChar *name,
96: const xmlChar *ns_uri);
1.1 veillard 97: void xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt);
98: xmlXPathObjectPtr xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
99: const xmlChar *name);
1.3 veillard 100: xmlXPathObjectPtr xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
101: const xmlChar *name,
102: const xmlChar *ns_uri);
1.1 veillard 103: void xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
104:
105: /**
106: * Utilities to extend XPath
107: */
108: xmlXPathParserContextPtr
109: xmlXPathNewParserContext (const xmlChar *str,
110: xmlXPathContextPtr ctxt);
111: void xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
112:
113: xmlXPathObjectPtr valuePop (xmlXPathParserContextPtr ctxt);
114: int valuePush (xmlXPathParserContextPtr ctxt,
115: xmlXPathObjectPtr value);
116:
117: xmlXPathObjectPtr xmlXPathNewString (const xmlChar *val);
118: xmlXPathObjectPtr xmlXPathNewCString (const char *val);
119: xmlXPathObjectPtr xmlXPathNewFloat (double val);
120: xmlXPathObjectPtr xmlXPathNewBoolean (int val);
121: xmlXPathObjectPtr xmlXPathNewNodeSet (xmlNodePtr val);
122: void xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
123: xmlNodePtr val);
124:
125:
126: void xmlXPathIdFunction (xmlXPathParserContextPtr ctxt,
127: int nargs);
128: void xmlXPathRoot (xmlXPathParserContextPtr ctxt);
129: void xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
130: xmlChar * xmlXPathParseName (xmlXPathParserContextPtr ctxt);
1.5 ! veillard 131: xmlChar * xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
1.1 veillard 132:
133: /*
134: * Debug
135: */
136: #ifdef LIBXML_DEBUG_ENABLED
137: double xmlXPathStringEvalNumber(const xmlChar *str);
138: void xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth);
139: #endif
140: /*
141: * Existing functions
142: */
143:
1.4 veillard 144: int xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
145: xmlXPathObjectPtr res);
1.1 veillard 146: void xmlXPathInit(void);
147: void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
148: void xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt);
149: xmlNodeSetPtr xmlXPathNodeSetCreate(xmlNodePtr val);
150: void xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val);
151: xmlNodeSetPtr xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2);
152: void xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val);
153: void xmlXPathNodeSetRemove(xmlNodeSetPtr cur, int val);
154: void xmlXPathFreeNodeSet(xmlNodeSetPtr obj);
155: xmlXPathObjectPtr xmlXPathNewNodeSet(xmlNodePtr val);
156: xmlXPathObjectPtr xmlXPathNewNodeSetList(xmlNodeSetPtr val);
157: xmlXPathObjectPtr xmlXPathWrapNodeSet(xmlNodeSetPtr val);
158: void xmlXPathFreeNodeSetList(xmlXPathObjectPtr obj);
159:
160:
161: xmlXPathObjectPtr xmlXPathNewFloat(double val);
162: xmlXPathObjectPtr xmlXPathNewBoolean(int val);
163: xmlXPathObjectPtr xmlXPathNewString(const xmlChar *val);
164: xmlXPathObjectPtr xmlXPathNewCString(const char *val);
165: void xmlXPathFreeObject(xmlXPathObjectPtr obj);
166: xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc);
167: void xmlXPathFreeContext(xmlXPathContextPtr ctxt);
168:
169: int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
170: int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
171: void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
172: void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
173: void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
174: void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
175: void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
176: void xmlXPathModValues(xmlXPathParserContextPtr ctxt);
177:
178: /*
179: * The official core of XPath functions
180: */
181: void xmlXPathRoot(xmlXPathParserContextPtr ctxt);
182: void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
183: void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
184: void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
185: void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
1.2 veillard 186: void xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
187: void xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
1.1 veillard 188: void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
189: void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
190: void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
191: void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
192: void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
193: void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
194: void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
195: void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
196: void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
197: void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
198: void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
199: void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
200: void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
201: void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
202: void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
203: void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
204: void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
205: void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
206: void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
207: #ifdef __cplusplus
208: }
209: #endif
210: #endif /* ! __XML_XPATH_INTERNALS_H__ */
Webmaster