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     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