LTKCPP-- LLRP Toolkit C Plus Plus Library
xpathInternals.h
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  */
41 #define xmlXPathSetError(ctxt, err) \
42  { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
43  if ((ctxt) != NULL) (ctxt)->error = (err); }
44 
51 #define xmlXPathSetArityError(ctxt) \
52  xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
53 
60 #define xmlXPathSetTypeError(ctxt) \
61  xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
62 
71 #define xmlXPathGetError(ctxt) ((ctxt)->error)
72 
81 #define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
82 
91 #define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
92 
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 
121 #define xmlXPathReturnBoolean(ctxt, val) \
122  valuePush((ctxt), xmlXPathNewBoolean(val))
123 
130 #define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
131 
138 #define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
139 
147 #define xmlXPathReturnNumber(ctxt, val) \
148  valuePush((ctxt), xmlXPathNewFloat(val))
149 
157 #define xmlXPathReturnString(ctxt, str) \
158  valuePush((ctxt), xmlXPathWrapString(str))
159 
166 #define xmlXPathReturnEmptyString(ctxt) \
167  valuePush((ctxt), xmlXPathNewCString(""))
168 
176 #define xmlXPathReturnNodeSet(ctxt, ns) \
177  valuePush((ctxt), xmlXPathWrapNodeSet(ns))
178 
185 #define xmlXPathReturnEmptyNodeSet(ctxt) \
186  valuePush((ctxt), xmlXPathNewNodeSet(NULL))
187 
195 #define xmlXPathReturnExternal(ctxt, val) \
196  valuePush((ctxt), xmlXPathWrapExternal(val))
197 
207 #define xmlXPathStackIsNodeSet(ctxt) \
208  (((ctxt)->value != NULL) \
209  && (((ctxt)->value->type == XPATH_NODESET) \
210  || ((ctxt)->value->type == XPATH_XSLT_TREE)))
211 
222 #define xmlXPathStackIsExternal(ctxt) \
223  ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
224 
231 #define xmlXPathEmptyNodeSet(ns) \
232  { while ((ns)->nodeNr > 0) (ns)->nodeTab[(ns)->nodeNr--] = NULL; }
233 
239 #define CHECK_ERROR \
240  if (ctxt->error != XPATH_EXPRESSION_OK) return
241 
247 #define CHECK_ERROR0 \
248  if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
249 
256 #define XP_ERROR(X) \
257  { xmlXPathErr(ctxt, X); return; }
258 
265 #define XP_ERROR0(X) \
266  { xmlXPathErr(ctxt, X); return(0); }
267 
275 #define CHECK_TYPE(typeval) \
276  if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
277  XP_ERROR(XPATH_INVALID_TYPE)
278 
286 #define CHECK_TYPE0(typeval) \
287  if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
288  XP_ERROR0(XPATH_INVALID_TYPE)
289 
296 #define CHECK_ARITY(x) \
297  if (ctxt == NULL) return; \
298  if (nargs != (x)) \
299  XP_ERROR(XPATH_INVALID_ARITY);
300 
306 #define CAST_TO_STRING \
307  if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
308  xmlXPathStringFunction(ctxt, 1);
309 
315 #define CAST_TO_NUMBER \
316  if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
317  xmlXPathNumberFunction(ctxt, 1);
318 
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 
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 
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 
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 
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__ */