• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Summary: internal interfaces for XML Path Language implementation
3  * Description: internal interfaces for XML Path Language implementation
4  *              used to build new modules on top of XPath like XPointer and
5  *              XSLT
6  *
7  * Copy: See Copyright for the status of this software.
8  *
9  * Author: Daniel Veillard
10  */
11 
12 #ifndef __XML_XPATH_INTERNALS_H__
13 #define __XML_XPATH_INTERNALS_H__
14 
15 #include <libxml/xmlversion.h>
16 #include <libxml/xpath.h>
17 
18 #ifdef LIBXML_XPATH_ENABLED
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /************************************************************************
25  *									*
26  *			Helpers						*
27  *									*
28  ************************************************************************/
29 
30 /*
31  * Many of these macros may later turn into functions. They
32  * shouldn't be used in #ifdef's preprocessor instructions.
33  */
34 /**
35  * xmlXPathSetError:
36  * @ctxt:  an XPath parser context
37  * @err:  an xmlXPathError code
38  *
39  * Raises an error.
40  */
41 #define xmlXPathSetError(ctxt, err)					\
42     { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));			\
43       if ((ctxt) != NULL) (ctxt)->error = (err); }
44 
45 /**
46  * xmlXPathSetArityError:
47  * @ctxt:  an XPath parser context
48  *
49  * Raises an XPATH_INVALID_ARITY error.
50  */
51 #define xmlXPathSetArityError(ctxt)					\
52     xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
53 
54 /**
55  * xmlXPathSetTypeError:
56  * @ctxt:  an XPath parser context
57  *
58  * Raises an XPATH_INVALID_TYPE error.
59  */
60 #define xmlXPathSetTypeError(ctxt)					\
61     xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
62 
63 /**
64  * xmlXPathGetError:
65  * @ctxt:  an XPath parser context
66  *
67  * Get the error code of an XPath context.
68  *
69  * Returns the context error.
70  */
71 #define xmlXPathGetError(ctxt)	  ((ctxt)->error)
72 
73 /**
74  * xmlXPathCheckError:
75  * @ctxt:  an XPath parser context
76  *
77  * Check if an XPath error was raised.
78  *
79  * Returns true if an error has been raised, false otherwise.
80  */
81 #define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK)
82 
83 /**
84  * xmlXPathGetDocument:
85  * @ctxt:  an XPath parser context
86  *
87  * Get the document of an XPath context.
88  *
89  * Returns the context document.
90  */
91 #define xmlXPathGetDocument(ctxt)	((ctxt)->context->doc)
92 
93 /**
94  * xmlXPathGetContextNode:
95  * @ctxt: an XPath parser context
96  *
97  * Get the context node of an XPath context.
98  *
99  * Returns the context node.
100  */
101 #define xmlXPathGetContextNode(ctxt)	((ctxt)->context->node)
102 
103 XMLPUBFUN int XMLCALL
104 		xmlXPathPopBoolean	(xmlXPathParserContextPtr ctxt);
105 XMLPUBFUN double XMLCALL
106     		xmlXPathPopNumber	(xmlXPathParserContextPtr ctxt);
107 XMLPUBFUN xmlChar * XMLCALL
108     		xmlXPathPopString	(xmlXPathParserContextPtr ctxt);
109 XMLPUBFUN xmlNodeSetPtr XMLCALL
110     		xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt);
111 XMLPUBFUN void * XMLCALL
112     		xmlXPathPopExternal	(xmlXPathParserContextPtr ctxt);
113 
114 /**
115  * xmlXPathReturnBoolean:
116  * @ctxt:  an XPath parser context
117  * @val:  a boolean
118  *
119  * Pushes the boolean @val on the context stack.
120  */
121 #define xmlXPathReturnBoolean(ctxt, val)				\
122     valuePush((ctxt), xmlXPathNewBoolean(val))
123 
124 /**
125  * xmlXPathReturnTrue:
126  * @ctxt:  an XPath parser context
127  *
128  * Pushes true on the context stack.
129  */
130 #define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1)
131 
132 /**
133  * xmlXPathReturnFalse:
134  * @ctxt:  an XPath parser context
135  *
136  * Pushes false on the context stack.
137  */
138 #define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0)
139 
140 /**
141  * xmlXPathReturnNumber:
142  * @ctxt:  an XPath parser context
143  * @val:  a double
144  *
145  * Pushes the double @val on the context stack.
146  */
147 #define xmlXPathReturnNumber(ctxt, val)					\
148     valuePush((ctxt), xmlXPathNewFloat(val))
149 
150 /**
151  * xmlXPathReturnString:
152  * @ctxt:  an XPath parser context
153  * @str:  a string
154  *
155  * Pushes the string @str on the context stack.
156  */
157 #define xmlXPathReturnString(ctxt, str)					\
158     valuePush((ctxt), xmlXPathWrapString(str))
159 
160 /**
161  * xmlXPathReturnEmptyString:
162  * @ctxt:  an XPath parser context
163  *
164  * Pushes an empty string on the stack.
165  */
166 #define xmlXPathReturnEmptyString(ctxt)					\
167     valuePush((ctxt), xmlXPathNewCString(""))
168 
169 /**
170  * xmlXPathReturnNodeSet:
171  * @ctxt:  an XPath parser context
172  * @ns:  a node-set
173  *
174  * Pushes the node-set @ns on the context stack.
175  */
176 #define xmlXPathReturnNodeSet(ctxt, ns)					\
177     valuePush((ctxt), xmlXPathWrapNodeSet(ns))
178 
179 /**
180  * xmlXPathReturnEmptyNodeSet:
181  * @ctxt:  an XPath parser context
182  *
183  * Pushes an empty node-set on the context stack.
184  */
185 #define xmlXPathReturnEmptyNodeSet(ctxt)				\
186     valuePush((ctxt), xmlXPathNewNodeSet(NULL))
187 
188 /**
189  * xmlXPathReturnExternal:
190  * @ctxt:  an XPath parser context
191  * @val:  user data
192  *
193  * Pushes user data on the context stack.
194  */
195 #define xmlXPathReturnExternal(ctxt, val)				\
196     valuePush((ctxt), xmlXPathWrapExternal(val))
197 
198 /**
199  * xmlXPathStackIsNodeSet:
200  * @ctxt: an XPath parser context
201  *
202  * Check if the current value on the XPath stack is a node set or
203  * an XSLT value tree.
204  *
205  * Returns true if the current object on the stack is a node-set.
206  */
207 #define xmlXPathStackIsNodeSet(ctxt)					\
208     (((ctxt)->value != NULL)						\
209      && (((ctxt)->value->type == XPATH_NODESET)				\
210          || ((ctxt)->value->type == XPATH_XSLT_TREE)))
211 
212 /**
213  * xmlXPathStackIsExternal:
214  * @ctxt: an XPath parser context
215  *
216  * Checks if the current value on the XPath stack is an external
217  * object.
218  *
219  * Returns true if the current object on the stack is an external
220  * object.
221  */
222 #define xmlXPathStackIsExternal(ctxt)					\
223 	((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
224 
225 /**
226  * xmlXPathEmptyNodeSet:
227  * @ns:  a node-set
228  *
229  * Empties a node-set.
230  */
231 #define xmlXPathEmptyNodeSet(ns)					\
232     { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
233 
234 /**
235  * CHECK_ERROR:
236  *
237  * Macro to return from the function if an XPath error was detected.
238  */
239 #define CHECK_ERROR							\
240     if (ctxt->error != XPATH_EXPRESSION_OK) return
241 
242 /**
243  * CHECK_ERROR0:
244  *
245  * Macro to return 0 from the function if an XPath error was detected.
246  */
247 #define CHECK_ERROR0							\
248     if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
249 
250 /**
251  * XP_ERROR:
252  * @X:  the error code
253  *
254  * Macro to raise an XPath error and return.
255  */
256 #define XP_ERROR(X)							\
257     { xmlXPathErr(ctxt, X); return; }
258 
259 /**
260  * XP_ERROR0:
261  * @X:  the error code
262  *
263  * Macro to raise an XPath error and return 0.
264  */
265 #define XP_ERROR0(X)							\
266     { xmlXPathErr(ctxt, X); return(0); }
267 
268 /**
269  * CHECK_TYPE:
270  * @typeval:  the XPath type
271  *
272  * Macro to check that the value on top of the XPath stack is of a given
273  * type.
274  */
275 #define CHECK_TYPE(typeval)						\
276     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
277         XP_ERROR(XPATH_INVALID_TYPE)
278 
279 /**
280  * CHECK_TYPE0:
281  * @typeval:  the XPath type
282  *
283  * Macro to check that the value on top of the XPath stack is of a given
284  * type. Return(0) in case of failure
285  */
286 #define CHECK_TYPE0(typeval)						\
287     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
288         XP_ERROR0(XPATH_INVALID_TYPE)
289 
290 /**
291  * CHECK_ARITY:
292  * @x:  the number of expected args
293  *
294  * Macro to check that the number of args passed to an XPath function matches.
295  */
296 #define CHECK_ARITY(x)							\
297     if (ctxt == NULL) return;						\
298     if (nargs != (x))							\
299         XP_ERROR(XPATH_INVALID_ARITY);
300 
301 /**
302  * CAST_TO_STRING:
303  *
304  * Macro to try to cast the value on the top of the XPath stack to a string.
305  */
306 #define CAST_TO_STRING							\
307     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\
308         xmlXPathStringFunction(ctxt, 1);
309 
310 /**
311  * CAST_TO_NUMBER:
312  *
313  * Macro to try to cast the value on the top of the XPath stack to a number.
314  */
315 #define CAST_TO_NUMBER							\
316     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\
317         xmlXPathNumberFunction(ctxt, 1);
318 
319 /**
320  * CAST_TO_BOOLEAN:
321  *
322  * Macro to try to cast the value on the top of the XPath stack to a boolean.
323  */
324 #define CAST_TO_BOOLEAN							\
325     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\
326         xmlXPathBooleanFunction(ctxt, 1);
327 
328 /*
329  * Variable Lookup forwarding.
330  */
331 
332 XMLPUBFUN void XMLCALL
333 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
334 					 xmlXPathVariableLookupFunc f,
335 					 void *data);
336 
337 /*
338  * Function Lookup forwarding.
339  */
340 
341 XMLPUBFUN void XMLCALL
342 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
343 					 xmlXPathFuncLookupFunc f,
344 					 void *funcCtxt);
345 
346 /*
347  * Error reporting.
348  */
349 XMLPUBFUN void XMLCALL
350 		xmlXPatherror	(xmlXPathParserContextPtr ctxt,
351 				 const char *file,
352 				 int line,
353 				 int no);
354 
355 XMLPUBFUN void XMLCALL
356 		xmlXPathErr	(xmlXPathParserContextPtr ctxt,
357 				 int error);
358 
359 #ifdef LIBXML_DEBUG_ENABLED
360 XMLPUBFUN void XMLCALL
361 		xmlXPathDebugDumpObject	(FILE *output,
362 					 xmlXPathObjectPtr cur,
363 					 int depth);
364 XMLPUBFUN void XMLCALL
365 	    xmlXPathDebugDumpCompExpr(FILE *output,
366 					 xmlXPathCompExprPtr comp,
367 					 int depth);
368 #endif
369 /**
370  * NodeSet handling.
371  */
372 XMLPUBFUN int XMLCALL
373 		xmlXPathNodeSetContains		(xmlNodeSetPtr cur,
374 						 xmlNodePtr val);
375 XMLPUBFUN xmlNodeSetPtr XMLCALL
376 		xmlXPathDifference		(xmlNodeSetPtr nodes1,
377 						 xmlNodeSetPtr nodes2);
378 XMLPUBFUN xmlNodeSetPtr XMLCALL
379 		xmlXPathIntersection		(xmlNodeSetPtr nodes1,
380 						 xmlNodeSetPtr nodes2);
381 
382 XMLPUBFUN xmlNodeSetPtr XMLCALL
383 		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes);
384 XMLPUBFUN xmlNodeSetPtr XMLCALL
385 		xmlXPathDistinct		(xmlNodeSetPtr nodes);
386 
387 XMLPUBFUN int XMLCALL
388 		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1,
389 						 xmlNodeSetPtr nodes2);
390 
391 XMLPUBFUN xmlNodeSetPtr XMLCALL
392 		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes,
393 						 xmlNodePtr node);
394 XMLPUBFUN xmlNodeSetPtr XMLCALL
395 		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1,
396 						 xmlNodeSetPtr nodes2);
397 XMLPUBFUN xmlNodeSetPtr XMLCALL
398 		xmlXPathNodeLeading		(xmlNodeSetPtr nodes,
399 						 xmlNodePtr node);
400 XMLPUBFUN xmlNodeSetPtr XMLCALL
401 		xmlXPathLeading			(xmlNodeSetPtr nodes1,
402 						 xmlNodeSetPtr nodes2);
403 
404 XMLPUBFUN xmlNodeSetPtr XMLCALL
405 		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes,
406 						 xmlNodePtr node);
407 XMLPUBFUN xmlNodeSetPtr XMLCALL
408 		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1,
409 						 xmlNodeSetPtr nodes2);
410 XMLPUBFUN xmlNodeSetPtr XMLCALL
411 		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes,
412 						 xmlNodePtr node);
413 XMLPUBFUN xmlNodeSetPtr XMLCALL
414 		xmlXPathTrailing		(xmlNodeSetPtr nodes1,
415 						 xmlNodeSetPtr nodes2);
416 
417 
418 /**
419  * Extending a context.
420  */
421 
422 XMLPUBFUN int XMLCALL
423 		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt,
424 						 const xmlChar *prefix,
425 						 const xmlChar *ns_uri);
426 XMLPUBFUN const xmlChar * XMLCALL
427 		xmlXPathNsLookup		(xmlXPathContextPtr ctxt,
428 						 const xmlChar *prefix);
429 XMLPUBFUN void XMLCALL
430 		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt);
431 
432 XMLPUBFUN int XMLCALL
433 		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt,
434 						 const xmlChar *name,
435 						 xmlXPathFunction f);
436 XMLPUBFUN int XMLCALL
437 		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt,
438 						 const xmlChar *name,
439 						 const xmlChar *ns_uri,
440 						 xmlXPathFunction f);
441 XMLPUBFUN int XMLCALL
442 		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt,
443 						 const xmlChar *name,
444 						 xmlXPathObjectPtr value);
445 XMLPUBFUN int XMLCALL
446 		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt,
447 						 const xmlChar *name,
448 						 const xmlChar *ns_uri,
449 						 xmlXPathObjectPtr value);
450 XMLPUBFUN xmlXPathFunction XMLCALL
451 		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt,
452 						 const xmlChar *name);
453 XMLPUBFUN xmlXPathFunction XMLCALL
454 		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt,
455 						 const xmlChar *name,
456 						 const xmlChar *ns_uri);
457 XMLPUBFUN void XMLCALL
458 		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt);
459 XMLPUBFUN xmlXPathObjectPtr XMLCALL
460 		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt,
461 						 const xmlChar *name);
462 XMLPUBFUN xmlXPathObjectPtr XMLCALL
463 		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt,
464 						 const xmlChar *name,
465 						 const xmlChar *ns_uri);
466 XMLPUBFUN void XMLCALL
467 		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
468 
469 /**
470  * Utilities to extend XPath.
471  */
472 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
473 		  xmlXPathNewParserContext	(const xmlChar *str,
474 			  			 xmlXPathContextPtr ctxt);
475 XMLPUBFUN void XMLCALL
476 		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt);
477 
478 /* TODO: remap to xmlXPathValuePop and Push. */
479 XMLPUBFUN xmlXPathObjectPtr XMLCALL
480 		valuePop			(xmlXPathParserContextPtr ctxt);
481 XMLPUBFUN int XMLCALL
482 		valuePush			(xmlXPathParserContextPtr ctxt,
483 					 	 xmlXPathObjectPtr value);
484 
485 XMLPUBFUN xmlXPathObjectPtr XMLCALL
486 		xmlXPathNewString		(const xmlChar *val);
487 XMLPUBFUN xmlXPathObjectPtr XMLCALL
488 		xmlXPathNewCString		(const char *val);
489 XMLPUBFUN xmlXPathObjectPtr XMLCALL
490 		xmlXPathWrapString		(xmlChar *val);
491 XMLPUBFUN xmlXPathObjectPtr XMLCALL
492 		xmlXPathWrapCString		(char * val);
493 XMLPUBFUN xmlXPathObjectPtr XMLCALL
494 		xmlXPathNewFloat		(double val);
495 XMLPUBFUN xmlXPathObjectPtr XMLCALL
496 		xmlXPathNewBoolean		(int val);
497 XMLPUBFUN xmlXPathObjectPtr XMLCALL
498 		xmlXPathNewNodeSet		(xmlNodePtr val);
499 XMLPUBFUN xmlXPathObjectPtr XMLCALL
500 		xmlXPathNewValueTree		(xmlNodePtr val);
501 XMLPUBFUN void XMLCALL
502 		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur,
503 						 xmlNodePtr val);
504 XMLPUBFUN void XMLCALL
505 		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur,
506 						 xmlNodePtr val);
507 XMLPUBFUN void XMLCALL
508 		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur,
509 						 xmlNodePtr node,
510 						 xmlNsPtr ns);
511 XMLPUBFUN void XMLCALL
512 		xmlXPathNodeSetSort		(xmlNodeSetPtr set);
513 
514 XMLPUBFUN void XMLCALL
515 		xmlXPathRoot			(xmlXPathParserContextPtr ctxt);
516 XMLPUBFUN void XMLCALL
517 		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt);
518 XMLPUBFUN xmlChar * XMLCALL
519 		xmlXPathParseName		(xmlXPathParserContextPtr ctxt);
520 XMLPUBFUN xmlChar * XMLCALL
521 		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt);
522 
523 /*
524  * Existing functions.
525  */
526 XMLPUBFUN double XMLCALL
527 		xmlXPathStringEvalNumber	(const xmlChar *str);
528 XMLPUBFUN int XMLCALL
529 		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
530 						 xmlXPathObjectPtr res);
531 XMLPUBFUN void XMLCALL
532 		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt);
533 XMLPUBFUN xmlNodeSetPtr XMLCALL
534 		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1,
535 						 xmlNodeSetPtr val2);
536 XMLPUBFUN void XMLCALL
537 		xmlXPathNodeSetDel		(xmlNodeSetPtr cur,
538 						 xmlNodePtr val);
539 XMLPUBFUN void XMLCALL
540 		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur,
541 						 int val);
542 XMLPUBFUN xmlXPathObjectPtr XMLCALL
543 		xmlXPathNewNodeSetList		(xmlNodeSetPtr val);
544 XMLPUBFUN xmlXPathObjectPtr XMLCALL
545 		xmlXPathWrapNodeSet		(xmlNodeSetPtr val);
546 XMLPUBFUN xmlXPathObjectPtr XMLCALL
547 		xmlXPathWrapExternal		(void *val);
548 
549 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
550 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
551 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
552 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
553 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
554 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
555 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
556 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
557 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
558 
559 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
560 
561 /*
562  * Some of the axis navigation routines.
563  */
564 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
565 			xmlNodePtr cur);
566 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
567 			xmlNodePtr cur);
568 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
569 			xmlNodePtr cur);
570 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
571 			xmlNodePtr cur);
572 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
573 			xmlNodePtr cur);
574 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
575 			xmlNodePtr cur);
576 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
577 			xmlNodePtr cur);
578 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
579 			xmlNodePtr cur);
580 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
581 			xmlNodePtr cur);
582 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
583 			xmlNodePtr cur);
584 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
585 			xmlNodePtr cur);
586 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
587 			xmlNodePtr cur);
588 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
589 			xmlNodePtr cur);
590 /*
591  * The official core of XPath functions.
592  */
593 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
594 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
595 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
596 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
597 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
598 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
599 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
600 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
601 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
602 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
603 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
604 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
605 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
606 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
607 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
608 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
609 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
610 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
611 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
612 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
613 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
614 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
615 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
616 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
617 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
618 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
619 
620 /**
621  * Really internal functions
622  */
623 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
624 
625 #ifdef __cplusplus
626 }
627 #endif
628 
629 #endif /* LIBXML_XPATH_ENABLED */
630 #endif /* ! __XML_XPATH_INTERNALS_H__ */
631