1 /* libxml2 - Library for parsing XML documents
2  * Copyright (C) 2006-2019 Free Software Foundation, Inc.
3  *
4  * This file is not part of the GNU gettext program, but is used with
5  * GNU gettext.
6  *
7  * The original copyright notice is as follows:
8  */
9 
10 /*
11  * Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
12  *
13  * Permission is hereby granted, free of charge, to any person obtaining a copy
14  * of this software and associated documentation files (the "Software"), to deal
15  * in the Software without restriction, including without limitation the rights
16  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17  * copies of the Software, and to permit persons to whom the Software is fur-
18  * nished to do so, subject to the following conditions:
19  *
20  * The above copyright notice and this permission notice shall be included in
21  * all copies or substantial portions of the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
25  * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
26  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29  * THE SOFTWARE.
30  *
31  * Author: Daniel Veillard
32  */
33 
34 /*
35  * Summary: internal interfaces for XML Path Language implementation
36  * Description: internal interfaces for XML Path Language implementation
37  *              used to build new modules on top of XPath like XPointer and
38  *              XSLT
39  */
40 
41 #ifndef __XML_XPATH_INTERNALS_H__
42 #define __XML_XPATH_INTERNALS_H__
43 
44 #include <libxml/xmlversion.h>
45 #include <libxml/xpath.h>
46 
47 #ifdef LIBXML_XPATH_ENABLED
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
53 /************************************************************************
54  *									*
55  *			Helpers						*
56  *									*
57  ************************************************************************/
58 
59 /*
60  * Many of these macros may later turn into functions. They
61  * shouldn't be used in #ifdef's preprocessor instructions.
62  */
63 /**
64  * xmlXPathSetError:
65  * @ctxt:  an XPath parser context
66  * @err:  an xmlXPathError code
67  *
68  * Raises an error.
69  */
70 #define xmlXPathSetError(ctxt, err)					\
71     { xmlXPatherror((ctxt), __FILE__, __LINE__, (err));			\
72       if ((ctxt) != NULL) (ctxt)->error = (err); }
73 
74 /**
75  * xmlXPathSetArityError:
76  * @ctxt:  an XPath parser context
77  *
78  * Raises an XPATH_INVALID_ARITY error.
79  */
80 #define xmlXPathSetArityError(ctxt)					\
81     xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
82 
83 /**
84  * xmlXPathSetTypeError:
85  * @ctxt:  an XPath parser context
86  *
87  * Raises an XPATH_INVALID_TYPE error.
88  */
89 #define xmlXPathSetTypeError(ctxt)					\
90     xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
91 
92 /**
93  * xmlXPathGetError:
94  * @ctxt:  an XPath parser context
95  *
96  * Get the error code of an XPath context.
97  *
98  * Returns the context error.
99  */
100 #define xmlXPathGetError(ctxt)	  ((ctxt)->error)
101 
102 /**
103  * xmlXPathCheckError:
104  * @ctxt:  an XPath parser context
105  *
106  * Check if an XPath error was raised.
107  *
108  * Returns true if an error has been raised, false otherwise.
109  */
110 #define xmlXPathCheckError(ctxt)  ((ctxt)->error != XPATH_EXPRESSION_OK)
111 
112 /**
113  * xmlXPathGetDocument:
114  * @ctxt:  an XPath parser context
115  *
116  * Get the document of an XPath context.
117  *
118  * Returns the context document.
119  */
120 #define xmlXPathGetDocument(ctxt)	((ctxt)->context->doc)
121 
122 /**
123  * xmlXPathGetContextNode:
124  * @ctxt: an XPath parser context
125  *
126  * Get the context node of an XPath context.
127  *
128  * Returns the context node.
129  */
130 #define xmlXPathGetContextNode(ctxt)	((ctxt)->context->node)
131 
132 XMLPUBFUN int XMLCALL
133 		xmlXPathPopBoolean	(xmlXPathParserContextPtr ctxt);
134 XMLPUBFUN double XMLCALL
135 		xmlXPathPopNumber	(xmlXPathParserContextPtr ctxt);
136 XMLPUBFUN xmlChar * XMLCALL
137 		xmlXPathPopString	(xmlXPathParserContextPtr ctxt);
138 XMLPUBFUN xmlNodeSetPtr XMLCALL
139 		xmlXPathPopNodeSet	(xmlXPathParserContextPtr ctxt);
140 XMLPUBFUN void * XMLCALL
141 		xmlXPathPopExternal	(xmlXPathParserContextPtr ctxt);
142 
143 /**
144  * xmlXPathReturnBoolean:
145  * @ctxt:  an XPath parser context
146  * @val:  a boolean
147  *
148  * Pushes the boolean @val on the context stack.
149  */
150 #define xmlXPathReturnBoolean(ctxt, val)				\
151     valuePush((ctxt), xmlXPathNewBoolean(val))
152 
153 /**
154  * xmlXPathReturnTrue:
155  * @ctxt:  an XPath parser context
156  *
157  * Pushes true on the context stack.
158  */
159 #define xmlXPathReturnTrue(ctxt)   xmlXPathReturnBoolean((ctxt), 1)
160 
161 /**
162  * xmlXPathReturnFalse:
163  * @ctxt:  an XPath parser context
164  *
165  * Pushes false on the context stack.
166  */
167 #define xmlXPathReturnFalse(ctxt)  xmlXPathReturnBoolean((ctxt), 0)
168 
169 /**
170  * xmlXPathReturnNumber:
171  * @ctxt:  an XPath parser context
172  * @val:  a double
173  *
174  * Pushes the double @val on the context stack.
175  */
176 #define xmlXPathReturnNumber(ctxt, val)					\
177     valuePush((ctxt), xmlXPathNewFloat(val))
178 
179 /**
180  * xmlXPathReturnString:
181  * @ctxt:  an XPath parser context
182  * @str:  a string
183  *
184  * Pushes the string @str on the context stack.
185  */
186 #define xmlXPathReturnString(ctxt, str)					\
187     valuePush((ctxt), xmlXPathWrapString(str))
188 
189 /**
190  * xmlXPathReturnEmptyString:
191  * @ctxt:  an XPath parser context
192  *
193  * Pushes an empty string on the stack.
194  */
195 #define xmlXPathReturnEmptyString(ctxt)					\
196     valuePush((ctxt), xmlXPathNewCString(""))
197 
198 /**
199  * xmlXPathReturnNodeSet:
200  * @ctxt:  an XPath parser context
201  * @ns:  a node-set
202  *
203  * Pushes the node-set @ns on the context stack.
204  */
205 #define xmlXPathReturnNodeSet(ctxt, ns)					\
206     valuePush((ctxt), xmlXPathWrapNodeSet(ns))
207 
208 /**
209  * xmlXPathReturnEmptyNodeSet:
210  * @ctxt:  an XPath parser context
211  *
212  * Pushes an empty node-set on the context stack.
213  */
214 #define xmlXPathReturnEmptyNodeSet(ctxt)				\
215     valuePush((ctxt), xmlXPathNewNodeSet(NULL))
216 
217 /**
218  * xmlXPathReturnExternal:
219  * @ctxt:  an XPath parser context
220  * @val:  user data
221  *
222  * Pushes user data on the context stack.
223  */
224 #define xmlXPathReturnExternal(ctxt, val)				\
225     valuePush((ctxt), xmlXPathWrapExternal(val))
226 
227 /**
228  * xmlXPathStackIsNodeSet:
229  * @ctxt: an XPath parser context
230  *
231  * Check if the current value on the XPath stack is a node set or
232  * an XSLT value tree.
233  *
234  * Returns true if the current object on the stack is a node-set.
235  */
236 #define xmlXPathStackIsNodeSet(ctxt)					\
237     (((ctxt)->value != NULL)						\
238      && (((ctxt)->value->type == XPATH_NODESET)				\
239          || ((ctxt)->value->type == XPATH_XSLT_TREE)))
240 
241 /**
242  * xmlXPathStackIsExternal:
243  * @ctxt: an XPath parser context
244  *
245  * Checks if the current value on the XPath stack is an external
246  * object.
247  *
248  * Returns true if the current object on the stack is an external
249  * object.
250  */
251 #define xmlXPathStackIsExternal(ctxt)					\
252 	((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
253 
254 /**
255  * xmlXPathEmptyNodeSet:
256  * @ns:  a node-set
257  *
258  * Empties a node-set.
259  */
260 #define xmlXPathEmptyNodeSet(ns)					\
261     { while ((ns)->nodeNr > 0) (ns)->nodeTab[--(ns)->nodeNr] = NULL; }
262 
263 /**
264  * CHECK_ERROR:
265  *
266  * Macro to return from the function if an XPath error was detected.
267  */
268 #define CHECK_ERROR							\
269     if (ctxt->error != XPATH_EXPRESSION_OK) return
270 
271 /**
272  * CHECK_ERROR0:
273  *
274  * Macro to return 0 from the function if an XPath error was detected.
275  */
276 #define CHECK_ERROR0							\
277     if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
278 
279 /**
280  * XP_ERROR:
281  * @X:  the error code
282  *
283  * Macro to raise an XPath error and return.
284  */
285 #define XP_ERROR(X)							\
286     { xmlXPathErr(ctxt, X); return; }
287 
288 /**
289  * XP_ERROR0:
290  * @X:  the error code
291  *
292  * Macro to raise an XPath error and return 0.
293  */
294 #define XP_ERROR0(X)							\
295     { xmlXPathErr(ctxt, X); return(0); }
296 
297 /**
298  * CHECK_TYPE:
299  * @typeval:  the XPath type
300  *
301  * Macro to check that the value on top of the XPath stack is of a given
302  * type.
303  */
304 #define CHECK_TYPE(typeval)						\
305     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
306         XP_ERROR(XPATH_INVALID_TYPE)
307 
308 /**
309  * CHECK_TYPE0:
310  * @typeval:  the XPath type
311  *
312  * Macro to check that the value on top of the XPath stack is of a given
313  * type. Return(0) in case of failure
314  */
315 #define CHECK_TYPE0(typeval)						\
316     if ((ctxt->value == NULL) || (ctxt->value->type != typeval))	\
317         XP_ERROR0(XPATH_INVALID_TYPE)
318 
319 /**
320  * CHECK_ARITY:
321  * @x:  the number of expected args
322  *
323  * Macro to check that the number of args passed to an XPath function matches.
324  */
325 #define CHECK_ARITY(x)							\
326     if (ctxt == NULL) return;						\
327     if (nargs != (x))							\
328         XP_ERROR(XPATH_INVALID_ARITY);					\
329     if (ctxt->valueNr < ctxt->valueFrame + (x))				\
330         XP_ERROR(XPATH_STACK_ERROR);
331 
332 /**
333  * CAST_TO_STRING:
334  *
335  * Macro to try to cast the value on the top of the XPath stack to a string.
336  */
337 #define CAST_TO_STRING							\
338     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING))	\
339         xmlXPathStringFunction(ctxt, 1);
340 
341 /**
342  * CAST_TO_NUMBER:
343  *
344  * Macro to try to cast the value on the top of the XPath stack to a number.
345  */
346 #define CAST_TO_NUMBER							\
347     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER))	\
348         xmlXPathNumberFunction(ctxt, 1);
349 
350 /**
351  * CAST_TO_BOOLEAN:
352  *
353  * Macro to try to cast the value on the top of the XPath stack to a boolean.
354  */
355 #define CAST_TO_BOOLEAN							\
356     if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN))	\
357         xmlXPathBooleanFunction(ctxt, 1);
358 
359 /*
360  * Variable Lookup forwarding.
361  */
362 
363 XMLPUBFUN void XMLCALL
364 	xmlXPathRegisterVariableLookup	(xmlXPathContextPtr ctxt,
365 					 xmlXPathVariableLookupFunc f,
366 					 void *data);
367 
368 /*
369  * Function Lookup forwarding.
370  */
371 
372 XMLPUBFUN void XMLCALL
373 	    xmlXPathRegisterFuncLookup	(xmlXPathContextPtr ctxt,
374 					 xmlXPathFuncLookupFunc f,
375 					 void *funcCtxt);
376 
377 /*
378  * Error reporting.
379  */
380 XMLPUBFUN void XMLCALL
381 		xmlXPatherror	(xmlXPathParserContextPtr ctxt,
382 				 const char *file,
383 				 int line,
384 				 int no);
385 
386 XMLPUBFUN void XMLCALL
387 		xmlXPathErr	(xmlXPathParserContextPtr ctxt,
388 				 int error);
389 
390 #ifdef LIBXML_DEBUG_ENABLED
391 XMLPUBFUN void XMLCALL
392 		xmlXPathDebugDumpObject	(FILE *output,
393 					 xmlXPathObjectPtr cur,
394 					 int depth);
395 XMLPUBFUN void XMLCALL
396 	    xmlXPathDebugDumpCompExpr(FILE *output,
397 					 xmlXPathCompExprPtr comp,
398 					 int depth);
399 #endif
400 /**
401  * NodeSet handling.
402  */
403 XMLPUBFUN int XMLCALL
404 		xmlXPathNodeSetContains		(xmlNodeSetPtr cur,
405 						 xmlNodePtr val);
406 XMLPUBFUN xmlNodeSetPtr XMLCALL
407 		xmlXPathDifference		(xmlNodeSetPtr nodes1,
408 						 xmlNodeSetPtr nodes2);
409 XMLPUBFUN xmlNodeSetPtr XMLCALL
410 		xmlXPathIntersection		(xmlNodeSetPtr nodes1,
411 						 xmlNodeSetPtr nodes2);
412 
413 XMLPUBFUN xmlNodeSetPtr XMLCALL
414 		xmlXPathDistinctSorted		(xmlNodeSetPtr nodes);
415 XMLPUBFUN xmlNodeSetPtr XMLCALL
416 		xmlXPathDistinct		(xmlNodeSetPtr nodes);
417 
418 XMLPUBFUN int XMLCALL
419 		xmlXPathHasSameNodes		(xmlNodeSetPtr nodes1,
420 						 xmlNodeSetPtr nodes2);
421 
422 XMLPUBFUN xmlNodeSetPtr XMLCALL
423 		xmlXPathNodeLeadingSorted	(xmlNodeSetPtr nodes,
424 						 xmlNodePtr node);
425 XMLPUBFUN xmlNodeSetPtr XMLCALL
426 		xmlXPathLeadingSorted		(xmlNodeSetPtr nodes1,
427 						 xmlNodeSetPtr nodes2);
428 XMLPUBFUN xmlNodeSetPtr XMLCALL
429 		xmlXPathNodeLeading		(xmlNodeSetPtr nodes,
430 						 xmlNodePtr node);
431 XMLPUBFUN xmlNodeSetPtr XMLCALL
432 		xmlXPathLeading			(xmlNodeSetPtr nodes1,
433 						 xmlNodeSetPtr nodes2);
434 
435 XMLPUBFUN xmlNodeSetPtr XMLCALL
436 		xmlXPathNodeTrailingSorted	(xmlNodeSetPtr nodes,
437 						 xmlNodePtr node);
438 XMLPUBFUN xmlNodeSetPtr XMLCALL
439 		xmlXPathTrailingSorted		(xmlNodeSetPtr nodes1,
440 						 xmlNodeSetPtr nodes2);
441 XMLPUBFUN xmlNodeSetPtr XMLCALL
442 		xmlXPathNodeTrailing		(xmlNodeSetPtr nodes,
443 						 xmlNodePtr node);
444 XMLPUBFUN xmlNodeSetPtr XMLCALL
445 		xmlXPathTrailing		(xmlNodeSetPtr nodes1,
446 						 xmlNodeSetPtr nodes2);
447 
448 
449 /**
450  * Extending a context.
451  */
452 
453 XMLPUBFUN int XMLCALL
454 		xmlXPathRegisterNs		(xmlXPathContextPtr ctxt,
455 						 const xmlChar *prefix,
456 						 const xmlChar *ns_uri);
457 XMLPUBFUN const xmlChar * XMLCALL
458 		xmlXPathNsLookup		(xmlXPathContextPtr ctxt,
459 						 const xmlChar *prefix);
460 XMLPUBFUN void XMLCALL
461 		xmlXPathRegisteredNsCleanup	(xmlXPathContextPtr ctxt);
462 
463 XMLPUBFUN int XMLCALL
464 		xmlXPathRegisterFunc		(xmlXPathContextPtr ctxt,
465 						 const xmlChar *name,
466 						 xmlXPathFunction f);
467 XMLPUBFUN int XMLCALL
468 		xmlXPathRegisterFuncNS		(xmlXPathContextPtr ctxt,
469 						 const xmlChar *name,
470 						 const xmlChar *ns_uri,
471 						 xmlXPathFunction f);
472 XMLPUBFUN int XMLCALL
473 		xmlXPathRegisterVariable	(xmlXPathContextPtr ctxt,
474 						 const xmlChar *name,
475 						 xmlXPathObjectPtr value);
476 XMLPUBFUN int XMLCALL
477 		xmlXPathRegisterVariableNS	(xmlXPathContextPtr ctxt,
478 						 const xmlChar *name,
479 						 const xmlChar *ns_uri,
480 						 xmlXPathObjectPtr value);
481 XMLPUBFUN xmlXPathFunction XMLCALL
482 		xmlXPathFunctionLookup		(xmlXPathContextPtr ctxt,
483 						 const xmlChar *name);
484 XMLPUBFUN xmlXPathFunction XMLCALL
485 		xmlXPathFunctionLookupNS	(xmlXPathContextPtr ctxt,
486 						 const xmlChar *name,
487 						 const xmlChar *ns_uri);
488 XMLPUBFUN void XMLCALL
489 		xmlXPathRegisteredFuncsCleanup	(xmlXPathContextPtr ctxt);
490 XMLPUBFUN xmlXPathObjectPtr XMLCALL
491 		xmlXPathVariableLookup		(xmlXPathContextPtr ctxt,
492 						 const xmlChar *name);
493 XMLPUBFUN xmlXPathObjectPtr XMLCALL
494 		xmlXPathVariableLookupNS	(xmlXPathContextPtr ctxt,
495 						 const xmlChar *name,
496 						 const xmlChar *ns_uri);
497 XMLPUBFUN void XMLCALL
498 		xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
499 
500 /**
501  * Utilities to extend XPath.
502  */
503 XMLPUBFUN xmlXPathParserContextPtr XMLCALL
504 		  xmlXPathNewParserContext	(const xmlChar *str,
505 						 xmlXPathContextPtr ctxt);
506 XMLPUBFUN void XMLCALL
507 		xmlXPathFreeParserContext	(xmlXPathParserContextPtr ctxt);
508 
509 /* TODO: remap to xmlXPathValuePop and Push. */
510 XMLPUBFUN xmlXPathObjectPtr XMLCALL
511 		valuePop			(xmlXPathParserContextPtr ctxt);
512 XMLPUBFUN int XMLCALL
513 		valuePush			(xmlXPathParserContextPtr ctxt,
514 						 xmlXPathObjectPtr value);
515 
516 XMLPUBFUN xmlXPathObjectPtr XMLCALL
517 		xmlXPathNewString		(const xmlChar *val);
518 XMLPUBFUN xmlXPathObjectPtr XMLCALL
519 		xmlXPathNewCString		(const char *val);
520 XMLPUBFUN xmlXPathObjectPtr XMLCALL
521 		xmlXPathWrapString		(xmlChar *val);
522 XMLPUBFUN xmlXPathObjectPtr XMLCALL
523 		xmlXPathWrapCString		(char * val);
524 XMLPUBFUN xmlXPathObjectPtr XMLCALL
525 		xmlXPathNewFloat		(double val);
526 XMLPUBFUN xmlXPathObjectPtr XMLCALL
527 		xmlXPathNewBoolean		(int val);
528 XMLPUBFUN xmlXPathObjectPtr XMLCALL
529 		xmlXPathNewNodeSet		(xmlNodePtr val);
530 XMLPUBFUN xmlXPathObjectPtr XMLCALL
531 		xmlXPathNewValueTree		(xmlNodePtr val);
532 XMLPUBFUN int XMLCALL
533 		xmlXPathNodeSetAdd		(xmlNodeSetPtr cur,
534 						 xmlNodePtr val);
535 XMLPUBFUN int XMLCALL
536 		xmlXPathNodeSetAddUnique	(xmlNodeSetPtr cur,
537 						 xmlNodePtr val);
538 XMLPUBFUN int XMLCALL
539 		xmlXPathNodeSetAddNs		(xmlNodeSetPtr cur,
540 						 xmlNodePtr node,
541 						 xmlNsPtr ns);
542 XMLPUBFUN void XMLCALL
543 		xmlXPathNodeSetSort		(xmlNodeSetPtr set);
544 
545 XMLPUBFUN void XMLCALL
546 		xmlXPathRoot			(xmlXPathParserContextPtr ctxt);
547 XMLPUBFUN void XMLCALL
548 		xmlXPathEvalExpr		(xmlXPathParserContextPtr ctxt);
549 XMLPUBFUN xmlChar * XMLCALL
550 		xmlXPathParseName		(xmlXPathParserContextPtr ctxt);
551 XMLPUBFUN xmlChar * XMLCALL
552 		xmlXPathParseNCName		(xmlXPathParserContextPtr ctxt);
553 
554 /*
555  * Existing functions.
556  */
557 XMLPUBFUN double XMLCALL
558 		xmlXPathStringEvalNumber	(const xmlChar *str);
559 XMLPUBFUN int XMLCALL
560 		xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
561 						 xmlXPathObjectPtr res);
562 XMLPUBFUN void XMLCALL
563 		xmlXPathRegisterAllFunctions	(xmlXPathContextPtr ctxt);
564 XMLPUBFUN xmlNodeSetPtr XMLCALL
565 		xmlXPathNodeSetMerge		(xmlNodeSetPtr val1,
566 						 xmlNodeSetPtr val2);
567 XMLPUBFUN void XMLCALL
568 		xmlXPathNodeSetDel		(xmlNodeSetPtr cur,
569 						 xmlNodePtr val);
570 XMLPUBFUN void XMLCALL
571 		xmlXPathNodeSetRemove		(xmlNodeSetPtr cur,
572 						 int val);
573 XMLPUBFUN xmlXPathObjectPtr XMLCALL
574 		xmlXPathNewNodeSetList		(xmlNodeSetPtr val);
575 XMLPUBFUN xmlXPathObjectPtr XMLCALL
576 		xmlXPathWrapNodeSet		(xmlNodeSetPtr val);
577 XMLPUBFUN xmlXPathObjectPtr XMLCALL
578 		xmlXPathWrapExternal		(void *val);
579 
580 XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
581 XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
582 XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
583 XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
584 XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
585 XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
586 XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
587 XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
588 XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
589 
590 XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
591 
592 /*
593  * Some of the axis navigation routines.
594  */
595 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
596 			xmlNodePtr cur);
597 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
598 			xmlNodePtr cur);
599 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
600 			xmlNodePtr cur);
601 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
602 			xmlNodePtr cur);
603 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
604 			xmlNodePtr cur);
605 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
606 			xmlNodePtr cur);
607 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
608 			xmlNodePtr cur);
609 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
610 			xmlNodePtr cur);
611 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
612 			xmlNodePtr cur);
613 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
614 			xmlNodePtr cur);
615 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
616 			xmlNodePtr cur);
617 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
618 			xmlNodePtr cur);
619 XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
620 			xmlNodePtr cur);
621 /*
622  * The official core of XPath functions.
623  */
624 XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
625 XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
626 XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
627 XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
628 XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
629 XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
630 XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
631 XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
632 XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
633 XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
634 XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
635 XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
636 XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
637 XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
638 XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
639 XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
640 XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
641 XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
642 XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
643 XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
644 XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
645 XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
646 XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
647 XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
648 XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
649 XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
650 
651 /**
652  * Really internal functions
653  */
654 XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
655 
656 #ifdef __cplusplus
657 }
658 #endif
659 
660 #endif /* LIBXML_XPATH_ENABLED */
661 #endif /* ! __XML_XPATH_INTERNALS_H__ */
662