632 lines · 18.9 KB · C
RawDownload
/* * 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 __cplusplusextern "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);					\    if (ctxt->valueNr < ctxt->valueFrame + (x))				\        XP_ERROR(XPATH_STACK_ERROR); /** * 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_ENABLEDXMLPUBFUN 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);

Lines 1–500 of 632.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t