Coverage Report

Created: 2024-01-20 12:31

/src/libxml2/include/libxml/xpathInternals.h
Line
Count
Source (jump to first uncovered line)
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
 */
34
/**
35
 * xmlXPathSetError:
36
 * @ctxt:  an XPath parser context
37
 * @err:  an xmlXPathError code
38
 *
39
 * Raises an error.
40
 */
41
#define xmlXPathSetError(ctxt, err)         \
42
0
    { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));     \
43
0
      if ((ctxt) != NULL) (ctxt)->error = (err); }
44
45
/**
46
 * xmlXPathSetArityError:
47
 * @ctxt:  an XPath parser context
48
 *
49
 * Raises an XPATH_INVALID_ARITY error.
50
 */
51
#define xmlXPathSetArityError(ctxt)         \
52
    xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
53
54
/**
55
 * xmlXPathSetTypeError:
56
 * @ctxt:  an XPath parser context
57
 *
58
 * Raises an XPATH_INVALID_TYPE error.
59
 */
60
#define xmlXPathSetTypeError(ctxt)          \
61
0
    xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
62
63
/**
64
 * xmlXPathGetError:
65
 * @ctxt:  an XPath parser context
66
 *
67
 * Get the error code of an XPath context.
68
 *
69
 * Returns the context error.
70
 */
71
#define xmlXPathGetError(ctxt)    ((ctxt)->error)
72
73
/**
74
 * xmlXPathCheckError:
75
 * @ctxt:  an XPath parser context
76
 *
77
 * Check if an XPath error was raised.
78
 *
79
 * Returns true if an error has been raised, false otherwise.
80
 */
81
#define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK)
82
83
/**
84
 * xmlXPathGetDocument:
85
 * @ctxt:  an XPath parser context
86
 *
87
 * Get the document of an XPath context.
88
 *
89
 * Returns the context document.
90
 */
91
#define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
92
93
/**
94
 * xmlXPathGetContextNode:
95
 * @ctxt: an XPath parser context
96
 *
97
 * Get the context node of an XPath context.
98
 *
99
 * Returns the context node.
100
 */
101
#define xmlXPathGetContextNode(ctxt)  ((ctxt)->context->node)
102
103
XMLPUBFUN int
104
    xmlXPathPopBoolean  (xmlXPathParserContextPtr ctxt);
105
XMLPUBFUN double
106
    xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
107
XMLPUBFUN xmlChar *
108
    xmlXPathPopString (xmlXPathParserContextPtr ctxt);
109
XMLPUBFUN xmlNodeSetPtr
110
    xmlXPathPopNodeSet  (xmlXPathParserContextPtr ctxt);
111
XMLPUBFUN void *
112
    xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
113
114
/**
115
 * xmlXPathReturnBoolean:
116
 * @ctxt:  an XPath parser context
117
 * @val:  a boolean
118
 *
119
 * Pushes the boolean @val on the context stack.
120
 */
121
#define xmlXPathReturnBoolean(ctxt, val)        \
122
    valuePush((ctxt), xmlXPathNewBoolean(val))
123
124
/**
125
 * xmlXPathReturnTrue:
126
 * @ctxt:  an XPath parser context
127
 *
128
 * Pushes true on the context stack.
129
 */
130
#define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1)
131
132
/**
133
 * xmlXPathReturnFalse:
134
 * @ctxt:  an XPath parser context
135
 *
136
 * Pushes false on the context stack.
137
 */
138
#define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0)
139
140
/**
141
 * xmlXPathReturnNumber:
142
 * @ctxt:  an XPath parser context
143
 * @val:  a double
144
 *
145
 * Pushes the double @val on the context stack.
146
 */
147
#define xmlXPathReturnNumber(ctxt, val)         \
148
    valuePush((ctxt), xmlXPathNewFloat(val))
