* 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: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.

/if not defined(XML_XPATH_INTERNALS_H__)
/define XML_XPATH_INTERNALS_H__

/include "libxmlrpg/xmlversion"

/if defined(LIBXML_XPATH_ENABLED)

/include "libxmlrpg/xmlTypesC"
/include "libxmlrpg/xpath"

************************************************************************
*                                                                      *
*                            Helpers                                   *
*                                                                      *
************************************************************************

* Many of these macros may later turn into functions. They
* shouldn't be used in #ifdef's preprocessor instructions.

d xmlXPathPopBoolean… d pr extproc('xmlXPathPopBoolean') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathPopNumber… d pr extproc('xmlXPathPopNumber') d like(xmlCdouble) d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathPopString… d pr * extproc('xmlXPathPopString') xmlChar * d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathPopNodeSet… d pr extproc('xmlXPathPopNodeSet') d like(xmlNodeSetPtr) d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathPopExternal… d pr * extproc('xmlXPathPopExternal') void * d ctxt value like(xmlXPathParserContextPtr)

* Variable Lookup forwarding.

d xmlXPathRegisterVariableLookup… d pr extproc( d 'xmlXPathRegisterVariableLookup') d ctxt value like(xmlXPathContextPtr) d f value d like(xmlXPathVariableLookupFunc) d data * value void *

* Function Lookup forwarding.

d xmlXPathRegisterFuncLookup… d pr extproc('xmlXPathRegisterFuncLookup') d ctxt value like(xmlXPathContextPtr) d f value like(xmlXPathFuncLookupFunc) d funcCtxt * value void *

* Error reporting.
* Note this procedure is renamed in RPG to avoid character case clash with
*   data type xmlXPathError.

d xmlXPathReportError… d pr extproc('xmlXPatherror') d ctxt value like(xmlXPathParserContextPtr) d file * value options(*string) const char * d line value like(xmlCint) d no value like(xmlCint)

d xmlXPathErr pr extproc('xmlXPathErr') d ctxt value like(xmlXPathParserContextPtr) d error value like(xmlCint)

/if defined(LIBXML_DEBUG_ENABLED)

d xmlXPathDebugDumpObject… d pr extproc('xmlXPathDebugDumpObject') d output * value FILE * d cur value like(xmlXPathObjectPtr) d depth value like(xmlCint)

d xmlXPathDebugDumpCompExpr… d pr extproc('xmlXPathDebugDumpCompExpr') d output * value FILE * d comp value like(xmlXPathCompExprPtr) d depth value like(xmlCint)

/endif

* NodeSet handling.

d xmlXPathNodeSetContains… d pr extproc('xmlXPathNodeSetContains') d like(xmlCint) d cur value like(xmlNodeSetPtr) d val value like(xmlNodePtr)

d xmlXPathDifference… d pr extproc('xmlXPathDifference') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathIntersection… d pr extproc('xmlXPathIntersection') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathDistinctSorted… d pr extproc('xmlXPathDistinctSorted') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr)

d xmlXPathDistinct… d pr extproc('xmlXPathDistinct') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr)

d xmlXPathHasSameNodes… d pr extproc('xmlXPathHasSameNodes') d like(xmlCint) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathNodeLeadingSorted… d pr extproc('xmlXPathNodeLeadingSorted') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr) d node value like(xmlNodePtr)

d xmlXPathLeadingSorted… d pr extproc('xmlXPathLeadingSorted') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathNodeLeading… d pr extproc('xmlXPathNodeLeading') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr) d node value like(xmlNodePtr)

d xmlXPathLeading… d pr extproc('xmlXPathLeading') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathNodeTrailingSorted… d pr extproc('xmlXPathNodeTrailingSorted') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr) d node value like(xmlNodePtr)

d xmlXPathTrailingSorted… d pr extproc('xmlXPathTrailingSorted') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

