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