149
150
/**
151
 * xmlXPathReturnString:
152
 * @ctxt:  an XPath parser context
153
 * @str:  a string
154
 *
155
 * Pushes the string @str on the context stack.
156
 */
157
#define xmlXPathReturnString(ctxt, str)         \
158
    valuePush((ctxt), xmlXPathWrapString(str))
159
160
/**
161
 * xmlXPathReturnEmptyString:
162
 * @ctxt:  an XPath parser context
163
 *
164
 * Pushes an empty string on the stack.
165
 */
166
#define xmlXPathReturnEmptyString(ctxt)         \
167
    valuePush((ctxt), xmlXPathNewCString(""))
168
169
/**
170
 * xmlXPathReturnNodeSet:
171
 * @ctxt:  an XPath parser context
172
 * @ns:  a node-set
173
 *
174
 * Pushes the node-set @ns on the context stack.
175
 */
176
#define xmlXPathReturnNodeSet(ctxt, ns)         \
177
    valuePush((ctxt), xmlXPathWrapNodeSet(ns))
178
179
/**
180
 * xmlXPathReturnEmptyNodeSet:
181
 * @ctxt:  an XPath parser context
182
 *
183
 * Pushes an empty node-set on the context stack.
184
 */
185
#define xmlXPathReturnEmptyNodeSet(ctxt)        \
186
    valuePush((ctxt), xmlXPathNewNodeSet(NULL))
187
188
/**
189
 * xmlXPathReturnExternal:
190
 * @ctxt:  an XPath parser context
191
 * @val:  user data
192
 *
193
 * Pushes user data on the context stack.
194
 */
195
#define xmlXPathReturnExternal(ctxt, val)       \
196
    valuePush((ctxt), xmlXPathWrapExternal(val))
197
198
/**
199
 * xmlXPathStackIsNodeSet:
200
 * @ctxt: an XPath parser context
201
 *
202
 * Check if the current value on the XPath stack is a node set or
203
 * an XSLT value tree.
204
 *
205
 * Returns true if the current object on the stack is a node-set.
206
 */
207
#define xmlXPathStackIsNodeSet(ctxt)          \
208
0
    (((ctxt)->value != NULL)            \
209
0
     && (((ctxt)->value->type == XPATH_NODESET)        \
210
0
         || ((ctxt)->value->type == XPATH_XSLT_TREE)))
211
212
/**
213
 * xmlXPathStackIsExternal:
214
 * @ctxt: an XPath parser context
215
 *
216
 * Checks if the current value on the XPath stack is an external
217
 * object.
218
 *
219
 * Returns true if the current object on the stack is an external
220
 * object.
221
 */
222
#define xmlXPathStackIsExternal(ctxt)         \
223
  ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
224
225
/**
226
 * xmlXPathEmptyNodeSet:
227
 * @ns:  a node-set
228
 *
229
 * Empties a node-set.
230
 */
231
#define xmlXPathEmptyNodeSet(ns)          \
232
    { while ((ns)->nodeNr > 0) (ns)->nodeTab[--(ns)->nodeNr] = NULL; }
233
234
/**
235
 * CHECK_ERROR:
236
 *
237
 * Macro to return from the function if an XPath error was detected.
238
 */
239
#define CHECK_ERROR             \
240
0
    if (ctxt->error != XPATH_EXPRESSION_OK) return
241
242
/**
243
 * CHECK_ERROR0:
244
 *
245
 * Macro to return 0 from the function if an XPath error was detected.
246
 */
247
#define CHECK_ERROR0              \
248
0
    if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
249
250
/**
251
 * XP_ERROR:
252
 * @X:  the error code
253
 *
254
 * Macro to raise an XPath error and return.
255
 */
256
#define XP_ERROR(X)             \
257
0
    { xmlXPathErr(ctxt, X); return; }
258
259
/**
260
 * XP_ERROR0:
261
 * @X:  the error code
262
 *
263
 * Macro to raise an XPath error and return 0.
264
 */
