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     if (ctxt->valueNr < ctxt->valueFrame + (x))				\
301         XP_ERROR(XPATH_STACK_ERROR);
302 
303 /**
304  * CAST_TO_STRING:
305  *
306  * Macro to try to cast the value on the top of the XPath stack to a string.
307  */
308 #define CAST_TO_STRING							\
309     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\
310         xmlXPathStringFunction(ctxt, 1);
311 
312 /**
313  * CAST_TO_NUMBER:
314  *
315  * Macro to try to cast the value on the top of the XPath stack to a number.
316  */
317 #define CAST_TO_NUMBER							\
318     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\
319         xmlXPathNumberFunction(ctxt, 1);
320 
321 /**
322  * CAST_TO_BOOLEAN:
323  *
324  * Macro to try to cast the value on the top of the XPath stack to a boolean.
325  */
326 #define CAST_TO_BOOLEAN							\
327     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\
328         xmlXPathBooleanFunction(ctxt, 1);
329 
330 /*
331  * Variable Lookup forwarding.
332  */
333 
334 XMLPUBFUN void XMLCALL
335 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
336 					 xmlXPathVariableLookupFunc f,
337 					 void *data);
338 
339 /*
340  * Function Lookup forwarding.
341  */
342 
343 XMLPUBFUN void XMLCALL
344 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
345 					 xmlXPathFuncLookupFunc f,
346 					 void *funcCtxt);
347 
348 /*
349  * Error reporting.
350  */
351 XMLPUBFUN void XMLCALL
352 		xmlXPatherror	(xmlXPathParserContextPtr ctxt,
353 				 const char *file,
354 				 int line,
355 				 int no);
356 
357 XMLPUBFUN void XMLCALL
358 		xmlXPathErr	(xmlXPathParserContextPtr ctxt,
359 				 int error);
360 
361 #ifdef LIBXML_DEBUG_ENABLED
362 XMLPUBFUN void XMLCALL
363 		xmlXPathDebugDumpObject	(FILE *output,
364 					 xmlXPathObjectPtr cur,
365 					 int depth);
366 XMLPUBFUN void XMLCALL
367 	    xmlXPathDebugDumpCompExpr(FILE *output,
368 					 xmlXPathCompExprPtr comp,
369 					 int depth);
370 #endif
371 /**
372  * NodeSet handling.
373  */
374 XMLPUBFUN int XMLCALL
375 		xmlXPathNodeSetContains		(xmlNodeSetPtr cur,
376 						 xmlNodePtr val);
377 XMLPUBFUN xmlNodeSetPtr XMLCALL
378 		xmlXPathDifference		(xmlNodeSetPtr nodes1,
379 						 xmlNodeSetPtr nodes2);
380 XMLPUBFUN xmlNodeSetPtr XMLCALL
381 		xmlXPathIntersection		(xmlNodeSetPtr nodes1,
382 						 xmlNodeSetPtr nodes2);
383 
384 XMLPUBFUN xmlNodeSetPtr XMLCALL
385 		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes);
386 XMLPUBFUN xmlNodeSetPtr XMLCALL
387 		xmlXPathDistinct		(xmlNodeSetPtr nodes);
388 
389 XMLPUBFUN int XMLCALL
390 		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1,
391 						 xmlNodeSetPtr nodes2);
392 
393 XMLPUBFUN xmlNodeSetPtr XMLCALL
394 		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes,
395 						 xmlNodePtr node);
396 XMLPUBFUN xmlNodeSetPtr XMLCALL
397 		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1,
398 						 xmlNodeSetPtr nodes2);
399 XMLPUBFUN xmlNodeSetPtr XMLCALL
400 		xmlXPathNodeLeading		(xmlNodeSetPtr nodes,
401 						 xmlNodePtr node);
402 XMLPUBFUN xmlNodeSetPtr XMLCALL
403 		xmlXPathLeading			(xmlNodeSetPtr nodes1,
404 						 xmlNodeSetPtr nodes2);
405 
406 XMLPUBFUN xmlNodeSetPtr XMLCALL
407 		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes,
408 						 xmlNodePtr node);
409 XMLPUBFUN xmlNodeSetPtr XMLCALL
410 		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1,
411 						 xmlNodeSetPtr nodes2);
412 XMLPUBFUN xmlNodeSetPtr XMLCALL
413 		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes,
414 						 xmlNodePtr node);
415 XMLPUBFUN xmlNodeSetPtr XMLCALL
416 		xmlXPathTrailing		(xmlNodeSetPtr nodes1,
417 						 xmlNodeSetPtr nodes2);
418 
419 
420 /**
421  * Extending a context.
422  */
423 
424 XMLPUBFUN int XMLCALL
425 		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt,
426 						 const xmlChar *prefix,
427 						 const xmlChar *ns_uri);
428 XMLPUBFUN const xmlChar * XMLCALL
429 		xmlXPathNsLookup		(xmlXPathContextPtr ctxt,
430 						 const xmlChar *prefix);
431 XMLPUBFUN void XMLCALL
432 		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt);
433 
434 XMLPUBFUN int XMLCALL
435 		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt,
436 						 const xmlChar *name,
437 						 xmlXPathFunction f);
438 XMLPUBFUN int XMLCALL
439 		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt,
440 						 const xmlChar *name,
441 						 const xmlChar *ns_uri,
442 						 xmlXPathFunction f);
443 XMLPUBFUN int XMLCALL
444 		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt,
445 						 const xmlChar *name,
446 						 xmlXPathObjectPtr value);
447 XMLPUBFUN int XMLCALL
448 		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt,
449 						 const xmlChar *name,
450 						 const xmlChar *ns_uri,
451 						 xmlXPathObjectPtr value);
452 XMLPUBFUN xmlXPathFunction XMLCALL
453 		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt,
454 						 const xmlChar *name);
455 XMLPUBFUN xmlXPathFunction XMLCALL
456 		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt,
457 						 const xmlChar *name,
458 						 const xmlChar *ns_uri);
459 XMLPUBFUN void XMLCALL
460 		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt);
461 XMLPUBFUN xmlXPathObjectPtr XMLCALL
462 		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt,
463 						 const xmlChar *name);
464 XMLPUBFUN xmlXPathObjectPtr XMLCALL
465 		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt,
466 						 const xmlChar *name,
467 						 const xmlChar *ns_uri);
468 XMLPUBFUN void XMLCALL
469 		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
470 
471 /**
472  * Utilities to extend XPath.
473  */
474 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
475 		  xmlXPathNewParserContext	(const xmlChar *str,
476 						 xmlXPathContextPtr ctxt);
477 XMLPUBFUN void XMLCALL
478 		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt);
479 
480 /* TODO: remap to xmlXPathValuePop and Push. */
481 XMLPUBFUN xmlXPathObjectPtr XMLCALL
482 		valuePop			(xmlXPathParserContextPtr ctxt);
483 XMLPUBFUN int XMLCALL
484 		valuePush			(xmlXPathParserContextPtr ctxt,
485 						 xmlXPathObjectPtr value);
486 
487 XMLPUBFUN xmlXPathObjectPtr XMLCALL
488 		xmlXPathNewString		(const xmlChar *val);
489 XMLPUBFUN xmlXPathObjectPtr XMLCALL
490 		xmlXPathNewCString		(const char *val);
491 XMLPUBFUN xmlXPathObjectPtr XMLCALL
492 		xmlXPathWrapString		(xmlChar *val);
493 XMLPUBFUN xmlXPathObjectPtr XMLCALL
494 		xmlXPathWrapCString		(char * val);
495 XMLPUBFUN xmlXPathObjectPtr XMLCALL
496 		xmlXPathNewFloat		(double val);
497 XMLPUBFUN xmlXPathObjectPtr XMLCALL
498 		xmlXPathNewBoolean		(int val);
499 XMLPUBFUN xmlXPathObjectPtr XMLCALL
500 		xmlXPathNewNodeSet		(xmlNodePtr val);
501 XMLPUBFUN xmlXPathObjectPtr XMLCALL
502 		xmlXPathNewValueTree		(xmlNodePtr val);
503 XMLPUBFUN int XMLCALL
504 		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur,
505 						 xmlNodePtr val);
506 XMLPUBFUN int XMLCALL
507 		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur,
508 						 xmlNodePtr val);
509 XMLPUBFUN int XMLCALL
510 		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur,
511 						 xmlNodePtr node,
512 						 xmlNsPtr ns);
513 XMLPUBFUN void XMLCALL
514 		xmlXPathNodeSetSort		(xmlNodeSetPtr set);
515 
516 XMLPUBFUN void XMLCALL
517 		xmlXPathRoot			(xmlXPathParserContextPtr ctxt);
518 XMLPUBFUN void XMLCALL
519 		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt);
520 XMLPUBFUN xmlChar * XMLCALL
521 		xmlXPathParseName		(xmlXPathParserContextPtr ctxt);
522 XMLPUBFUN xmlChar * XMLCALL
523 		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt);
524 
525 /*
526  * Existing functions.
527  */
528 XMLPUBFUN double XMLCALL
529 		xmlXPathStringEvalNumber	(const xmlChar *str);
530 XMLPUBFUN int XMLCALL
531 		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
532 						 xmlXPathObjectPtr res);
533 XMLPUBFUN void XMLCALL
534 		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt);
535 XMLPUBFUN xmlNodeSetPtr XMLCALL
536 		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1,
537 						 xmlNodeSetPtr val2);
538 XMLPUBFUN void XMLCALL
539 		xmlXPathNodeSetDel		(xmlNodeSetPtr cur,
540 						 xmlNodePtr val);
541 XMLPUBFUN void XMLCALL
542 		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur,
543 						 int val);
544 XMLPUBFUN xmlXPathObjectPtr XMLCALL
545 		xmlXPathNewNodeSetList		(xmlNodeSetPtr val);
546 XMLPUBFUN xmlXPathObjectPtr XMLCALL
547 		xmlXPathWrapNodeSet		(xmlNodeSetPtr val);
548 XMLPUBFUN xmlXPathObjectPtr XMLCALL
549 		xmlXPathWrapExternal		(void *val);
550 
551 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
552 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
553 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
554 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
555 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
556 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
557 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
558 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
559 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
560 
561 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
562 
563 /*
564  * Some of the axis navigation routines.
565  */
566 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
567 			xmlNodePtr cur);
568 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
569 			xmlNodePtr cur);
570 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
571 			xmlNodePtr cur);
572 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
573 			xmlNodePtr cur);
574 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
575 			xmlNodePtr cur);
576 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
577 			xmlNodePtr cur);
578 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
579 			xmlNodePtr cur);
580 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
581 			xmlNodePtr cur);
582 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
583 			xmlNodePtr cur);
584 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
585 			xmlNodePtr cur);
586 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
587 			xmlNodePtr cur);
588 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
589 			xmlNodePtr cur);
590 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
591 			xmlNodePtr cur);
592 /*
593  * The official core of XPath functions.
594  */
595 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
596 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
597 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
598 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
599 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
600 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
601 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
602 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
603 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
604 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
605 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
606 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
607 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
608 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
609 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
610 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
611 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
612 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
613 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
614 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
615 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
616 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
617 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
618 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
619 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
620 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
621 
622 /**
623  * Really internal functions
624  */
625 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
626 
627 #ifdef __cplusplus
628 }
629 #endif
630 
631 #endif /* LIBXML_XPATH_ENABLED */
632 #endif /* ! __XML_XPATH_INTERNALS_H__ */
633