17d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
27d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Summary: set of utilities for the XSLT engine
37d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Description: interfaces for the utilities module of the XSLT engine.
47d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *              things like message handling, profiling, and other
57d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *              generally useful routines.
67d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
77d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Copy: See Copyright for the status of this software.
87d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
97d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Author: Daniel Veillard
107d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
117d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
127d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#ifndef __XML_XSLTUTILS_H__
137d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define __XML_XSLTUTILS_H__
147d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
157d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include <libxslt/xsltconfig.h>
167d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#ifdef HAVE_STDARG_H
177d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include <stdarg.h>
187d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#endif
197d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include <libxml/xpath.h>
207d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include <libxml/dict.h>
217d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include <libxml/xmlerror.h>
227d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include "xsltexports.h"
237d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#include "xsltInternals.h"
247d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
257d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#ifdef __cplusplus
267d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangextern "C" {
277d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#endif
287d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
297d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
307d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT_TODO:
317d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
327d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Macro to flag unimplemented blocks.
337d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
347d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define XSLT_TODO 							\
357d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    xsltGenericError(xsltGenericErrorContext,				\
367d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	    "Unimplemented block at %s:%d\n",				\
377d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang            __FILE__, __LINE__);
387d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
397d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
407d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT_STRANGE:
417d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
427d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Macro to flag that a problem was detected internally.
437d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
447d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define XSLT_STRANGE 							\
457d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    xsltGenericError(xsltGenericErrorContext,				\
467d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	    "Internal error at %s:%d\n",				\
477d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang            __FILE__, __LINE__);
487d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
497d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
507d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * IS_XSLT_ELEM:
517d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
527d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Checks that the element pertains to XSLT namespace.
537d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
547d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define IS_XSLT_ELEM(n)							\
557d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    (((n) != NULL) && ((n)->ns != NULL) &&				\
567d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang     (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE)))
577d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
587d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
597d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * IS_XSLT_NAME:
607d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
617d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Checks the value of an element in XSLT namespace.
627d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
637d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define IS_XSLT_NAME(n, val)						\
647d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    (xmlStrEqual((n)->name, (const xmlChar *) (val)))
657d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
667d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
677d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * IS_XSLT_REAL_NODE:
687d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
697d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Check that a node is a 'real' one: document, element, text or attribute.
707d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
717d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define IS_XSLT_REAL_NODE(n)						\
727d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    (((n) != NULL) &&							\
737d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang     (((n)->type == XML_ELEMENT_NODE) ||				\
747d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_TEXT_NODE) ||					\
757d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_CDATA_SECTION_NODE) ||				\
767d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_ATTRIBUTE_NODE) ||				\
777d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_DOCUMENT_NODE) ||				\
787d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_HTML_DOCUMENT_NODE) ||				\
797d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_COMMENT_NODE) ||				\
807d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang      ((n)->type == XML_PI_NODE)))
817d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
827d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
837d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Our own version of namespaced atributes lookup.
847d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
857d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN xmlChar * XSLTCALL
867d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltGetNsProp	(xmlNodePtr node,
877d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 const xmlChar *name,
887d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 const xmlChar *nameSpace);
897d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN const xmlChar * XSLTCALL
907d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltGetCNsProp	(xsltStylesheetPtr style,
917d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 xmlNodePtr node,
927d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 const xmlChar *name,
937d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 const xmlChar *nameSpace);
947d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
957d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltGetUTF8Char	(const unsigned char *utf,
967d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang				 int *len);
977d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
987d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
997d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT Debug Tracing Tracing Types
1007d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
1017d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangtypedef enum {
1027d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_ALL =		-1,
1037d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_NONE = 		0,
1047d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_COPY_TEXT = 		1<<0,
1057d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_PROCESS_NODE = 	1<<1,
1067d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_APPLY_TEMPLATE = 	1<<2,
1077d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_COPY = 		1<<3,
1087d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_COMMENT = 		1<<4,
1097d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_PI = 		1<<5,
1107d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_COPY_OF = 		1<<6,
1117d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_VALUE_OF = 		1<<7,
1127d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_CALL_TEMPLATE = 	1<<8,
1137d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_APPLY_TEMPLATES = 	1<<9,
1147d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_CHOOSE = 		1<<10,
1157d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_IF = 		1<<11,
1167d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_FOR_EACH = 		1<<12,
1177d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_STRIP_SPACES = 	1<<13,
1187d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_TEMPLATES = 		1<<14,
1197d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_KEYS = 		1<<15,
1207d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	XSLT_TRACE_VARIABLES = 		1<<16
1217d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang} xsltDebugTraceCodes;
1227d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1237d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
1247d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT_TRACE:
1257d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
1267d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Control the type of xsl debugtrace messages emitted.
1277d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
1287d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define XSLT_TRACE(ctxt,code,call)	\
1297d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	if (ctxt->traceCode && (*(ctxt->traceCode) & code)) \
1307d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	    call
1317d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1327d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1337d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltDebugSetDefaultTrace(xsltDebugTraceCodes val);
1347d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN xsltDebugTraceCodes XSLTCALL
1357d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltDebugGetDefaultTrace(void);
1367d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1377d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
1387d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT specific error and debug reporting functions.
1397d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
1407d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBVAR xmlGenericErrorFunc xsltGenericError;
1417d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBVAR void *xsltGenericErrorContext;
1427d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug;
1437d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBVAR void *xsltGenericDebugContext;
1447d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1457d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1467d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltPrintErrorContext		(xsltTransformContextPtr ctxt,
1477d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang	                                         xsltStylesheetPtr style,
1487d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr node);
1497d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1507d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltMessage			(xsltTransformContextPtr ctxt,
1517d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr node,
1527d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr inst);
1537d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1547d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSetGenericErrorFunc		(void *ctx,
1557d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlGenericErrorFunc handler);
1567d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1577d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSetGenericDebugFunc		(void *ctx,
1587d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlGenericErrorFunc handler);
1597d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1607d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSetTransformErrorFunc	(xsltTransformContextPtr ctxt,
1617d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 void *ctx,
1627d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlGenericErrorFunc handler);
1637d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1647d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltTransformError		(xsltTransformContextPtr ctxt,
1657d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltStylesheetPtr style,
1667d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr node,
1677d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 const char *msg,
1687d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 ...);
1697d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1707d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
1717d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltSetCtxtParseOptions		(xsltTransformContextPtr ctxt,
1727d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 int options);
1737d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
1747d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Sorting.
1757d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
1767d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1777d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1787d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltDocumentSortFunction	(xmlNodeSetPtr list);
1797d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1807d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSetSortFunc			(xsltSortFunc handler);
1817d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1827d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSetCtxtSortFunc		(xsltTransformContextPtr ctxt,
1837d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltSortFunc handler);
1847d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1857d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltDefaultSortFunction		(xsltTransformContextPtr ctxt,
1867d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr *sorts,
1877d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 int nbsorts);
1887d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
1897d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltDoSortFunction		(xsltTransformContextPtr ctxt,
1907d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr * sorts,
1917d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 int nbsorts);
1927d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN xmlXPathObjectPtr * XSLTCALL
1937d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltComputeSortResult		(xsltTransformContextPtr ctxt,
1947d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr sort);
1957d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
1967d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
1977d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * QNames handling.
1987d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
1997d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2007d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN const xmlChar * XSLTCALL
2017d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltSplitQName			(xmlDictPtr dict,
2027d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 const xmlChar *name,
2037d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 const xmlChar **prefix);
2047d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN const xmlChar * XSLTCALL
2057d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltGetQNameURI			(xmlNodePtr node,
2067d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlChar **name);
2077d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2087d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN const xmlChar * XSLTCALL
2097d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltGetQNameURI2		(xsltStylesheetPtr style,
2107d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr node,
2117d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 const xmlChar **name);
2127d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2137d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
2147d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Output, reuse libxml I/O buffers.
2157d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
2167d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2177d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveResultTo		(xmlOutputBufferPtr buf,
2187d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlDocPtr result,
2197d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltStylesheetPtr style);
2207d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2217d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveResultToFilename	(const char *URI,
2227d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlDocPtr result,
2237d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltStylesheetPtr style,
2247d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 int compression);
2257d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2267d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveResultToFile		(FILE *file,
2277d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlDocPtr result,
2287d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltStylesheetPtr style);
2297d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2307d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveResultToFd		(int fd,
2317d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlDocPtr result,
2327d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xsltStylesheetPtr style);
2337d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2347d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveResultToString          (xmlChar **doc_txt_ptr,
2357d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang                                                 int * doc_txt_len,
2367d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang                                                 xmlDocPtr result,
2377d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang                                                 xsltStylesheetPtr style);
2387d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2397d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
2407d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XPath interface
2417d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
2427d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
2437d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltXPathCompile		(xsltStylesheetPtr style,
2447d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 const xmlChar *str);
2457d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2467d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
2477d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Profiling.
2487d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
2497d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
2507d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltSaveProfiling		(xsltTransformContextPtr ctxt,
2517d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 FILE *output);
2527d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN xmlDocPtr XSLTCALL
2537d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltGetProfileInformation	(xsltTransformContextPtr ctxt);
2547d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2557d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN long XSLTCALL
2567d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltTimestamp			(void);
2577d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
2587d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    		xsltCalibrateAdjust		(long delta);
2597d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2607d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/**
2617d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * XSLT_TIMESTAMP_TICS_PER_SEC:
2627d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang *
2637d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Sampling precision for profiling
2647d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
2657d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#define XSLT_TIMESTAMP_TICS_PER_SEC 100000l
2667d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2677d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang/*
2687d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang * Hooks for the debugger.
2697d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang */
2707d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2717d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangtypedef enum {
2727d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_NONE = 0, /* no debugging allowed */
2737d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_INIT,
2747d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_STEP,
2757d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_STEPOUT,
2767d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_NEXT,
2777d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_STOP,
2787d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_CONT,
2797d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_RUN,
2807d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_RUN_RESTART,
2817d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang    XSLT_DEBUG_QUIT
2827d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang} xsltDebugStatusCodes;
2837d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2847d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBVAR int xslDebugStatus;
2857d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2867d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangtypedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node,
2877d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang			xsltTemplatePtr templ, xsltTransformContextPtr ctxt);
2887d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangtypedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source);
2897d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wangtypedef void (*xsltDropCallCallback) (void);
2907d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
2917d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
2927d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltSetDebuggerStatus		(int value);
2937d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2947d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltGetDebuggerStatus		(void);
2957d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2967d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xsltSetDebuggerCallbacks	(int no, void *block);
2977d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN int XSLTCALL
2987d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xslAddCall			(xsltTemplatePtr templ,
2997d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang						 xmlNodePtr source);
3007d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) WangXSLTPUBFUN void XSLTCALL
3017d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang		xslDropCall			(void);
3027d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
3037d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#ifdef __cplusplus
3047d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang}
3057d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#endif
3067d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
3077d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang#endif /* __XML_XSLTUTILS_H__ */
3087d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
3097d1dabff1598661db0018d89d16cca02f7c31ae2Shimeng (Simon) Wang
310