265
#define XP_ERROR0(X)              \
266
0
    { xmlXPathErr(ctxt, X); return(0); }
267
268
/**
269
 * CHECK_TYPE:
270
 * @typeval:  the XPath type
271
 *
272
 * Macro to check that the value on top of the XPath stack is of a given
273
 * type.
274
 */
275
#define CHECK_TYPE(typeval)           \
276
0
    if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
277
0
        XP_ERROR(XPATH_INVALID_TYPE)
278
279
/**
280
 * CHECK_TYPE0:
281
 * @typeval:  the XPath type
282
 *
283
 * Macro to check that the value on top of the XPath stack is of a given
284
 * type. Return(0) in case of failure
285
 */
286
#define CHECK_TYPE0(typeval)            \
287
0
    if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
288
0
        XP_ERROR0(XPATH_INVALID_TYPE)
289
290
/**
291
 * CHECK_ARITY:
292
 * @x:  the number of expected args
293
 *
294
 * Macro to check that the number of args passed to an XPath function matches.
295
 */
296
#define CHECK_ARITY(x)              \
297
0
    if (ctxt == NULL) return;           \
298
0
    if (nargs != (x))             \
299
0
        XP_ERROR(XPATH_INVALID_ARITY);         \
300
0
    if (ctxt->valueNr < ctxt->valueFrame + (x))       \
301
0
        XP_ERROR(XPATH_STACK_ERROR);
302
303
/**
304
 * CAST_TO_STRING:
305
 *
306
 * Macro to try to cast the value on the top of the XPath stack to a string.
307
 */
308
#define CAST_TO_STRING              \
309
0
    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
310
0
        xmlXPathStringFunction(ctxt, 1);
311
312
/**
313
 * CAST_TO_NUMBER:
314
 *
315
 * Macro to try to cast the value on the top of the XPath stack to a number.
316
 */
317
#define CAST_TO_NUMBER              \
318
0
    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
319
0
        xmlXPathNumberFunction(ctxt, 1);
320
321
/**
322
 * CAST_TO_BOOLEAN:
323
 *
324
 * Macro to try to cast the value on the top of the XPath stack to a boolean.
325
 */
326
#define CAST_TO_BOOLEAN             \
327
0
    if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
328
0
        xmlXPathBooleanFunction(ctxt, 1);
329
330
/*
331
 * Variable Lookup forwarding.
332
 */
333
334
XMLPUBFUN void
335
  xmlXPathRegisterVariableLookup  (xmlXPathContextPtr ctxt,
336
           xmlXPathVariableLookupFunc f,
337
           void *data);
338
339
/*
340
 * Function Lookup forwarding.
341
 */
342
343
XMLPUBFUN void
344
      xmlXPathRegisterFuncLookup  (xmlXPathContextPtr ctxt,
345
           xmlXPathFuncLookupFunc f,
346
           void *funcCtxt);
347
348
/*
349
 * Error reporting.
350
 */
351
XMLPUBFUN void
352
    xmlXPatherror (xmlXPathParserContextPtr ctxt,
353
         const char *file,
354
         int line,
355
         int no);
356
357
XMLPUBFUN void
358
    xmlXPathErr (xmlXPathParserContextPtr ctxt,
359
         int error);
360
361
#ifdef LIBXML_DEBUG_ENABLED
362
XMLPUBFUN void
363
    xmlXPathDebugDumpObject (FILE *output,
364
           xmlXPathObjectPtr cur,
365
           int depth);
366
XMLPUBFUN void
367
      xmlXPathDebugDumpCompExpr(FILE *output,
368
           xmlXPathCompExprPtr comp,
369
           int depth);
370
#endif
371
/**
372
 * NodeSet handling.
373
 */
374
XMLPUBFUN int
375
    xmlXPathNodeSetContains   (xmlNodeSetPtr cur,
376
             xmlNodePtr val);
