00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __XML_XPATH_INTERNALS_H__
00013 #define __XML_XPATH_INTERNALS_H__
00014
00015 #include <libxml/xmlversion.h>
00016 #include <libxml/xpath.h>
00017
00018 #ifdef LIBXML_XPATH_ENABLED
00019
00020 #ifdef __cplusplus
00021 extern "C" {
00022 #endif
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00041 #define xmlXPathSetError(ctxt, err) \
00042 { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
00043 if ((ctxt) != NULL) (ctxt)->error = (err); }
00044
00051 #define xmlXPathSetArityError(ctxt) \
00052 xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
00053
00060 #define xmlXPathSetTypeError(ctxt) \
00061 xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
00062
00071 #define xmlXPathGetError(ctxt) ((ctxt)->error)
00072
00081 #define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
00082
00091 #define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
00092
00101 #define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
00102
00103 XMLPUBFUN int XMLCALL
00104 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
00105 XMLPUBFUN double XMLCALL
00106 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
00107 XMLPUBFUN xmlChar * XMLCALL
00108 xmlXPathPopString (xmlXPathParserContextPtr ctxt);
00109 XMLPUBFUN xmlNodeSetPtr XMLCALL
00110 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
00111 XMLPUBFUN void * XMLCALL
00112 xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
00113
00121 #define xmlXPathReturnBoolean(ctxt, val) \
00122 valuePush((ctxt), xmlXPathNewBoolean(val))
00123
00130 #define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
00131
00138 #define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
00139
00147 #define xmlXPathReturnNumber(ctxt, val) \
00148 valuePush((ctxt), xmlXPathNewFloat(val))
00149
00157 #define xmlXPathReturnString(ctxt, str) \
00158 valuePush((ctxt), xmlXPathWrapString(str))
00159
00166 #define xmlXPathReturnEmptyString(ctxt) \
00167 valuePush((ctxt), xmlXPathNewCString(""))
00168
00176 #define xmlXPathReturnNodeSet(ctxt, ns) \
00177 valuePush((ctxt), xmlXPathWrapNodeSet(ns))
00178
00185 #define xmlXPathReturnEmptyNodeSet(ctxt) \
00186 valuePush((ctxt), xmlXPathNewNodeSet(NULL))
00187
00195 #define xmlXPathReturnExternal(ctxt, val) \
00196 valuePush((ctxt), xmlXPathWrapExternal(val))
00197
00207 #define xmlXPathStackIsNodeSet(ctxt) \
00208 (((ctxt)->value != NULL) \
00209 && (((ctxt)->value->type == XPATH_NODESET) \
00210 || ((ctxt)->value->type == XPATH_XSLT_TREE)))
00211
00222 #define xmlXPathStackIsExternal(ctxt) \
00223 ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
00224
00231 #define xmlXPathEmptyNodeSet(ns) \
00232 { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
00233
00239 #define CHECK_ERROR \
00240 if (ctxt->error != XPATH_EXPRESSION_OK) return
00241
00247 #define CHECK_ERROR0 \
00248 if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
00249
00256 #define XP_ERROR(X) \
00257 { xmlXPathErr(ctxt, X); return; }
00258
00265 #define XP_ERROR0(X) \
00266 { xmlXPathErr(ctxt, X); return(0); }
00267
00275 #define CHECK_TYPE(typeval) \
00276 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
00277 XP_ERROR(XPATH_INVALID_TYPE)
00278
00286 #define CHECK_TYPE0(typeval) \
00287 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
00288 XP_ERROR0(XPATH_INVALID_TYPE)
00289
00296 #define CHECK_ARITY(x) \
00297 if (ctxt == NULL) return; \
00298 if (nargs != (x)) \
00299 XP_ERROR(XPATH_INVALID_ARITY);
00300
00306 #define CAST_TO_STRING \
00307 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
00308 xmlXPathStringFunction(ctxt, 1);
00309
00315 #define CAST_TO_NUMBER \
00316 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
00317 xmlXPathNumberFunction(ctxt, 1);
00318
00324 #define CAST_TO_BOOLEAN \
00325 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
00326 xmlXPathBooleanFunction(ctxt, 1);
00327
00328
00329
00330
00331
00332 XMLPUBFUN void XMLCALL
00333 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
00334 xmlXPathVariableLookupFunc f,
00335 void *data);
00336
00337
00338
00339
00340
00341 XMLPUBFUN void XMLCALL
00342 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
00343 xmlXPathFuncLookupFunc f,
00344 void *funcCtxt);
00345
00346
00347
00348
00349 XMLPUBFUN void XMLCALL
00350 xmlXPatherror (xmlXPathParserContextPtr ctxt,
00351 const char *file,
00352 int line,
00353 int no);
00354
00355 XMLPUBFUN void XMLCALL
00356 xmlXPathErr (xmlXPathParserContextPtr ctxt,
00357 int error);
00358
00359 #ifdef LIBXML_DEBUG_ENABLED
00360 XMLPUBFUN void XMLCALL
00361 xmlXPathDebugDumpObject (FILE *output,
00362 xmlXPathObjectPtr cur,
00363 int depth);
00364 XMLPUBFUN void XMLCALL
00365 xmlXPathDebugDumpCompExpr(FILE *output,
00366 xmlXPathCompExprPtr comp,
00367 int depth);
00368 #endif
00369
00372 XMLPUBFUN int XMLCALL
00373 xmlXPathNodeSetContains (xmlNodeSetPtr cur,
00374 xmlNodePtr val);
00375 XMLPUBFUN xmlNodeSetPtr XMLCALL
00376 xmlXPathDifference (xmlNodeSetPtr nodes1,
00377 xmlNodeSetPtr nodes2);
00378 XMLPUBFUN xmlNodeSetPtr XMLCALL
00379 xmlXPathIntersection (xmlNodeSetPtr nodes1,
00380 xmlNodeSetPtr nodes2);
00381
00382 XMLPUBFUN xmlNodeSetPtr XMLCALL
00383 xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
00384 XMLPUBFUN xmlNodeSetPtr XMLCALL
00385 xmlXPathDistinct (xmlNodeSetPtr nodes);
00386
00387 XMLPUBFUN int XMLCALL
00388 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
00389 xmlNodeSetPtr nodes2);
00390
00391 XMLPUBFUN xmlNodeSetPtr XMLCALL
00392 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
00393 xmlNodePtr node);
00394 XMLPUBFUN xmlNodeSetPtr XMLCALL
00395 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
00396 xmlNodeSetPtr nodes2);
00397 XMLPUBFUN xmlNodeSetPtr XMLCALL
00398 xmlXPathNodeLeading (xmlNodeSetPtr nodes,
00399 xmlNodePtr node);
00400 XMLPUBFUN xmlNodeSetPtr XMLCALL
00401 xmlXPathLeading (xmlNodeSetPtr nodes1,
00402 xmlNodeSetPtr nodes2);
00403
00404 XMLPUBFUN xmlNodeSetPtr XMLCALL
00405 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
00406 xmlNodePtr node);
00407 XMLPUBFUN xmlNodeSetPtr XMLCALL
00408 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
00409 xmlNodeSetPtr nodes2);
00410 XMLPUBFUN xmlNodeSetPtr XMLCALL
00411 xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
00412 xmlNodePtr node);
00413 XMLPUBFUN xmlNodeSetPtr XMLCALL
00414 xmlXPathTrailing (xmlNodeSetPtr nodes1,
00415 xmlNodeSetPtr nodes2);
00416
00417
00422 XMLPUBFUN int XMLCALL
00423 xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
00424 const xmlChar *prefix,
00425 const xmlChar *ns_uri);
00426 XMLPUBFUN const xmlChar * XMLCALL
00427 xmlXPathNsLookup (xmlXPathContextPtr ctxt,
00428 const xmlChar *prefix);
00429 XMLPUBFUN void XMLCALL
00430 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
00431
00432 XMLPUBFUN int XMLCALL
00433 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
00434 const xmlChar *name,
00435 xmlXPathFunction f);
00436 XMLPUBFUN int XMLCALL
00437 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
00438 const xmlChar *name,
00439 const xmlChar *ns_uri,
00440 xmlXPathFunction f);
00441 XMLPUBFUN int XMLCALL
00442 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
00443 const xmlChar *name,
00444 xmlXPathObjectPtr value);
00445 XMLPUBFUN int XMLCALL
00446 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
00447 const xmlChar *name,
00448 const xmlChar *ns_uri,
00449 xmlXPathObjectPtr value);
00450 XMLPUBFUN xmlXPathFunction XMLCALL
00451 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
00452 const xmlChar *name);
00453 XMLPUBFUN xmlXPathFunction XMLCALL
00454 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
00455 const xmlChar *name,
00456 const xmlChar *ns_uri);
00457 XMLPUBFUN void XMLCALL
00458 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
00459 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00460 xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
00461 const xmlChar *name);
00462 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00463 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
00464 const xmlChar *name,
00465 const xmlChar *ns_uri);
00466 XMLPUBFUN void XMLCALL
00467 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
00468
00472 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
00473 xmlXPathNewParserContext (const xmlChar *str,
00474 xmlXPathContextPtr ctxt);
00475 XMLPUBFUN void XMLCALL
00476 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
00477
00478
00479 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00480 valuePop (xmlXPathParserContextPtr ctxt);
00481 XMLPUBFUN int XMLCALL
00482 valuePush (xmlXPathParserContextPtr ctxt,
00483 xmlXPathObjectPtr value);
00484
00485 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00486 xmlXPathNewString (const xmlChar *val);
00487 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00488 xmlXPathNewCString (const char *val);
00489 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00490 xmlXPathWrapString (xmlChar *val);
00491 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00492 xmlXPathWrapCString (char * val);
00493 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00494 xmlXPathNewFloat (double val);
00495 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00496 xmlXPathNewBoolean (int val);
00497 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00498 xmlXPathNewNodeSet (xmlNodePtr val);
00499 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00500 xmlXPathNewValueTree (xmlNodePtr val);
00501 XMLPUBFUN void XMLCALL
00502 xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
00503 xmlNodePtr val);
00504 XMLPUBFUN void XMLCALL
00505 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
00506 xmlNodePtr val);
00507 XMLPUBFUN void XMLCALL
00508 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
00509 xmlNodePtr node,
00510 xmlNsPtr ns);
00511 XMLPUBFUN void XMLCALL
00512 xmlXPathNodeSetSort (xmlNodeSetPtr set);
00513
00514 XMLPUBFUN void XMLCALL
00515 xmlXPathRoot (xmlXPathParserContextPtr ctxt);
00516 XMLPUBFUN void XMLCALL
00517 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
00518 XMLPUBFUN xmlChar * XMLCALL
00519 xmlXPathParseName (xmlXPathParserContextPtr ctxt);
00520 XMLPUBFUN xmlChar * XMLCALL
00521 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
00522
00523
00524
00525
00526 XMLPUBFUN double XMLCALL
00527 xmlXPathStringEvalNumber (const xmlChar *str);
00528 XMLPUBFUN int XMLCALL
00529 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
00530 xmlXPathObjectPtr res);
00531 XMLPUBFUN void XMLCALL
00532 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
00533 XMLPUBFUN xmlNodeSetPtr XMLCALL
00534 xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
00535 xmlNodeSetPtr val2);
00536 XMLPUBFUN void XMLCALL
00537 xmlXPathNodeSetDel (xmlNodeSetPtr cur,
00538 xmlNodePtr val);
00539 XMLPUBFUN void XMLCALL
00540 xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
00541 int val);
00542 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00543 xmlXPathNewNodeSetList (xmlNodeSetPtr val);
00544 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00545 xmlXPathWrapNodeSet (xmlNodeSetPtr val);
00546 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00547 xmlXPathWrapExternal (void *val);
00548
00549 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
00550 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
00551 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
00552 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
00553 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
00554 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
00555 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
00556 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
00557 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
00558
00559 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
00560
00561
00562
00563
00564 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
00565 xmlNodePtr cur);
00566 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
00567 xmlNodePtr cur);
00568 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
00569 xmlNodePtr cur);
00570 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
00571 xmlNodePtr cur);
00572 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
00573 xmlNodePtr cur);
00574 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
00575 xmlNodePtr cur);
00576 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
00577 xmlNodePtr cur);
00578 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
00579 xmlNodePtr cur);
00580 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
00581 xmlNodePtr cur);
00582 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
00583 xmlNodePtr cur);
00584 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
00585 xmlNodePtr cur);
00586 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
00587 xmlNodePtr cur);
00588 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
00589 xmlNodePtr cur);
00590
00591
00592
00593 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
00594 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
00595 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
00596 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
00597 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
00598 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
00599 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
00600 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
00601 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
00602 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
00603 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
00604 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
00605 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
00606 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
00607 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
00608 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
00609 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
00610 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
00611 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
00612 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
00613 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
00614 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
00615 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
00616 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
00617 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
00618 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
00619
00623 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
00624
00625 #ifdef __cplusplus
00626 }
00627 #endif
00628
00629 #endif
00630 #endif