12 #ifndef __XML_XPATH_INTERNALS_H__
13 #define __XML_XPATH_INTERNALS_H__
15 #include <libxml/xmlversion.h>
16 #include <libxml/xpath.h>
18 #ifdef LIBXML_XPATH_ENABLED
41 #define xmlXPathSetError(ctxt, err) \
42 { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
43 if ((ctxt) != NULL) (ctxt)->error = (err); }
51 #define xmlXPathSetArityError(ctxt) \
52 xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
60 #define xmlXPathSetTypeError(ctxt) \
61 xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
71 #define xmlXPathGetError(ctxt) ((ctxt)->error)
81 #define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
91 #define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
101 #define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
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);
121 #define xmlXPathReturnBoolean(ctxt, val) \
122 valuePush((ctxt), xmlXPathNewBoolean(val))
130 #define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
138 #define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
147 #define xmlXPathReturnNumber(ctxt, val) \
148 valuePush((ctxt), xmlXPathNewFloat(val))
157 #define xmlXPathReturnString(ctxt, str) \
158 valuePush((ctxt), xmlXPathWrapString(str))
166 #define xmlXPathReturnEmptyString(ctxt) \
167 valuePush((ctxt), xmlXPathNewCString(""))
176 #define xmlXPathReturnNodeSet(ctxt, ns) \
177 valuePush((ctxt), xmlXPathWrapNodeSet(ns))
185 #define xmlXPathReturnEmptyNodeSet(ctxt) \
186 valuePush((ctxt), xmlXPathNewNodeSet(NULL))
195 #define xmlXPathReturnExternal(ctxt, val) \
196 valuePush((ctxt), xmlXPathWrapExternal(val))
207 #define xmlXPathStackIsNodeSet(ctxt) \
208 (((ctxt)->value != NULL) \
209 && (((ctxt)->value->type == XPATH_NODESET) \
210 || ((ctxt)->value->type == XPATH_XSLT_TREE)))
222 #define xmlXPathStackIsExternal(ctxt) \
223 ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
231 #define xmlXPathEmptyNodeSet(ns) \
232 { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
239 #define CHECK_ERROR \
240 if (ctxt->error != XPATH_EXPRESSION_OK) return
247 #define CHECK_ERROR0 \
248 if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
256 #define XP_ERROR(X) \
257 { xmlXPathErr(ctxt, X); return; }
265 #define XP_ERROR0(X) \
266 { xmlXPathErr(ctxt, X); return(0); }
275 #define CHECK_TYPE(typeval) \
276 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
277 XP_ERROR(XPATH_INVALID_TYPE)
286 #define CHECK_TYPE0(typeval) \
287 if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
288 XP_ERROR0(XPATH_INVALID_TYPE)
296 #define CHECK_ARITY(x) \
297 if (ctxt == NULL) return; \
299 XP_ERROR(XPATH_INVALID_ARITY);
306 #define CAST_TO_STRING \
307 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
308 xmlXPathStringFunction(ctxt, 1);
315 #define CAST_TO_NUMBER \
316 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
317 xmlXPathNumberFunction(ctxt, 1);
324 #define CAST_TO_BOOLEAN \
325 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
326 xmlXPathBooleanFunction(ctxt, 1);
332 XMLPUBFUN
void XMLCALL
333 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
334 xmlXPathVariableLookupFunc f,
341 XMLPUBFUN
void XMLCALL
342 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
343 xmlXPathFuncLookupFunc f,
349 XMLPUBFUN
void XMLCALL
350 xmlXPatherror (xmlXPathParserContextPtr ctxt,
355 XMLPUBFUN
void XMLCALL
356 xmlXPathErr (xmlXPathParserContextPtr ctxt,
359 #ifdef LIBXML_DEBUG_ENABLED
360 XMLPUBFUN
void XMLCALL
361 xmlXPathDebugDumpObject (FILE *output,
362 xmlXPathObjectPtr cur,
364 XMLPUBFUN
void XMLCALL
365 xmlXPathDebugDumpCompExpr(FILE *output,
366 xmlXPathCompExprPtr comp,
372 XMLPUBFUN
int XMLCALL
373 xmlXPathNodeSetContains (xmlNodeSetPtr cur,
375 XMLPUBFUN xmlNodeSetPtr XMLCALL
376 xmlXPathDifference (xmlNodeSetPtr nodes1,
377 xmlNodeSetPtr nodes2);
378 XMLPUBFUN xmlNodeSetPtr XMLCALL
379 xmlXPathIntersection (xmlNodeSetPtr nodes1,
380 xmlNodeSetPtr nodes2);
382 XMLPUBFUN xmlNodeSetPtr XMLCALL
383 xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
384 XMLPUBFUN xmlNodeSetPtr XMLCALL
385 xmlXPathDistinct (xmlNodeSetPtr nodes);
387 XMLPUBFUN
int XMLCALL
388 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
389 xmlNodeSetPtr nodes2);
391 XMLPUBFUN xmlNodeSetPtr XMLCALL
392 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
394 XMLPUBFUN xmlNodeSetPtr XMLCALL
395 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
396 xmlNodeSetPtr nodes2);
397 XMLPUBFUN xmlNodeSetPtr XMLCALL
398 xmlXPathNodeLeading (xmlNodeSetPtr nodes,
400 XMLPUBFUN xmlNodeSetPtr XMLCALL
401 xmlXPathLeading (xmlNodeSetPtr nodes1,
402 xmlNodeSetPtr nodes2);
404 XMLPUBFUN xmlNodeSetPtr XMLCALL
405 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
407 XMLPUBFUN xmlNodeSetPtr XMLCALL
408 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
409 xmlNodeSetPtr nodes2);
410 XMLPUBFUN xmlNodeSetPtr XMLCALL
411 xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
413 XMLPUBFUN xmlNodeSetPtr XMLCALL
414 xmlXPathTrailing (xmlNodeSetPtr nodes1,
415 xmlNodeSetPtr nodes2);
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);
432 XMLPUBFUN
int XMLCALL
433 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
436 XMLPUBFUN
int XMLCALL
437 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
439 const xmlChar *ns_uri,
441 XMLPUBFUN
int XMLCALL
442 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
444 xmlXPathObjectPtr value);
445 XMLPUBFUN
int XMLCALL
446 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
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,
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,
465 const xmlChar *ns_uri);
466 XMLPUBFUN
void XMLCALL
467 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
472 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
473 xmlXPathNewParserContext (
const xmlChar *str,
474 xmlXPathContextPtr ctxt);
475 XMLPUBFUN
void XMLCALL
476 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
479 XMLPUBFUN xmlXPathObjectPtr XMLCALL
480 valuePop (xmlXPathParserContextPtr ctxt);
481 XMLPUBFUN
int XMLCALL
482 valuePush (xmlXPathParserContextPtr ctxt,
483 xmlXPathObjectPtr value);
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,
504 XMLPUBFUN
void XMLCALL
505 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
507 XMLPUBFUN
void XMLCALL
508 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
511 XMLPUBFUN
void XMLCALL
512 xmlXPathNodeSetSort (xmlNodeSetPtr set);
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);
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,
536 XMLPUBFUN
void XMLCALL
537 xmlXPathNodeSetDel (xmlNodeSetPtr cur,
539 XMLPUBFUN
void XMLCALL
540 xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
542 XMLPUBFUN xmlXPathObjectPtr XMLCALL
543 xmlXPathNewNodeSetList (xmlNodeSetPtr val);
544 XMLPUBFUN xmlXPathObjectPtr XMLCALL
545 xmlXPathWrapNodeSet (xmlNodeSetPtr val);
546 XMLPUBFUN xmlXPathObjectPtr XMLCALL
547 xmlXPathWrapExternal (
void *val);
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);
559 XMLPUBFUN
int XMLCALL xmlXPathIsNodeType(
const xmlChar *name);
564 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
566 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
568 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
570 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
572 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
574 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
576 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
578 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
580 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
582 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
584 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
586 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
588 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
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);
623 XMLPUBFUN
void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);