| /* | 
 |  * Summary: internal interfaces for XML Path Language implementation | 
 |  * Description: internal interfaces for XML Path Language implementation | 
 |  *              used to build new modules on top of XPath like XPointer and | 
 |  *              XSLT | 
 |  * | 
 |  * Copy: See Copyright for the status of this software. | 
 |  * | 
 |  * Author: Daniel Veillard | 
 |  */ | 
 |  | 
 | #ifndef __XML_XPATH_INTERNALS_H__ | 
 | #define __XML_XPATH_INTERNALS_H__ | 
 |  | 
 | #include <libxml/xmlversion.h> | 
 | #include <libxml/xpath.h> | 
 |  | 
 | #ifdef LIBXML_XPATH_ENABLED | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |  | 
 | /************************************************************************ | 
 |  *									* | 
 |  *			Helpers						* | 
 |  *									* | 
 |  ************************************************************************/ | 
 |  | 
 | /* | 
 |  * Many of these macros may later turn into functions. They | 
 |  * shouldn't be used in #ifdef's preprocessor instructions. | 
 |  */ | 
 | /** | 
 |  * xmlXPathSetError: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @err:  an xmlXPathError code | 
 |  * | 
 |  * Raises an error. | 
 |  */ | 
 | #define xmlXPathSetError(ctxt, err)					\ | 
 |     { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));			\ | 
 |       if ((ctxt) != NULL) (ctxt)->error = (err); } | 
 |  | 
 | /** | 
 |  * xmlXPathSetArityError: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Raises an XPATH_INVALID_ARITY error. | 
 |  */ | 
 | #define xmlXPathSetArityError(ctxt)					\ | 
 |     xmlXPathSetError((ctxt), XPATH_INVALID_ARITY) | 
 |  | 
 | /** | 
 |  * xmlXPathSetTypeError: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Raises an XPATH_INVALID_TYPE error. | 
 |  */ | 
 | #define xmlXPathSetTypeError(ctxt)					\ | 
 |     xmlXPathSetError((ctxt), XPATH_INVALID_TYPE) | 
 |  | 
 | /** | 
 |  * xmlXPathGetError: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Get the error code of an XPath context. | 
 |  * | 
 |  * Returns the context error. | 
 |  */ | 
 | #define xmlXPathGetError(ctxt)	  ((ctxt)->error) | 
 |  | 
 | /** | 
 |  * xmlXPathCheckError: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Check if an XPath error was raised. | 
 |  * | 
 |  * Returns true if an error has been raised, false otherwise. | 
 |  */ | 
 | #define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK) | 
 |  | 
 | /** | 
 |  * xmlXPathGetDocument: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Get the document of an XPath context. | 
 |  * | 
 |  * Returns the context document. | 
 |  */ | 
 | #define xmlXPathGetDocument(ctxt)	((ctxt)->context->doc) | 
 |  | 
 | /** | 
 |  * xmlXPathGetContextNode: | 
 |  * @ctxt: an XPath parser context | 
 |  * | 
 |  * Get the context node of an XPath context. | 
 |  * | 
 |  * Returns the context node. | 
 |  */ | 
 | #define xmlXPathGetContextNode(ctxt)	((ctxt)->context->node) | 
 |  | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathPopBoolean	(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN double XMLCALL | 
 |     		xmlXPathPopNumber	(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN xmlChar * XMLCALL | 
 |     		xmlXPathPopString	(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 |     		xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void * XMLCALL | 
 |     		xmlXPathPopExternal	(xmlXPathParserContextPtr ctxt); | 
 |  | 
 | /** | 
 |  * xmlXPathReturnBoolean: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @val:  a boolean | 
 |  * | 
 |  * Pushes the boolean @val on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnBoolean(ctxt, val)				\ | 
 |     valuePush((ctxt), xmlXPathNewBoolean(val)) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnTrue: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Pushes true on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnFalse: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Pushes false on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnNumber: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @val:  a double | 
 |  * | 
 |  * Pushes the double @val on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnNumber(ctxt, val)					\ | 
 |     valuePush((ctxt), xmlXPathNewFloat(val)) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnString: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @str:  a string | 
 |  * | 
 |  * Pushes the string @str on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnString(ctxt, str)					\ | 
 |     valuePush((ctxt), xmlXPathWrapString(str)) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnEmptyString: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Pushes an empty string on the stack. | 
 |  */ | 
 | #define xmlXPathReturnEmptyString(ctxt)					\ | 
 |     valuePush((ctxt), xmlXPathNewCString("")) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnNodeSet: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @ns:  a node-set | 
 |  * | 
 |  * Pushes the node-set @ns on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnNodeSet(ctxt, ns)					\ | 
 |     valuePush((ctxt), xmlXPathWrapNodeSet(ns)) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnEmptyNodeSet: | 
 |  * @ctxt:  an XPath parser context | 
 |  * | 
 |  * Pushes an empty node-set on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnEmptyNodeSet(ctxt)				\ | 
 |     valuePush((ctxt), xmlXPathNewNodeSet(NULL)) | 
 |  | 
 | /** | 
 |  * xmlXPathReturnExternal: | 
 |  * @ctxt:  an XPath parser context | 
 |  * @val:  user data | 
 |  * | 
 |  * Pushes user data on the context stack. | 
 |  */ | 
 | #define xmlXPathReturnExternal(ctxt, val)				\ | 
 |     valuePush((ctxt), xmlXPathWrapExternal(val)) | 
 |  | 
 | /** | 
 |  * xmlXPathStackIsNodeSet: | 
 |  * @ctxt: an XPath parser context | 
 |  * | 
 |  * Check if the current value on the XPath stack is a node set or | 
 |  * an XSLT value tree. | 
 |  * | 
 |  * Returns true if the current object on the stack is a node-set. | 
 |  */ | 
 | #define xmlXPathStackIsNodeSet(ctxt)					\ | 
 |     (((ctxt)->value != NULL)						\ | 
 |      && (((ctxt)->value->type == XPATH_NODESET)				\ | 
 |          || ((ctxt)->value->type == XPATH_XSLT_TREE))) | 
 |  | 
 | /** | 
 |  * xmlXPathStackIsExternal: | 
 |  * @ctxt: an XPath parser context | 
 |  * | 
 |  * Checks if the current value on the XPath stack is an external | 
 |  * object. | 
 |  * | 
 |  * Returns true if the current object on the stack is an external | 
 |  * object. | 
 |  */ | 
 | #define xmlXPathStackIsExternal(ctxt)					\ | 
 | 	((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS)) | 
 |  | 
 | /** | 
 |  * xmlXPathEmptyNodeSet: | 
 |  * @ns:  a node-set | 
 |  * | 
 |  * Empties a node-set. | 
 |  */ | 
 | #define xmlXPathEmptyNodeSet(ns)					\ | 
 |     { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; } | 
 |  | 
 | /** | 
 |  * CHECK_ERROR: | 
 |  * | 
 |  * Macro to return from the function if an XPath error was detected. | 
 |  */ | 
 | #define CHECK_ERROR							\ | 
 |     if (ctxt->error != XPATH_EXPRESSION_OK) return | 
 |  | 
 | /** | 
 |  * CHECK_ERROR0: | 
 |  * | 
 |  * Macro to return 0 from the function if an XPath error was detected. | 
 |  */ | 
 | #define CHECK_ERROR0							\ | 
 |     if (ctxt->error != XPATH_EXPRESSION_OK) return(0) | 
 |  | 
 | /** | 
 |  * XP_ERROR: | 
 |  * @X:  the error code | 
 |  * | 
 |  * Macro to raise an XPath error and return. | 
 |  */ | 
 | #define XP_ERROR(X)							\ | 
 |     { xmlXPathErr(ctxt, X); return; } | 
 |  | 
 | /** | 
 |  * XP_ERROR0: | 
 |  * @X:  the error code | 
 |  * | 
 |  * Macro to raise an XPath error and return 0. | 
 |  */ | 
 | #define XP_ERROR0(X)							\ | 
 |     { xmlXPathErr(ctxt, X); return(0); } | 
 |  | 
 | /** | 
 |  * CHECK_TYPE: | 
 |  * @typeval:  the XPath type | 
 |  * | 
 |  * Macro to check that the value on top of the XPath stack is of a given | 
 |  * type. | 
 |  */ | 
 | #define CHECK_TYPE(typeval)						\ | 
 |     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\ | 
 |         XP_ERROR(XPATH_INVALID_TYPE) | 
 |  | 
 | /** | 
 |  * CHECK_TYPE0: | 
 |  * @typeval:  the XPath type | 
 |  * | 
 |  * Macro to check that the value on top of the XPath stack is of a given | 
 |  * type. Return(0) in case of failure | 
 |  */ | 
 | #define CHECK_TYPE0(typeval)						\ | 
 |     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\ | 
 |         XP_ERROR0(XPATH_INVALID_TYPE) | 
 |  | 
 | /** | 
 |  * CHECK_ARITY: | 
 |  * @x:  the number of expected args | 
 |  * | 
 |  * Macro to check that the number of args passed to an XPath function matches. | 
 |  */ | 
 | #define CHECK_ARITY(x)							\ | 
 |     if (ctxt == NULL) return;						\ | 
 |     if (nargs != (x))							\ | 
 |         XP_ERROR(XPATH_INVALID_ARITY); | 
 |  | 
 | /** | 
 |  * CAST_TO_STRING: | 
 |  * | 
 |  * Macro to try to cast the value on the top of the XPath stack to a string. | 
 |  */ | 
 | #define CAST_TO_STRING							\ | 
 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\ | 
 |         xmlXPathStringFunction(ctxt, 1); | 
 |  | 
 | /** | 
 |  * CAST_TO_NUMBER: | 
 |  * | 
 |  * Macro to try to cast the value on the top of the XPath stack to a number. | 
 |  */ | 
 | #define CAST_TO_NUMBER							\ | 
 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\ | 
 |         xmlXPathNumberFunction(ctxt, 1); | 
 |  | 
 | /** | 
 |  * CAST_TO_BOOLEAN: | 
 |  * | 
 |  * Macro to try to cast the value on the top of the XPath stack to a boolean. | 
 |  */ | 
 | #define CAST_TO_BOOLEAN							\ | 
 |     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\ | 
 |         xmlXPathBooleanFunction(ctxt, 1); | 
 |  | 
 | /* | 
 |  * Variable Lookup forwarding. | 
 |  */ | 
 |  | 
 | XMLPUBFUN void XMLCALL | 
 | 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt, | 
 | 					 xmlXPathVariableLookupFunc f, | 
 | 					 void *data); | 
 |  | 
 | /* | 
 |  * Function Lookup forwarding. | 
 |  */ | 
 |  | 
 | XMLPUBFUN void XMLCALL | 
 | 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt, | 
 | 					 xmlXPathFuncLookupFunc f, | 
 | 					 void *funcCtxt); | 
 |  | 
 | /* | 
 |  * Error reporting. | 
 |  */ | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPatherror	(xmlXPathParserContextPtr ctxt, | 
 | 				 const char *file, | 
 | 				 int line, | 
 | 				 int no); | 
 |  | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathErr	(xmlXPathParserContextPtr ctxt, | 
 | 				 int error); | 
 |  | 
 | #ifdef LIBXML_DEBUG_ENABLED | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathDebugDumpObject	(FILE *output, | 
 | 					 xmlXPathObjectPtr cur, | 
 | 					 int depth); | 
 | XMLPUBFUN void XMLCALL | 
 | 	    xmlXPathDebugDumpCompExpr(FILE *output, | 
 | 					 xmlXPathCompExprPtr comp, | 
 | 					 int depth); | 
 | #endif | 
 | /** | 
 |  * NodeSet handling. | 
 |  */ | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathNodeSetContains		(xmlNodeSetPtr cur, | 
 | 						 xmlNodePtr val); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathDifference		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathIntersection		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 |  | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathDistinct		(xmlNodeSetPtr nodes); | 
 |  | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 |  | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes, | 
 | 						 xmlNodePtr node); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathNodeLeading		(xmlNodeSetPtr nodes, | 
 | 						 xmlNodePtr node); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathLeading			(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 |  | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes, | 
 | 						 xmlNodePtr node); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes, | 
 | 						 xmlNodePtr node); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathTrailing		(xmlNodeSetPtr nodes1, | 
 | 						 xmlNodeSetPtr nodes2); | 
 |  | 
 |  | 
 | /** | 
 |  * Extending a context. | 
 |  */ | 
 |  | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *prefix, | 
 | 						 const xmlChar *ns_uri); | 
 | XMLPUBFUN const xmlChar * XMLCALL | 
 | 		xmlXPathNsLookup		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *prefix); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt); | 
 |  | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 xmlXPathFunction f); | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 const xmlChar *ns_uri, | 
 | 						 xmlXPathFunction f); | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 xmlXPathObjectPtr value); | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 const xmlChar *ns_uri, | 
 | 						 xmlXPathObjectPtr value); | 
 | XMLPUBFUN xmlXPathFunction XMLCALL | 
 | 		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name); | 
 | XMLPUBFUN xmlXPathFunction XMLCALL | 
 | 		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 const xmlChar *ns_uri); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt, | 
 | 						 const xmlChar *name, | 
 | 						 const xmlChar *ns_uri); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt); | 
 |  | 
 | /** | 
 |  * Utilities to extend XPath. | 
 |  */ | 
 | XMLPUBFUN xmlXPathParserContextPtr XMLCALL | 
 | 		  xmlXPathNewParserContext	(const xmlChar *str, | 
 | 			  			 xmlXPathContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt); | 
 |  | 
 | /* TODO: remap to xmlXPathValuePop and Push. */ | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		valuePop			(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN int XMLCALL | 
 | 		valuePush			(xmlXPathParserContextPtr ctxt, | 
 | 					 	 xmlXPathObjectPtr value); | 
 |  | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewString		(const xmlChar *val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewCString		(const char *val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathWrapString		(xmlChar *val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathWrapCString		(char * val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewFloat		(double val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewBoolean		(int val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewNodeSet		(xmlNodePtr val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewValueTree		(xmlNodePtr val); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur, | 
 | 						 xmlNodePtr val); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur, | 
 | 						 xmlNodePtr val); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur, | 
 | 						 xmlNodePtr node, | 
 | 						 xmlNsPtr ns); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetSort		(xmlNodeSetPtr set); | 
 |  | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathRoot			(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN xmlChar * XMLCALL | 
 | 		xmlXPathParseName		(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN xmlChar * XMLCALL | 
 | 		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt); | 
 |  | 
 | /* | 
 |  * Existing functions. | 
 |  */ | 
 | XMLPUBFUN double XMLCALL | 
 | 		xmlXPathStringEvalNumber	(const xmlChar *str); | 
 | XMLPUBFUN int XMLCALL | 
 | 		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, | 
 | 						 xmlXPathObjectPtr res); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt); | 
 | XMLPUBFUN xmlNodeSetPtr XMLCALL | 
 | 		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1, | 
 | 						 xmlNodeSetPtr val2); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetDel		(xmlNodeSetPtr cur, | 
 | 						 xmlNodePtr val); | 
 | XMLPUBFUN void XMLCALL | 
 | 		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur, | 
 | 						 int val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathNewNodeSetList		(xmlNodeSetPtr val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathWrapNodeSet		(xmlNodeSetPtr val); | 
 | XMLPUBFUN xmlXPathObjectPtr XMLCALL | 
 | 		xmlXPathWrapExternal		(void *val); | 
 |  | 
 | XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict); | 
 | XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt); | 
 | XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt); | 
 |  | 
 | XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name); | 
 |  | 
 | /* | 
 |  * Some of the axis navigation routines. | 
 |  */ | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, | 
 | 			xmlNodePtr cur); | 
 | /* | 
 |  * The official core of XPath functions. | 
 |  */ | 
 | XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 | XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs); | 
 |  | 
 | /** | 
 |  * Really internal functions | 
 |  */ | 
 | XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns); | 
 |  | 
 | #ifdef __cplusplus | 
 | } | 
 | #endif | 
 |  | 
 | #endif /* LIBXML_XPATH_ENABLED */ | 
 | #endif /* ! __XML_XPATH_INTERNALS_H__ */ |