Home | History | Annotate | Download | only in libxml
      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