00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __XML_XPATH_INTERNALS_H__
00011 #define __XML_XPATH_INTERNALS_H__
00012
00013 #include <libxml/xmlversion.h>
00014 #include <libxml/xpath.h>
00015
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00020
00021
00022
00023
00024
00025
00037 #define xmlXPathSetError(ctxt, err) \
00038 { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
00039 (ctxt)->error = (err); }
00040
00047 #define xmlXPathSetArityError(ctxt) \
00048 xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
00049
00056 #define xmlXPathSetTypeError(ctxt) \
00057 xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
00058
00067 #define xmlXPathGetError(ctxt) ((ctxt)->error)
00068
00077 #define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
00078
00087 #define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
00088
00097 #define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
00098
00099 XMLPUBFUN int XMLCALL
00100 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
00101 XMLPUBFUN double XMLCALL
00102 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
00103 XMLPUBFUN xmlChar * XMLCALL
00104 xmlXPathPopString (xmlXPathParserContextPtr ctxt);
00105 XMLPUBFUN xmlNodeSetPtr XMLCALL
00106 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
00107 XMLPUBFUN void * XMLCALL
00108 xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
00109
00117 #define xmlXPathReturnBoolean(ctxt, val) \
00118 valuePush((ctxt), xmlXPathNewBoolean(val))
00119
00126 #define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
00127
00134 #define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
00135
00143 #define xmlXPathReturnNumber(ctxt, val) \
00144 valuePush((ctxt), xmlXPathNewFloat(val))
00145
00153 #define xmlXPathReturnString(ctxt, str) \
00154 valuePush((ctxt), xmlXPathWrapString(str))
00155
00162 #define xmlXPathReturnEmptyString(ctxt) \
00163 valuePush((ctxt), xmlXPathNewCString(""))
00164
00172 #define xmlXPathReturnNodeSet(ctxt, ns) \
00173 valuePush((ctxt), xmlXPathWrapNodeSet(ns))
00174
00181 #define xmlXPathReturnEmptyNodeSet(ctxt) \
00182 valuePush((ctxt), xmlXPathNewNodeSet(NULL))
00183
00191 #define xmlXPathReturnExternal(ctxt, val) \
00192 valuePush((ctxt), xmlXPathWrapExternal(val))
00193
00203 #define xmlXPathStackIsNodeSet(ctxt) \
00204 (((ctxt)->value != NULL) \
00205 && (((ctxt)->value->type == XPATH_NODESET) \
00206 || ((ctxt)->value->type == XPATH_XSLT_TREE)))
00207
00218 #define xmlXPathStackIsExternal(ctxt) \
00219 ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
00220
00227 #define xmlXPathEmptyNodeSet(ns) \
00228 { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
00229
00235 #define CHECK_ERROR \
00236 if (ctxt->error != XPATH_EXPRESSION_OK) return
00237
00243 #define CHECK_ERROR0 \
00244 if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
00245
00252 #define XP_ERROR(X) \
00253 { xmlXPathErr(ctxt, X); return; }
00254
00261 #define XP_ERROR0(X) \
00262 { xmlXPathErr(ctxt, X); return(0); }
00263
00271 #define CHECK_TYPE(typeval) \
00272 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
00273 XP_ERROR(XPATH_INVALID_TYPE)
00274
00282 #define CHECK_TYPE0(typeval) \
00283 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
00284 XP_ERROR0(XPATH_INVALID_TYPE)
00285
00292 #define CHECK_ARITY(x) \
00293 if (nargs != (x)) \
00294 XP_ERROR(XPATH_INVALID_ARITY);
00295
00301 #define CAST_TO_STRING \
00302 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
00303 xmlXPathStringFunction(ctxt, 1);
00304
00310 #define CAST_TO_NUMBER \
00311 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
00312 xmlXPathNumberFunction(ctxt, 1);
00313
00319 #define CAST_TO_BOOLEAN \
00320 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
00321 xmlXPathBooleanFunction(ctxt, 1);
00322
00323
00324
00325
00337 typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
00338 const xmlChar *name,
00339 const xmlChar *ns_uri);
00340
00341 XMLPUBFUN void XMLCALL
00342 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
00343 xmlXPathVariableLookupFunc f,
00344 void *data);
00345
00346
00347
00348
00360 typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
00361 const xmlChar *name,
00362 const xmlChar *ns_uri);
00363
00364 XMLPUBFUN void XMLCALL
00365 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
00366 xmlXPathFuncLookupFunc f,
00367 void *funcCtxt);
00368
00369
00370
00371
00372 XMLPUBFUN void XMLCALL
00373 xmlXPatherror (xmlXPathParserContextPtr ctxt,
00374 const char *file,
00375 int line,
00376 int no);
00377
00378 XMLPUBFUN void XMLCALL
00379 xmlXPathErr (xmlXPathParserContextPtr ctxt,
00380 int error);
00381
00382 #ifdef LIBXML_DEBUG_ENABLED
00383 XMLPUBFUN void XMLCALL
00384 xmlXPathDebugDumpObject (FILE *output,
00385 xmlXPathObjectPtr cur,
00386 int depth);
00387 XMLPUBFUN void XMLCALL
00388 xmlXPathDebugDumpCompExpr(FILE *output,
00389 xmlXPathCompExprPtr comp,
00390 int depth);
00391 #endif
00392
00395 XMLPUBFUN int XMLCALL
00396 xmlXPathNodeSetContains (xmlNodeSetPtr cur,
00397 xmlNodePtr val);
00398 XMLPUBFUN xmlNodeSetPtr XMLCALL
00399 xmlXPathDifference (xmlNodeSetPtr nodes1,
00400 xmlNodeSetPtr nodes2);
00401 XMLPUBFUN xmlNodeSetPtr XMLCALL
00402 xmlXPathIntersection (xmlNodeSetPtr nodes1,
00403 xmlNodeSetPtr nodes2);
00404
00405 XMLPUBFUN xmlNodeSetPtr XMLCALL
00406 xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
00407 XMLPUBFUN xmlNodeSetPtr XMLCALL
00408 xmlXPathDistinct (xmlNodeSetPtr nodes);
00409
00410 XMLPUBFUN int XMLCALL
00411 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
00412 xmlNodeSetPtr nodes2);
00413
00414 XMLPUBFUN xmlNodeSetPtr XMLCALL
00415 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
00416 xmlNodePtr node);
00417 XMLPUBFUN xmlNodeSetPtr XMLCALL
00418 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
00419 xmlNodeSetPtr nodes2);
00420 XMLPUBFUN xmlNodeSetPtr XMLCALL
00421 xmlXPathNodeLeading (xmlNodeSetPtr nodes,
00422 xmlNodePtr node);
00423 XMLPUBFUN xmlNodeSetPtr XMLCALL
00424 xmlXPathLeading (xmlNodeSetPtr nodes1,
00425 xmlNodeSetPtr nodes2);
00426
00427 XMLPUBFUN xmlNodeSetPtr XMLCALL
00428 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
00429 xmlNodePtr node);
00430 XMLPUBFUN xmlNodeSetPtr XMLCALL
00431 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
00432 xmlNodeSetPtr nodes2);
00433 XMLPUBFUN xmlNodeSetPtr XMLCALL
00434 xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
00435 xmlNodePtr node);
00436 XMLPUBFUN xmlNodeSetPtr XMLCALL
00437 xmlXPathTrailing (xmlNodeSetPtr nodes1,
00438 xmlNodeSetPtr nodes2);
00439
00440
00445 XMLPUBFUN int XMLCALL
00446 xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
00447 const xmlChar *prefix,
00448 const xmlChar *ns_uri);
00449 XMLPUBFUN const xmlChar * XMLCALL
00450 xmlXPathNsLookup (xmlXPathContextPtr ctxt,
00451 const xmlChar *prefix);
00452 XMLPUBFUN void XMLCALL
00453 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
00454
00455 XMLPUBFUN int XMLCALL
00456 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
00457 const xmlChar *name,
00458 xmlXPathFunction f);
00459 XMLPUBFUN int XMLCALL
00460 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
00461 const xmlChar *name,
00462 const xmlChar *ns_uri,
00463 xmlXPathFunction f);
00464 XMLPUBFUN int XMLCALL
00465 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
00466 const xmlChar *name,
00467 xmlXPathObjectPtr value);
00468 XMLPUBFUN int XMLCALL
00469 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
00470 const xmlChar *name,
00471 const xmlChar *ns_uri,
00472 xmlXPathObjectPtr value);
00473 XMLPUBFUN xmlXPathFunction XMLCALL
00474 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
00475 const xmlChar *name);
00476 XMLPUBFUN xmlXPathFunction XMLCALL
00477 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
00478 const xmlChar *name,
00479 const xmlChar *ns_uri);
00480 XMLPUBFUN void XMLCALL
00481 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
00482 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00483 xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
00484 const xmlChar *name);
00485 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00486 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
00487 const xmlChar *name,
00488 const xmlChar *ns_uri);
00489 XMLPUBFUN void XMLCALL
00490 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
00491
00495 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
00496 xmlXPathNewParserContext (const xmlChar *str,
00497 xmlXPathContextPtr ctxt);
00498 XMLPUBFUN void XMLCALL
00499 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
00500
00501
00502 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00503 valuePop (xmlXPathParserContextPtr ctxt);
00504 XMLPUBFUN int XMLCALL
00505 valuePush (xmlXPathParserContextPtr ctxt,
00506 xmlXPathObjectPtr value);
00507
00508 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00509 xmlXPathNewString (const xmlChar *val);
00510 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00511 xmlXPathNewCString (const char *val);
00512 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00513 xmlXPathWrapString (xmlChar *val);
00514 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00515 xmlXPathWrapCString (char * val);
00516 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00517 xmlXPathNewFloat (double val);
00518 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00519 xmlXPathNewBoolean (int val);
00520 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00521 xmlXPathNewNodeSet (xmlNodePtr val);
00522 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00523 xmlXPathNewValueTree (xmlNodePtr val);
00524 XMLPUBFUN void XMLCALL
00525 xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
00526 xmlNodePtr val);
00527 XMLPUBFUN void XMLCALL
00528 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
00529 xmlNodePtr val);
00530 XMLPUBFUN void XMLCALL
00531 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
00532 xmlNodePtr node,
00533 xmlNsPtr ns);
00534 XMLPUBFUN void XMLCALL
00535 xmlXPathNodeSetSort (xmlNodeSetPtr set);
00536
00537 XMLPUBFUN void XMLCALL
00538 xmlXPathRoot (xmlXPathParserContextPtr ctxt);
00539 XMLPUBFUN void XMLCALL
00540 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
00541 XMLPUBFUN xmlChar * XMLCALL
00542 xmlXPathParseName (xmlXPathParserContextPtr ctxt);
00543 XMLPUBFUN xmlChar * XMLCALL
00544 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
00545
00546
00547
00548
00549 XMLPUBFUN double XMLCALL
00550 xmlXPathStringEvalNumber (const xmlChar *str);
00551 XMLPUBFUN int XMLCALL
00552 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
00553 xmlXPathObjectPtr res);
00554 XMLPUBFUN void XMLCALL
00555 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
00556 XMLPUBFUN xmlNodeSetPtr XMLCALL
00557 xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
00558 xmlNodeSetPtr val2);
00559 XMLPUBFUN void XMLCALL
00560 xmlXPathNodeSetDel (xmlNodeSetPtr cur,
00561 xmlNodePtr val);
00562 XMLPUBFUN void XMLCALL
00563 xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
00564 int val);
00565 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00566 xmlXPathNewNodeSetList (xmlNodeSetPtr val);
00567 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00568 xmlXPathWrapNodeSet (xmlNodeSetPtr val);
00569 XMLPUBFUN xmlXPathObjectPtr XMLCALL
00570 xmlXPathWrapExternal (void *val);
00571
00572 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
00573 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
00574 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
00575 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
00576 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
00577 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
00578 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
00579 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
00580 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
00581
00582 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
00583
00584
00585
00586
00587 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
00588 xmlNodePtr cur);
00589 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
00590 xmlNodePtr cur);
00591 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
00592 xmlNodePtr cur);
00593 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
00594 xmlNodePtr cur);
00595 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
00596 xmlNodePtr cur);
00597 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
00598 xmlNodePtr cur);
00599 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
00600 xmlNodePtr cur);
00601 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
00602 xmlNodePtr cur);
00603 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
00604 xmlNodePtr cur);
00605 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
00606 xmlNodePtr cur);
00607 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
00608 xmlNodePtr cur);
00609 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
00610 xmlNodePtr cur);
00611 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
00612 xmlNodePtr cur);
00613
00614
00615
00616 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
00617 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
00618 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
00619 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
00620 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
00621 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
00622 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
00623 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
00624 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
00625 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
00626 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
00627 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
00628 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
00629 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
00630 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
00631 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
00632 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
00633 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
00634 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
00635 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
00636 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
00637 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
00638 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
00639 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
00640 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
00641 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
00642
00646 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
00647
00648 #ifdef __cplusplus
00649 }
00650 #endif
00651 #endif
00652