377
XMLPUBFUN xmlNodeSetPtr
378
    xmlXPathDifference    (xmlNodeSetPtr nodes1,
379
             xmlNodeSetPtr nodes2);
380
XMLPUBFUN xmlNodeSetPtr
381
    xmlXPathIntersection    (xmlNodeSetPtr nodes1,
382
             xmlNodeSetPtr nodes2);
383
384
XMLPUBFUN xmlNodeSetPtr
385
    xmlXPathDistinctSorted    (xmlNodeSetPtr nodes);
386
XMLPUBFUN xmlNodeSetPtr
387
    xmlXPathDistinct    (xmlNodeSetPtr nodes);
388
389
XMLPUBFUN int
390
    xmlXPathHasSameNodes    (xmlNodeSetPtr nodes1,
391
             xmlNodeSetPtr nodes2);
392
393
XMLPUBFUN xmlNodeSetPtr
394
    xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
395
             xmlNodePtr node);
396
XMLPUBFUN xmlNodeSetPtr
397
    xmlXPathLeadingSorted   (xmlNodeSetPtr nodes1,
398
             xmlNodeSetPtr nodes2);
399
XMLPUBFUN xmlNodeSetPtr
400
    xmlXPathNodeLeading   (xmlNodeSetPtr nodes,
401
             xmlNodePtr node);
402
XMLPUBFUN xmlNodeSetPtr
403
    xmlXPathLeading     (xmlNodeSetPtr nodes1,
404
             xmlNodeSetPtr nodes2);
405
406
XMLPUBFUN xmlNodeSetPtr
407
    xmlXPathNodeTrailingSorted  (xmlNodeSetPtr nodes,
408
             xmlNodePtr node);
409
XMLPUBFUN xmlNodeSetPtr
410
    xmlXPathTrailingSorted    (xmlNodeSetPtr nodes1,
411
             xmlNodeSetPtr nodes2);
412
XMLPUBFUN xmlNodeSetPtr
413
    xmlXPathNodeTrailing    (xmlNodeSetPtr nodes,
414
             xmlNodePtr node);
415
XMLPUBFUN xmlNodeSetPtr
416
    xmlXPathTrailing    (xmlNodeSetPtr nodes1,
417
             xmlNodeSetPtr nodes2);
418
419
420
/**
421
 * Extending a context.
422
 */
423
424
XMLPUBFUN int
425
    xmlXPathRegisterNs    (xmlXPathContextPtr ctxt,
426
             const xmlChar *prefix,
427
             const xmlChar *ns_uri);
428
XMLPUBFUN const xmlChar *
429
    xmlXPathNsLookup    (xmlXPathContextPtr ctxt,
430
             const xmlChar *prefix);
431
XMLPUBFUN void
432
    xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
433
434
XMLPUBFUN int
435
    xmlXPathRegisterFunc    (xmlXPathContextPtr ctxt,
436
             const xmlChar *name,
437
             xmlXPathFunction f);
438
XMLPUBFUN int
439
    xmlXPathRegisterFuncNS    (xmlXPathContextPtr ctxt,
440
             const xmlChar *name,
441
             const xmlChar *ns_uri,
442
             xmlXPathFunction f);
443
XMLPUBFUN int
444
    xmlXPathRegisterVariable  (xmlXPathContextPtr ctxt,
445
             const xmlChar *name,
446
             xmlXPathObjectPtr value);
447
XMLPUBFUN int
448
    xmlXPathRegisterVariableNS  (xmlXPathContextPtr ctxt,
449
             const xmlChar *name,
450
             const xmlChar *ns_uri,
451
             xmlXPathObjectPtr value);
452
XMLPUBFUN xmlXPathFunction
453
    xmlXPathFunctionLookup    (xmlXPathContextPtr ctxt,
454
             const xmlChar *name);
455
XMLPUBFUN xmlXPathFunction
456
    xmlXPathFunctionLookupNS  (xmlXPathContextPtr ctxt,
457
             const xmlChar *name,
458
             const xmlChar *ns_uri);