d xmlXPathNodeTrailing… d pr extproc('xmlXPathNodeTrailing') d like(xmlNodeSetPtr) d nodes value like(xmlNodeSetPtr) d node value like(xmlNodePtr)

d xmlXPathTrailing… d pr extproc('xmlXPathTrailing') d like(xmlNodeSetPtr) d nodes1 value like(xmlNodeSetPtr) d nodes2 value like(xmlNodeSetPtr)

* Extending a context.

d xmlXPathRegisterNs… d pr extproc('xmlXPathRegisterNs') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d prefix * value options(*string) const xmlChar * d ns_uri * value options(*string) const xmlChar *

d xmlXPathNsLookup… d pr * extproc('xmlXPathNsLookup') const xmlChar * d ctxt value like(xmlXPathContextPtr) d prefix * value options(*string) const xmlChar *

d xmlXPathRegisteredNsCleanup… d pr extproc( d 'xmlXPathRegisteredNsCleanup') d ctxt value like(xmlXPathContextPtr)

d xmlXPathRegisterFunc… d pr extproc('xmlXPathRegisterFunc') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d f value like(xmlXPathFunction)

d xmlXPathRegisterFuncNS… d pr extproc('xmlXPathRegisterFuncNS') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d ns_uri * value options(*string) const xmlChar * d f value like(xmlXPathFunction)

d xmlXPathRegisterVariable… d pr extproc('xmlXPathRegisterVariable') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d value value like(xmlXPathObjectPtr)

d xmlXPathRegisterVariableNS… d pr extproc('xmlXPathRegisterVariableNS') d like(xmlCint) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d ns_uri * value options(*string) const xmlChar * d value value like(xmlXPathObjectPtr)

d xmlXPathFunctionLookup… d pr extproc('xmlXPathFunctionLookup') d like(xmlXPathFunction) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar *

d xmlXPathFunctionLookupNS… d pr extproc('xmlXPathFunctionLookupNS') d like(xmlXPathFunction) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d ns_uri * value options(*string) const xmlChar *

d xmlXPathRegisteredFuncsCleanup… d pr extproc( d 'xmlXPathRegisteredFuncsCleanup') d ctxt value like(xmlXPathContextPtr)

d xmlXPathVariableLookup… d pr extproc('xmlXPathVariableLookup') d like(xmlXPathObjectPtr) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar *

d xmlXPathVariableLookupNS… d pr extproc('xmlXPathVariableLookupNS') d like(xmlXPathObjectPtr) d ctxt value like(xmlXPathContextPtr) d name * value options(*string) const xmlChar * d ns_uri * value options(*string) const xmlChar *

d xmlXPathRegisteredVariablesCleanup… d pr extproc( d 'xmlXPathRegisteredVariablesCleanup') d ctxt value like(xmlXPathContextPtr)

* Utilities to extend XPath.

d xmlXPathNewParserContext… d pr extproc('xmlXPathNewParserContext') d like(xmlXPathParserContextPtr) d str * value options(*string) const xmlChar * d ctxt value like(xmlXPathContextPtr)

d xmlXPathFreeParserContext… d pr extproc('xmlXPathFreeParserContext') d ctxt value like(xmlXPathParserContextPtr)

* TODO: remap to xmlXPathValuePop and Push.

d valuePop pr extproc('valuePop') d like(xmlXPathObjectPtr) d ctxt value like(xmlXPathParserContextPtr)

d valuePush pr extproc('valuePush') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr) d value value like(xmlXPathObjectPtr)

d xmlXPathNewString… d pr extproc('xmlXPathNewString') d like(xmlXPathObjectPtr) d val * value options(*string) const xmlChar *

d xmlXPathNewCString… d pr extproc('xmlXPathNewCString') d like(xmlXPathObjectPtr) d val * value options(*string) const char *

d xmlXPathWrapString… d pr extproc('xmlXPathWrapString') d like(xmlXPathObjectPtr) d val * value options(*string) xmlChar *

d xmlXPathWrapCString… d pr extproc('xmlXPathWrapCString') d like(xmlXPathObjectPtr) d val * value options(*string) char *

