ReactOS 0.4.15-dev-8419-g7f0e8a3
xpathInternals.h
Go to the documentation of this file.
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
21extern "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
104 xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
105XMLPUBFUN double XMLCALL
106 xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
108 xmlXPathPopString (xmlXPathParserContextPtr ctxt);
109XMLPUBFUN xmlNodeSetPtr XMLCALL
110 xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
111XMLPUBFUN 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 if (ctxt->valueNr < ctxt->valueFrame + (x)) \
301 XP_ERROR(XPATH_STACK_ERROR);
302
308#define CAST_TO_STRING \
309 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
310 xmlXPathStringFunction(ctxt, 1);
311
317#define CAST_TO_NUMBER \
318 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
319 xmlXPathNumberFunction(ctxt, 1);
320
326#define CAST_TO_BOOLEAN \
327 if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
328 xmlXPathBooleanFunction(ctxt, 1);
329
330/*
331 * Variable Lookup forwarding.
332 */
333
335 xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
336 xmlXPathVariableLookupFunc f,
337 void *data);
338
339/*
340 * Function Lookup forwarding.
341 */
342
344 xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
345 xmlXPathFuncLookupFunc f,
346 void *funcCtxt);
347
348/*
349 * Error reporting.
350 */
352 xmlXPatherror (xmlXPathParserContextPtr ctxt,
353 const char *file,
354 int line,
355 int no);
356
358 xmlXPathErr (xmlXPathParserContextPtr ctxt,
359 int error);
360
361#ifdef LIBXML_DEBUG_ENABLED
363 xmlXPathDebugDumpObject (FILE *output,
364 xmlXPathObjectPtr cur,
365 int depth);
367 xmlXPathDebugDumpCompExpr(FILE *output,
368 xmlXPathCompExprPtr comp,
369 int depth);
370#endif
375 xmlXPathNodeSetContains (xmlNodeSetPtr cur,
377XMLPUBFUN xmlNodeSetPtr XMLCALL
378 xmlXPathDifference (xmlNodeSetPtr nodes1,
379 xmlNodeSetPtr nodes2);
380XMLPUBFUN xmlNodeSetPtr XMLCALL
381 xmlXPathIntersection (xmlNodeSetPtr nodes1,
382 xmlNodeSetPtr nodes2);
383
384XMLPUBFUN xmlNodeSetPtr XMLCALL
385 xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
386XMLPUBFUN xmlNodeSetPtr XMLCALL
387 xmlXPathDistinct (xmlNodeSetPtr nodes);
388
390 xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
391 xmlNodeSetPtr nodes2);
392
393XMLPUBFUN xmlNodeSetPtr XMLCALL
394 xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
396XMLPUBFUN xmlNodeSetPtr XMLCALL
397 xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
398 xmlNodeSetPtr nodes2);
399XMLPUBFUN xmlNodeSetPtr XMLCALL
400 xmlXPathNodeLeading (xmlNodeSetPtr nodes,
402XMLPUBFUN xmlNodeSetPtr XMLCALL
403 xmlXPathLeading (xmlNodeSetPtr nodes1,
404 xmlNodeSetPtr nodes2);
405
406XMLPUBFUN xmlNodeSetPtr XMLCALL
407 xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
409XMLPUBFUN xmlNodeSetPtr XMLCALL
410 xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
411 xmlNodeSetPtr nodes2);
412XMLPUBFUN xmlNodeSetPtr XMLCALL
413 xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
415XMLPUBFUN xmlNodeSetPtr XMLCALL
416 xmlXPathTrailing (xmlNodeSetPtr nodes1,
417 xmlNodeSetPtr nodes2);
418
419
425 xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
426 const xmlChar *prefix,
427 const xmlChar *ns_uri);
429 xmlXPathNsLookup (xmlXPathContextPtr ctxt,
430 const xmlChar *prefix);
432 xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
433
435 xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
436 const xmlChar *name,
437 xmlXPathFunction f);
439 xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
440 const xmlChar *name,
441 const xmlChar *ns_uri,
442 xmlXPathFunction f);
444 xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
445 const xmlChar *name,
446 xmlXPathObjectPtr value);
448 xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
449 const xmlChar *name,
450 const xmlChar *ns_uri,
451 xmlXPathObjectPtr value);
452XMLPUBFUN xmlXPathFunction XMLCALL
453 xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
454 const xmlChar *name);
455XMLPUBFUN xmlXPathFunction XMLCALL
456 xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
457 const xmlChar *name,
458 const xmlChar *ns_uri);
460 xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
461XMLPUBFUN xmlXPathObjectPtr XMLCALL
462 xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
463 const xmlChar *name);
464XMLPUBFUN xmlXPathObjectPtr XMLCALL
465 xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
466 const xmlChar *name,
467 const xmlChar *ns_uri);
469 xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
470
474XMLPUBFUN xmlXPathParserContextPtr XMLCALL
475 xmlXPathNewParserContext (const xmlChar *str,
476 xmlXPathContextPtr ctxt);
478 xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
479
480/* TODO: remap to xmlXPathValuePop and Push. */
481XMLPUBFUN xmlXPathObjectPtr XMLCALL
482 valuePop (xmlXPathParserContextPtr ctxt);
484 valuePush (xmlXPathParserContextPtr ctxt,
485 xmlXPathObjectPtr value);
486
487XMLPUBFUN xmlXPathObjectPtr XMLCALL
488 xmlXPathNewString (const xmlChar *val);
489XMLPUBFUN xmlXPathObjectPtr XMLCALL
490 xmlXPathNewCString (const char *val);
491XMLPUBFUN xmlXPathObjectPtr XMLCALL
492 xmlXPathWrapString (xmlChar *val);
493XMLPUBFUN xmlXPathObjectPtr XMLCALL
494 xmlXPathWrapCString (char * val);
495XMLPUBFUN xmlXPathObjectPtr XMLCALL
496 xmlXPathNewFloat (double val);
497XMLPUBFUN xmlXPathObjectPtr XMLCALL
498 xmlXPathNewBoolean (int val);
499XMLPUBFUN xmlXPathObjectPtr XMLCALL
500 xmlXPathNewNodeSet (xmlNodePtr val);
501XMLPUBFUN xmlXPathObjectPtr XMLCALL
502 xmlXPathNewValueTree (xmlNodePtr val);
504 xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
507 xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
510 xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
512 xmlNsPtr ns);
514 xmlXPathNodeSetSort (xmlNodeSetPtr set);
515
517 xmlXPathRoot (xmlXPathParserContextPtr ctxt);
519 xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
521 xmlXPathParseName (xmlXPathParserContextPtr ctxt);
523 xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
524
525/*
526 * Existing functions.
527 */
528XMLPUBFUN double XMLCALL
531 xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
532 xmlXPathObjectPtr res);
534 xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
535XMLPUBFUN xmlNodeSetPtr XMLCALL
536 xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
537 xmlNodeSetPtr val2);
539 xmlXPathNodeSetDel (xmlNodeSetPtr cur,
542 xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
543 int val);
544XMLPUBFUN xmlXPathObjectPtr XMLCALL
545 xmlXPathNewNodeSetList (xmlNodeSetPtr val);
546XMLPUBFUN xmlXPathObjectPtr XMLCALL
547 xmlXPathWrapNodeSet (xmlNodeSetPtr val);
548XMLPUBFUN xmlXPathObjectPtr XMLCALL
549 xmlXPathWrapExternal (void *val);
550
551XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
552XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
553XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
554XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
555XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
556XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
557XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
558XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
559XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
560
561XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
562
563/*
564 * Some of the axis navigation routines.
565 */
566XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
568XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
570XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
572XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
574XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
576XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
578XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
580XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
582XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
584XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
586XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
588XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
590XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
592/*
593 * The official core of XPath functions.
594 */
595XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
596XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
597XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
598XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
599XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
600XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
601XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
602XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
603XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
604XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
605XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
606XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
607XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
608XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
609XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
610XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
611XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
612XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
613XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
614XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
615XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
616XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
617XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
618XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
619XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
620XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
621
625XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
626
627#ifdef __cplusplus
628}
629#endif
630
631#endif /* LIBXML_XPATH_ENABLED */
632#endif /* ! __XML_XPATH_INTERNALS_H__ */
Definition: _set.h:50
static WCHAR no[MAX_STRING_RESOURCE_LEN]
Definition: object.c:2340
#define XMLCALL
FxCollectionEntry * cur
GLint GLint GLsizei GLsizei GLsizei depth
Definition: gl.h:1546
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLuint res
Definition: glext.h:9613
GLfloat f
Definition: glext.h:7540
GLuint GLfloat * val
Definition: glext.h:7180
#define error(str)
Definition: mkdosfs.c:1605
static int strict
Definition: error.c:51
const WCHAR * str
Definition: tree.h:489
Definition: tree.h:389
Definition: fci.c:127
Definition: parser.c:49
Definition: name.c:39
Definition: mxnamespace.c:45
Definition: dlist.c:348
Definition: pdh_main.c:94
#define XMLPUBFUN
Definition: xmlexports.h:61
unsigned char xmlChar
Definition: xmlstring.h:28
double xmlXPathStringEvalNumber(const xmlChar *str)