codekingpro/portable-devtools
115k
1/*2 * Summary: internal interfaces for XML Path Language implementation3 * Description: internal interfaces for XML Path Language implementation4 * used to build new modules on top of XPath like XPointer and5 * XSLT6 *7 * Copy: See Copyright for the status of this software.8 *9 * Author: Daniel Veillard10 */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_ENABLED19 20#ifdef __cplusplus21extern "C" {22#endif23 24/************************************************************************25 * *26 * Helpers *27 * *28 ************************************************************************/29 30/*31 * Many of these macros may later turn into functions. They32 * shouldn't be used in #ifdef's preprocessor instructions.33 */34/**35 * xmlXPathSetError:36 * @ctxt: an XPath parser context37 * @err: an xmlXPathError code38 *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 context48 *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 context57 *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 context66 *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 context76 *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 context86 *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 context96 *97 * Get the context node of an XPath context.98 *99 * Returns the context node.100 */101#define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)102 103XMLPUBFUN int104 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);105XMLPUBFUN double106 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);107XMLPUBFUN xmlChar *108 xmlXPathPopString (xmlXPathParserContextPtr ctxt);109XMLPUBFUN xmlNodeSetPtr110 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);111XMLPUBFUN void *112 xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);113 114/**115 * xmlXPathReturnBoolean:116 * @ctxt: an XPath parser context117 * @val: a boolean118 *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 context127 *128 * Pushes true on the context stack.129 */130#define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)131 132/**133 * xmlXPathReturnFalse:134 * @ctxt: an XPath parser context135 *136 * Pushes false on the context stack.137 */138#define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)139 140/**141 * xmlXPathReturnNumber:142 * @ctxt: an XPath parser context143 * @val: a double144 *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 context153 * @str: a string154 *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 context163 *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 context172 * @ns: a node-set173 *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 context182 *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 context191 * @val: user data192 *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 context201 *202 * Check if the current value on the XPath stack is a node set or203 * 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 context215 *216 * Checks if the current value on the XPath stack is an external217 * object.218 *219 * Returns true if the current object on the stack is an external220 * object.221 */222#define xmlXPathStackIsExternal(ctxt) \223 ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))224 225/**226 * xmlXPathEmptyNodeSet:227 * @ns: a node-set228 *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) return241 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 code253 *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 code262 *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 type271 *272 * Macro to check that the value on top of the XPath stack is of a given273 * 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 type282 *283 * Macro to check that the value on top of the XPath stack is of a given284 * type. Return(0) in case of failure285 */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 args293 *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 334XMLPUBFUN void335 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,336 xmlXPathVariableLookupFunc f,337 void *data);338 339/*340 * Function Lookup forwarding.341 */342 343XMLPUBFUN void344 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,345 xmlXPathFuncLookupFunc f,346 void *funcCtxt);347 348/*349 * Error reporting.350 */351XMLPUBFUN void352 xmlXPatherror (xmlXPathParserContextPtr ctxt,353 const char *file,354 int line,355 int no);356 357XMLPUBFUN void358 xmlXPathErr (xmlXPathParserContextPtr ctxt,359 int error);360 361#ifdef LIBXML_DEBUG_ENABLED362XMLPUBFUN void363 xmlXPathDebugDumpObject (FILE *output,364 xmlXPathObjectPtr cur,365 int depth);366XMLPUBFUN void367 xmlXPathDebugDumpCompExpr(FILE *output,368 xmlXPathCompExprPtr comp,369 int depth);370#endif371/**372 * NodeSet handling.373 */374XMLPUBFUN int375 xmlXPathNodeSetContains (xmlNodeSetPtr cur,376 xmlNodePtr val);377XMLPUBFUN xmlNodeSetPtr378 xmlXPathDifference (xmlNodeSetPtr nodes1,379 xmlNodeSetPtr nodes2);380XMLPUBFUN xmlNodeSetPtr381 xmlXPathIntersection (xmlNodeSetPtr nodes1,382 xmlNodeSetPtr nodes2);383 384XMLPUBFUN xmlNodeSetPtr385 xmlXPathDistinctSorted (xmlNodeSetPtr nodes);386XMLPUBFUN xmlNodeSetPtr387 xmlXPathDistinct (xmlNodeSetPtr nodes);388 389XMLPUBFUN int390 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,391 xmlNodeSetPtr nodes2);392 393XMLPUBFUN xmlNodeSetPtr394 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,395 xmlNodePtr node);396XMLPUBFUN xmlNodeSetPtr397 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,398 xmlNodeSetPtr nodes2);399XMLPUBFUN xmlNodeSetPtr400 xmlXPathNodeLeading (xmlNodeSetPtr nodes,401 xmlNodePtr node);402XMLPUBFUN xmlNodeSetPtr403 xmlXPathLeading (xmlNodeSetPtr nodes1,404 xmlNodeSetPtr nodes2);405 406XMLPUBFUN xmlNodeSetPtr407 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,408 xmlNodePtr node);409XMLPUBFUN xmlNodeSetPtr410 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,411 xmlNodeSetPtr nodes2);412XMLPUBFUN xmlNodeSetPtr413 xmlXPathNodeTrailing (xmlNodeSetPtr nodes,414 xmlNodePtr node);415XMLPUBFUN xmlNodeSetPtr416 xmlXPathTrailing (xmlNodeSetPtr nodes1,417 xmlNodeSetPtr nodes2);418 419 420/**421 * Extending a context.422 */423 424XMLPUBFUN int425 xmlXPathRegisterNs (xmlXPathContextPtr ctxt,426 const xmlChar *prefix,427 const xmlChar *ns_uri);428XMLPUBFUN const xmlChar *429 xmlXPathNsLookup (xmlXPathContextPtr ctxt,430 const xmlChar *prefix);431XMLPUBFUN void432 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);433 434XMLPUBFUN int435 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,436 const xmlChar *name,437 xmlXPathFunction f);438XMLPUBFUN int439 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,440 const xmlChar *name,441 const xmlChar *ns_uri,442 xmlXPathFunction f);443XMLPUBFUN int444 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,445 const xmlChar *name,446 xmlXPathObjectPtr value);447XMLPUBFUN int448 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,449 const xmlChar *name,450 const xmlChar *ns_uri,451 xmlXPathObjectPtr value);452XMLPUBFUN xmlXPathFunction453 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,454 const xmlChar *name);455XMLPUBFUN xmlXPathFunction456 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,457 const xmlChar *name,458 const xmlChar *ns_uri);459XMLPUBFUN void460 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);461XMLPUBFUN xmlXPathObjectPtr462 xmlXPathVariableLookup (xmlXPathContextPtr ctxt,463 const xmlChar *name);464XMLPUBFUN xmlXPathObjectPtr465 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,466 const xmlChar *name,467 const xmlChar *ns_uri);468XMLPUBFUN void469 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);470 471/**472 * Utilities to extend XPath.473 */474XMLPUBFUN xmlXPathParserContextPtr475 xmlXPathNewParserContext (const xmlChar *str,476 xmlXPathContextPtr ctxt);477XMLPUBFUN void478 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);479 480/* TODO: remap to xmlXPathValuePop and Push. */481XMLPUBFUN xmlXPathObjectPtr482 valuePop (xmlXPathParserContextPtr ctxt);483XMLPUBFUN int484 valuePush (xmlXPathParserContextPtr ctxt,485 xmlXPathObjectPtr value);486 487XMLPUBFUN xmlXPathObjectPtr488 xmlXPathNewString (const xmlChar *val);489XMLPUBFUN xmlXPathObjectPtr490 xmlXPathNewCString (const char *val);491XMLPUBFUN xmlXPathObjectPtr492 xmlXPathWrapString (xmlChar *val);493XMLPUBFUN xmlXPathObjectPtr494 xmlXPathWrapCString (char * val);495XMLPUBFUN xmlXPathObjectPtr496 xmlXPathNewFloat (double val);497XMLPUBFUN xmlXPathObjectPtr498 xmlXPathNewBoolean (int val);499XMLPUBFUN xmlXPathObjectPtr500 xmlXPathNewNodeSet (xmlNodePtr val);501XMLPUBFUN xmlXPathObjectPtr502 xmlXPathNewValueTree (xmlNodePtr val);503XMLPUBFUN int504 xmlXPathNodeSetAdd (xmlNodeSetPtr cur,505 xmlNodePtr val);506XMLPUBFUN int507 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,508 xmlNodePtr val);509XMLPUBFUN int510 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,511 xmlNodePtr node,512 xmlNsPtr ns);513XMLPUBFUN void514 xmlXPathNodeSetSort (xmlNodeSetPtr set);515 516XMLPUBFUN void517 xmlXPathRoot (xmlXPathParserContextPtr ctxt);518XMLPUBFUN void519 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);520XMLPUBFUN xmlChar *521 xmlXPathParseName (xmlXPathParserContextPtr ctxt);522XMLPUBFUN xmlChar *523 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);524 525/*526 * Existing functions.527 */528XMLPUBFUN double529 xmlXPathStringEvalNumber (const xmlChar *str);530XMLPUBFUN int531 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,532 xmlXPathObjectPtr res);533XMLPUBFUN void534 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);535XMLPUBFUN xmlNodeSetPtr536 xmlXPathNodeSetMerge (xmlNodeSetPtr val1,537 xmlNodeSetPtr val2);538XMLPUBFUN void539 xmlXPathNodeSetDel (xmlNodeSetPtr cur,540 xmlNodePtr val);541XMLPUBFUN void542 xmlXPathNodeSetRemove (xmlNodeSetPtr cur,543 int val);544XMLPUBFUN xmlXPathObjectPtr545 xmlXPathNewNodeSetList (xmlNodeSetPtr val);546XMLPUBFUN xmlXPathObjectPtr547 xmlXPathWrapNodeSet (xmlNodeSetPtr val);548XMLPUBFUN xmlXPathObjectPtr549 xmlXPathWrapExternal (void *val);550 551XMLPUBFUN int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);552XMLPUBFUN int xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);553XMLPUBFUN int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);554XMLPUBFUN void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);555XMLPUBFUN void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);556XMLPUBFUN void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);557XMLPUBFUN void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);558XMLPUBFUN void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);559XMLPUBFUN void xmlXPathModValues(xmlXPathParserContextPtr ctxt);560 561XMLPUBFUN int xmlXPathIsNodeType(const xmlChar *name);562 563/*564 * Some of the axis navigation routines.565 */566XMLPUBFUN xmlNodePtr xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,567 xmlNodePtr cur);568XMLPUBFUN xmlNodePtr xmlXPathNextChild(xmlXPathParserContextPtr ctxt,569 xmlNodePtr cur);570XMLPUBFUN xmlNodePtr xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,571 xmlNodePtr cur);572XMLPUBFUN xmlNodePtr xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,573 xmlNodePtr cur);574XMLPUBFUN xmlNodePtr xmlXPathNextParent(xmlXPathParserContextPtr ctxt,575 xmlNodePtr cur);576XMLPUBFUN xmlNodePtr xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,577 xmlNodePtr cur);578XMLPUBFUN xmlNodePtr xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,579 xmlNodePtr cur);580XMLPUBFUN xmlNodePtr xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,581 xmlNodePtr cur);582XMLPUBFUN xmlNodePtr xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,583 xmlNodePtr cur);584XMLPUBFUN xmlNodePtr xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,585 xmlNodePtr cur);586XMLPUBFUN xmlNodePtr xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,587 xmlNodePtr cur);588XMLPUBFUN xmlNodePtr xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,589 xmlNodePtr cur);590XMLPUBFUN xmlNodePtr xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,591 xmlNodePtr cur);592/*593 * The official core of XPath functions.594 */595XMLPUBFUN void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);596XMLPUBFUN void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);597XMLPUBFUN void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);598XMLPUBFUN void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);599XMLPUBFUN void xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);600XMLPUBFUN void xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);601XMLPUBFUN void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);602XMLPUBFUN void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);603XMLPUBFUN void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);604XMLPUBFUN void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);605XMLPUBFUN void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);606XMLPUBFUN void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);607XMLPUBFUN void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);608XMLPUBFUN void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);609XMLPUBFUN void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);610XMLPUBFUN void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);611XMLPUBFUN void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);612XMLPUBFUN void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);613XMLPUBFUN void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);614XMLPUBFUN void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);615XMLPUBFUN void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);616XMLPUBFUN void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);617XMLPUBFUN void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);618XMLPUBFUN void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);619XMLPUBFUN void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);620XMLPUBFUN void xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);621 622/**623 * Really internal functions624 */625XMLPUBFUN void xmlXPathNodeSetFreeNs(xmlNsPtr ns);626 627#ifdef __cplusplus628}629#endif630 631#endif /* LIBXML_XPATH_ENABLED */632#endif /* ! __XML_XPATH_INTERNALS_H__ */633 