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 21extern "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 103XMLPUBFUN int XMLCALL 104 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt); 105XMLPUBFUN double XMLCALL 106 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt); 107XMLPUBFUN xmlChar * XMLCALL 108 xmlXPathPopString (xmlXPathParserContextPtr ctxt); 109XMLPUBFUN xmlNodeSetPtr XMLCALL 110 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt); 111XMLPUBFUN 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 334XMLPUBFUN void XMLCALL 335 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt, 336 xmlXPathVariableLookupFunc f, 337 void *data); 338 339/* 340 * Function Lookup forwarding. 341 */ 342 343XMLPUBFUN void XMLCALL 344 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt, 345 xmlXPathFuncLookupFunc f, 346 void *funcCtxt); 347 348/* 349 * Error reporting. 350 */ 351XMLPUBFUN void XMLCALL 352 xmlXPatherror (xmlXPathParserContextPtr ctxt, 353 const char *file, 354 int line, 355 int no); 356 357XMLPUBFUN void XMLCALL 358 xmlXPathErr (xmlXPathParserContextPtr ctxt, 359 int error); 360 361#ifdef LIBXML_DEBUG_ENABLED 362XMLPUBFUN void XMLCALL 363 xmlXPathDebugDumpObject (FILE *output, 364 xmlXPathObjectPtr cur, 365 int depth); 366XMLPUBFUN void XMLCALL 367 xmlXPathDebugDumpCompExpr(FILE *output, 368 xmlXPathCompExprPtr comp, 369 int depth); 370#endif 371/** 372 * NodeSet handling. 373 */ 374XMLPUBFUN int XMLCALL 375 xmlXPathNodeSetContains (xmlNodeSetPtr cur, 376 xmlNodePtr val); 377XMLPUBFUN xmlNodeSetPtr XMLCALL 378 xmlXPathDifference (xmlNodeSetPtr nodes1, 379 xmlNodeSetPtr nodes2); 380XMLPUBFUN xmlNodeSetPtr XMLCALL 381 xmlXPathIntersection (xmlNodeSetPtr nodes1, 382 xmlNodeSetPtr nodes2); 383 384XMLPUBFUN xmlNodeSetPtr XMLCALL 385 xmlXPathDistinctSorted (xmlNodeSetPtr nodes); 386XMLPUBFUN xmlNodeSetPtr XMLCALL 387 xmlXPathDistinct (xmlNodeSetPtr nodes); 388 389XMLPUBFUN int XMLCALL 390 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, 391 xmlNodeSetPtr nodes2); 392 393XMLPUBFUN xmlNodeSetPtr XMLCALL 394 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, 395 xmlNodePtr node); 396XMLPUBFUN xmlNodeSetPtr XMLCALL 397 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, 398 xmlNodeSetPtr nodes2); 399XMLPUBFUN xmlNodeSetPtr XMLCALL 400 xmlXPathNodeLeading (xmlNodeSetPtr nodes, 401 xmlNodePtr node); 402XMLPUBFUN xmlNodeSetPtr XMLCALL 403 xmlXPathLeading (xmlNodeSetPtr nodes1, 404 xmlNodeSetPtr nodes2); 405 406XMLPUBFUN xmlNodeSetPtr XMLCALL 407 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, 408 xmlNodePtr node); 409XMLPUBFUN xmlNodeSetPtr XMLCALL 410 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, 411 xmlNodeSetPtr nodes2); 412XMLPUBFUN xmlNodeSetPtr XMLCALL 413 xmlXPathNodeTrailing (xmlNodeSetPtr nodes, 414 xmlNodePtr node); 415XMLPUBFUN xmlNodeSetPtr XMLCALL 416 xmlXPathTrailing (xmlNodeSetPtr nodes1, 417 xmlNodeSetPtr nodes2); 418 419 420/** 421 * Extending a context. 422 */ 423 424XMLPUBFUN int XMLCALL 425 xmlXPathRegisterNs (xmlXPathContextPtr ctxt, 426 const xmlChar *prefix, 427 const xmlChar *ns_uri); 428XMLPUBFUN const xmlChar * XMLCALL 429 xmlXPathNsLookup (xmlXPathContextPtr ctxt, 430 const xmlChar *prefix); 431XMLPUBFUN void XMLCALL 432 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt); 433 434XMLPUBFUN int XMLCALL 435 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt, 436 const xmlChar *name, 437 xmlXPathFunction f); 438XMLPUBFUN int XMLCALL 439 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt, 440 const xmlChar *name, 441 const xmlChar *ns_uri, 442 xmlXPathFunction f); 443XMLPUBFUN int XMLCALL 444 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt, 445 const xmlChar *name, 446 xmlXPathObjectPtr value); 447XMLPUBFUN int XMLCALL 448 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt, 449 const xmlChar *name, 450 const xmlChar *ns_uri, 451 xmlXPathObjectPtr value); 452XMLPUBFUN xmlXPathFunction XMLCALL 453 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt, 454 const xmlChar *name); 455XMLPUBFUN xmlXPathFunction XMLCALL 456 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt, 457 const xmlChar *name, 458 const xmlChar *ns_uri); 459XMLPUBFUN void XMLCALL 460 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt); 461XMLPUBFUN xmlXPathObjectPtr XMLCALL 462 xmlXPathVariableLookup (xmlXPathContextPtr ctxt, 463 const xmlChar *name); 464XMLPUBFUN xmlXPathObjectPtr XMLCALL 465 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt, 466 const xmlChar *name, 467 const xmlChar *ns_uri); 468XMLPUBFUN void XMLCALL 469 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt); 470 471/** 472 * Utilities to extend XPath. 473 */ 474XMLPUBFUN xmlXPathParserContextPtr XMLCALL 475 xmlXPathNewParserContext (const xmlChar *str, 476 xmlXPathContextPtr ctxt); 477XMLPUBFUN void XMLCALL 478 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt); 479 480/* TODO: remap to xmlXPathValuePop and Push. */ 481XMLPUBFUN xmlXPathObjectPtr XMLCALL 482 valuePop (xmlXPathParserContextPtr ctxt); 483XMLPUBFUN int XMLCALL 484 valuePush (xmlXPathParserContextPtr ctxt, 485 xmlXPathObjectPtr value); 486 487XMLPUBFUN xmlXPathObjectPtr XMLCALL 488 xmlXPathNewString (const xmlChar *val); 489XMLPUBFUN xmlXPathObjectPtr XMLCALL 490 xmlXPathNewCString (const char *val); 491XMLPUBFUN xmlXPathObjectPtr XMLCALL 492 xmlXPathWrapString (xmlChar *val); 493XMLPUBFUN xmlXPathObjectPtr XMLCALL 494 xmlXPathWrapCString (char * val); 495XMLPUBFUN xmlXPathObjectPtr XMLCALL 496 xmlXPathNewFloat (double val); 497XMLPUBFUN xmlXPathObjectPtr XMLCALL 498 xmlXPathNewBoolean (int val); 499XMLPUBFUN xmlXPathObjectPtr XMLCALL 500 xmlXPathNewNodeSet (xmlNodePtr val); 501XMLPUBFUN xmlXPathObjectPtr XMLCALL 502 xmlXPathNewValueTree (xmlNodePtr val); 503XMLPUBFUN int XMLCALL 504 xmlXPathNodeSetAdd (xmlNodeSetPtr cur, 505 xmlNodePtr val); 506XMLPUBFUN int XMLCALL 507 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur, 508 xmlNodePtr val); 509XMLPUBFUN int XMLCALL 510 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur, 511 xmlNodePtr node, 512 xmlNsPtr ns); 513XMLPUBFUN void XMLCALL 514 xmlXPathNodeSetSort (xmlNodeSetPtr set); 515 516XMLPUBFUN void XMLCALL 517 xmlXPathRoot (xmlXPathParserContextPtr ctxt); 518XMLPUBFUN void XMLCALL 519 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt); 520XMLPUBFUN xmlChar * XMLCALL 521 xmlXPathParseName (xmlXPathParserContextPtr ctxt); 522XMLPUBFUN xmlChar * XMLCALL 523 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt); 524 525/* 526 * Existing functions. 527 */ 528XMLPUBFUN double XMLCALL 529 xmlXPathStringEvalNumber (const xmlChar *str); 530XMLPUBFUN int XMLCALL 531 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt, 532 xmlXPathObjectPtr res); 533XMLPUBFUN void XMLCALL 534 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt); 535XMLPUBFUN xmlNodeSetPtr XMLCALL 536 xmlXPathNodeSetMerge (xmlNodeSetPtr val1, 537 xmlNodeSetPtr val2); 538XMLPUBFUN void XMLCALL 539 xmlXPathNodeSetDel (xmlNodeSetPtr cur, 540 xmlNodePtr val); 541XMLPUBFUN void XMLCALL 542 xmlXPathNodeSetRemove (xmlNodeSetPtr cur, 543 int val); 544XMLPUBFUN xmlXPathObjectPtr XMLCALL 545 xmlXPathNewNodeSetList (xmlNodeSetPtr val); 546XMLPUBFUN xmlXPathObjectPtr XMLCALL 547 xmlXPathWrapNodeSet (xmlNodeSetPtr val); 548XMLPUBFUN xmlXPathObjectPtr XMLCALL 549 xmlXPathWrapExternal (void *val); 550 551XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt); 552XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt); 553XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict); 554XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt); 555XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt); 556XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt); 557XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt); 558XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt); 559XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt); 560 561XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name); 562 563/* 564 * Some of the axis navigation routines. 565 */ 566XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, 567 xmlNodePtr cur); 568XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt, 569 xmlNodePtr cur); 570XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, 571 xmlNodePtr cur); 572XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, 573 xmlNodePtr cur); 574XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt, 575 xmlNodePtr cur); 576XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, 577 xmlNodePtr cur); 578XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, 579 xmlNodePtr cur); 580XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, 581 xmlNodePtr cur); 582XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, 583 xmlNodePtr cur); 584XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, 585 xmlNodePtr cur); 586XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, 587 xmlNodePtr cur); 588XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, 589 xmlNodePtr cur); 590XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, 591 xmlNodePtr cur); 592/* 593 * The official core of XPath functions. 594 */ 595XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs); 596XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs); 597XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs); 598XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs); 599XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs); 600XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs); 601XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs); 602XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs); 603XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs); 604XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs); 605XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs); 606XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs); 607XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs); 608XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs); 609XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs); 610XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs); 611XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs); 612XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs); 613XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs); 614XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs); 615XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs); 616XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs); 617XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs); 618XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs); 619XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs); 620XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs); 621 622/** 623 * Really internal functions 624 */ 625XMLPUBFUN 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