/ libxml2 / include / libxml / xpathInternals.h
xpathInternals.h
  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__ */