459
XMLPUBFUN void
460
    xmlXPathRegisteredFuncsCleanup  (xmlXPathContextPtr ctxt);
461
XMLPUBFUN xmlXPathObjectPtr
462
    xmlXPathVariableLookup    (xmlXPathContextPtr ctxt,
463
             const xmlChar *name);
464
XMLPUBFUN xmlXPathObjectPtr
465
    xmlXPathVariableLookupNS  (xmlXPathContextPtr ctxt,
466
             const xmlChar *name,
467
             const xmlChar *ns_uri);
468
XMLPUBFUN void
469
    xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
470
471
/**
472
 * Utilities to extend XPath.
473
 */
474
XMLPUBFUN xmlXPathParserContextPtr
475
      xmlXPathNewParserContext  (const xmlChar *str,
476
             xmlXPathContextPtr ctxt);
477
XMLPUBFUN void
478
    xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
479
480
/* TODO: remap to xmlXPathValuePop and Push. */
481
XMLPUBFUN xmlXPathObjectPtr
482
    valuePop      (xmlXPathParserContextPtr ctxt);
483
XMLPUBFUN int
484
    valuePush     (xmlXPathParserContextPtr ctxt,
485
             xmlXPathObjectPtr value);
486
487
XMLPUBFUN xmlXPathObjectPtr
488
    xmlXPathNewString   (const xmlChar *val);
489
XMLPUBFUN xmlXPathObjectPtr
490
    xmlXPathNewCString    (const char *val);
491
XMLPUBFUN xmlXPathObjectPtr
492
    xmlXPathWrapString    (xmlChar *val);
493
XMLPUBFUN xmlXPathObjectPtr
494
    xmlXPathWrapCString   (char * val);
495
XMLPUBFUN xmlXPathObjectPtr
496
    xmlXPathNewFloat    (double val);
497
XMLPUBFUN xmlXPathObjectPtr
498
    xmlXPathNewBoolean    (int val);
499
XMLPUBFUN xmlXPathObjectPtr
500
    xmlXPathNewNodeSet    (xmlNodePtr val);
501
XMLPUBFUN xmlXPathObjectPtr
502
    xmlXPathNewValueTree    (xmlNodePtr val);
503
XMLPUBFUN int
504
    xmlXPathNodeSetAdd    (xmlNodeSetPtr cur,
505
             xmlNodePtr val);
506
XMLPUBFUN int
507
    xmlXPathNodeSetAddUnique  (xmlNodeSetPtr cur,
508
             xmlNodePtr val);
509
XMLPUBFUN int
510
    xmlXPathNodeSetAddNs    (xmlNodeSetPtr cur,
511
             xmlNodePtr node,
512
             xmlNsPtr ns);
513
XMLPUBFUN void
514
    xmlXPathNodeSetSort   (xmlNodeSetPtr set);
515
516
XMLPUBFUN void
517
    xmlXPathRoot      (xmlXPathParserContextPtr ctxt);
518
XMLPUBFUN void
519
    xmlXPathEvalExpr    (xmlXPathParserContextPtr ctxt);
520
XMLPUBFUN xmlChar *
521
    xmlXPathParseName   (xmlXPathParserContextPtr ctxt);
522
XMLPUBFUN xmlChar *
523
    xmlXPathParseNCName   (xmlXPathParserContextPtr ctxt);
524
525
/*
526
 * Existing functions.
527
 */
528
XMLPUBFUN double
529
    xmlXPathStringEvalNumber  (const xmlChar *str);
530
XMLPUBFUN int
531
    xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
532
             xmlXPathObjectPtr res);
533
XMLPUBFUN void
534
    xmlXPathRegisterAllFunctions  (xmlXPathContextPtr ctxt);
535
XMLPUBFUN xmlNodeSetPtr
536
    xmlXPathNodeSetMerge    (xmlNodeSetPtr val1,
537
             xmlNodeSetPtr val2);