d xmlXPathNewFloat… d pr extproc('xmlXPathNewFloat') d like(xmlXPathObjectPtr) d val value like(xmlCdouble)

d xmlXPathNewBoolean… d pr extproc('xmlXPathNewBoolean') d like(xmlXPathObjectPtr) d val value like(xmlCint)

d xmlXPathNewNodeSet… d pr extproc('xmlXPathNewNodeSet') d like(xmlXPathObjectPtr) d val value like(xmlNodePtr)

d xmlXPathNewValueTree… d pr extproc('xmlXPathNewValueTree') d like(xmlXPathObjectPtr) d val value like(xmlNodePtr)

d xmlXPathNodeSetAdd… d pr extproc('xmlXPathNodeSetAdd') d like(xmlCint) d cur value like(xmlNodeSetPtr) d val value like(xmlNodePtr)

d xmlXPathNodeSetAddUnique… d pr extproc('xmlXPathNodeSetAddUnique') d like(xmlCint) d cur value like(xmlNodeSetPtr) d val value like(xmlNodePtr)

d xmlXPathNodeSetAddNs… d pr extproc('xmlXPathNodeSetAddNs') d like(xmlCint) d cur value like(xmlNodeSetPtr) d node value like(xmlNodePtr) d ns value like(xmlNsPtr)

d xmlXPathNodeSetSort… d pr extproc('xmlXPathNodeSetSort') d set value like(xmlNodeSetPtr)

d xmlXPathRoot pr extproc('xmlXPathRoot') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathEvalExpr… d pr extproc('xmlXPathEvalExpr') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathParseName… d pr * extproc('xmlXPathParseName') xmlChar * d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathParseNCName… d pr * extproc('xmlXPathParseNCName') xmlChar * d ctxt value like(xmlXPathParserContextPtr)

* Existing functions.

d xmlXPathStringEvalNumber… d pr extproc('xmlXPathStringEvalNumber') d like(xmlCdouble) d str * value options(*string) const xmlChar *

d xmlXPathEvaluatePredicateResult… d pr extproc( d 'xmlXPathEvaluatePredicateResult') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr) d res value like(xmlXPathObjectPtr)

d xmlXPathRegisterAllFunctions… d pr extproc( d 'xmlXPathRegisterAllFunctions') d ctxt value like(xmlXPathContextPtr)

d xmlXPathNodeSetMerge… d pr extproc('xmlXPathNodeSetMerge') d like(xmlNodeSetPtr) d val1 value like(xmlNodeSetPtr) d val2 value like(xmlNodeSetPtr)

d xmlXPathNodeSetDel… d pr extproc('xmlXPathNodeSetDel') d cur value like(xmlNodeSetPtr) d val value like(xmlNodePtr)

d xmlXPathNodeSetRemove… d pr extproc('xmlXPathNodeSetRemove') d cur value like(xmlNodeSetPtr) d val value like(xmlCint)

d xmlXPathNewNodeSetList… d pr extproc('xmlXPathNewNodeSetList') d like(xmlXPathObjectPtr) d val value like(xmlNodeSetPtr)

d xmlXPathWrapNodeSet… d pr extproc('xmlXPathWrapNodeSet') d like(xmlXPathObjectPtr) d val value like(xmlNodeSetPtr)

d xmlXPathWrapExternal… d pr extproc('xmlXPathWrapExternal') d like(xmlXPathObjectPtr) d val * value void *

d xmlXPathEqualValues… d pr extproc('xmlXPathEqualValues') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathNotEqualValues… d pr extproc('xmlXPathNotEqualValues') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathCompareValues… d pr extproc('xmlXPathCompareValues') d like(xmlCint) d ctxt value like(xmlXPathParserContextPtr) d inf value like(xmlCint) d strict value like(xmlCint)

