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