538
XMLPUBFUN void
539
    xmlXPathNodeSetDel    (xmlNodeSetPtr cur,
540
             xmlNodePtr val);
541
XMLPUBFUN void
542
    xmlXPathNodeSetRemove   (xmlNodeSetPtr cur,
543
             int val);
544
XMLPUBFUN xmlXPathObjectPtr
545
    xmlXPathNewNodeSetList    (xmlNodeSetPtr val);
546
XMLPUBFUN xmlXPathObjectPtr
547
    xmlXPathWrapNodeSet   (xmlNodeSetPtr val);
548
XMLPUBFUN xmlXPathObjectPtr
549
    xmlXPathWrapExternal    (void *val);
550
551
XMLPUBFUN int xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
552
XMLPUBFUN int xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
553
XMLPUBFUN int xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
554
XMLPUBFUN void xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
555
XMLPUBFUN void xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
556
XMLPUBFUN void xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
557
XMLPUBFUN void xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
558
XMLPUBFUN void xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
559
XMLPUBFUN void xmlXPathModValues(xmlXPathParserContextPtr ctxt);
560
561
XMLPUBFUN int xmlXPathIsNodeType(const xmlChar *name);
562
563
/*
564
 * Some of the axis navigation routines.
565
 */
566
XMLPUBFUN xmlNodePtr xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
567
      xmlNodePtr cur);
568
XMLPUBFUN xmlNodePtr xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
569
      xmlNodePtr cur);
570
XMLPUBFUN xmlNodePtr xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
571
      xmlNodePtr cur);
572
XMLPUBFUN xmlNodePtr xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
573
      xmlNodePtr cur);
574
XMLPUBFUN xmlNodePtr xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
575
      xmlNodePtr cur);
576
XMLPUBFUN xmlNodePtr xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
577
      xmlNodePtr cur);
578
XMLPUBFUN xmlNodePtr xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
579
      xmlNodePtr cur);
580
XMLPUBFUN xmlNodePtr xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
581
      xmlNodePtr cur);
582
XMLPUBFUN xmlNodePtr xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
583
      xmlNodePtr cur);
584
XMLPUBFUN xmlNodePtr xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
585
      xmlNodePtr cur);
586
XMLPUBFUN xmlNodePtr xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
587
      xmlNodePtr cur);
588
XMLPUBFUN xmlNodePtr xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
589
      xmlNodePtr cur);
590
XMLPUBFUN xmlNodePtr xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
591
      xmlNodePtr cur);
592
/*
593
 * The official core of XPath functions.
594
 */
595
XMLPUBFUN void xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
596
XMLPUBFUN void xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
597
XMLPUBFUN void xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
598
XMLPUBFUN void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
599
XMLPUBFUN void xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
600
XMLPUBFUN void xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
601
XMLPUBFUN void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
602
XMLPUBFUN void xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
603
XMLPUBFUN void xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
604
XMLPUBFUN void xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
605
XMLPUBFUN void xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
606
XMLPUBFUN void xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
607
XMLPUBFUN void xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
608
XMLPUBFUN void xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
609
XMLPUBFUN void xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
610
XMLPUBFUN void xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
611
XMLPUBFUN void xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
612
XMLPUBFUN void xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
613
XMLPUBFUN void xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
614
XMLPUBFUN void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
615
XMLPUBFUN void xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
616
XMLPUBFUN void xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
617
XMLPUBFUN void xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
618
XMLPUBFUN void xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
619
XMLPUBFUN void xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
620
XMLPUBFUN void xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
621
622
/**
623
 * Really internal functions
624
 */
625
XMLPUBFUN void xmlXPathNodeSetFreeNs(xmlNsPtr ns);
626
627
#ifdef __cplusplus
628
}
629
#endif
630
631
#endif /* LIBXML_XPATH_ENABLED */
632
#endif /* ! __XML_XPATH_INTERNALS_H__ */