d xmlXPathValueFlipSign… d pr extproc('xmlXPathValueFlipSign') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathAddValues… d pr extproc('xmlXPathAddValues') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathSubValues… d pr extproc('xmlXPathSubValues') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathMultValues… d pr extproc('xmlXPathMultValues') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathDivValues… d pr extproc('xmlXPathDivValues') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathModValues… d pr extproc('xmlXPathModValues') d ctxt value like(xmlXPathParserContextPtr)

d xmlXPathIsNodeType… d pr extproc('xmlXPathIsNodeType') d like(xmlCint) d name * value options(*string) const xmlChar *

* Some of the axis navigation routines.

d xmlXPathNextSelf… d pr extproc('xmlXPathNextSelf') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextChild… d pr extproc('xmlXPathNextChild') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextDescendant… d pr extproc('xmlXPathNextDescendant') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextDescendantOrSelf… d pr extproc( d 'xmlXPathNextDescendantOrSelf') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextParent… d pr extproc('xmlXPathNextParent') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextAncestorOrSelf… d pr extproc('xmlXPathNextAncestorOrSelf') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextFollowingSibling… d pr extproc( d 'xmlXPathNextFollowingSibling') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextFollowing… d pr extproc('xmlXPathNextFollowing') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextNamespace… d pr extproc('xmlXPathNextNamespace') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextAttribute… d pr extproc('xmlXPathNextAttribute') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextPreceding… d pr extproc('xmlXPathNextPreceding') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextAncestor… d pr extproc('xmlXPathNextAncestor') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

d xmlXPathNextPrecedingSibling… d pr extproc( d 'xmlXPathNextPrecedingSibling') d like(xmlNodePtr) d ctxt value like(xmlXPathParserContextPtr) d cur value like(xmlNodePtr)

* The official core of XPath functions.

d xmlXPathLastFunction… d pr extproc('xmlXPathLastFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathPositionFunction… d pr extproc('xmlXPathPositionFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathCountFunction… d pr extproc('xmlXPathCountFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathIdFunction… d pr extproc('xmlXPathIdFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathLocalNameFunction… d pr extproc('xmlXPathLocalNameFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathNamespaceURIFunction… d pr extproc( d 'xmlXPathNamespaceURIFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathStringFunction… d pr extproc('xmlXPathStringFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathStringLengthFunction… d pr extproc( d 'xmlXPathStringLengthFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathConcatFunction… d pr extproc('xmlXPathConcatFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathContainsFunction… d pr extproc('xmlXPathContainsFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathStartsWithFunction… d pr extproc('xmlXPathStartsWithFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathSubstringFunction… d pr extproc('xmlXPathSubstringFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathSubstringBeforeFunction… d pr extproc( d 'xmlXPathSubstringBeforeFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathSubstringAfterFunction… d pr extproc( d 'xmlXPathSubstringAfterFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathNormalizeFunction… d pr extproc('xmlXPathNormalizeFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathTranslateFunction… d pr extproc('xmlXPathTranslateFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathNotFunction… d pr extproc('xmlXPathNotFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathTrueFunction… d pr extproc('xmlXPathTrueFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathFalseFunction… d pr extproc('xmlXPathFalseFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathLangFunction… d pr extproc('xmlXPathLangFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathNumberFunction… d pr extproc('xmlXPathNumberFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathSumFunction… d pr extproc('xmlXPathSumFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathFloorFunction… d pr extproc('xmlXPathFloorFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathCeilingFunction… d pr extproc('xmlXPathCeilingFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathRoundFunction… d pr extproc('xmlXPathRoundFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

d xmlXPathBooleanFunction… d pr extproc('xmlXPathBooleanFunction') d ctxt value like(xmlXPathParserContextPtr) d nargs value like(xmlCint)

* Really internal functions

d xmlXPathNodeSetFreeNs… d pr extproc('xmlXPathNodeSetFreeNs') d ns value like(xmlNsPtr)

/endif                                                                    LIBXML_XPATH_ENABLED
/endif                                                                    XPATH_INTERNALS_H__