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