xsltutils.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*
  2. * Summary: set of utilities for the XSLT engine
  3. * Description: interfaces for the utilities module of the XSLT engine.
  4. * things like message handling, profiling, and other
  5. * generally useful routines.
  6. *
  7. * Copy: See Copyright for the status of this software.
  8. *
  9. * Author: Daniel Veillard
  10. */
  11. #ifndef __XML_XSLTUTILS_H__
  12. #define __XML_XSLTUTILS_H__
  13. #include <libxslt/xsltconfig.h>
  14. #include <libxml/xpath.h>
  15. #include <libxml/dict.h>
  16. #include <libxml/xmlerror.h>
  17. #include "xsltexports.h"
  18. #include "xsltInternals.h"
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. /**
  23. * XSLT_TODO:
  24. *
  25. * Macro to flag unimplemented blocks.
  26. */
  27. #define XSLT_TODO \
  28. xsltGenericError(xsltGenericErrorContext, \
  29. "Unimplemented block at %s:%d\n", \
  30. __FILE__, __LINE__);
  31. /**
  32. * XSLT_STRANGE:
  33. *
  34. * Macro to flag that a problem was detected internally.
  35. */
  36. #define XSLT_STRANGE \
  37. xsltGenericError(xsltGenericErrorContext, \
  38. "Internal error at %s:%d\n", \
  39. __FILE__, __LINE__);
  40. /**
  41. * IS_XSLT_ELEM:
  42. *
  43. * Checks that the element pertains to XSLT namespace.
  44. */
  45. #define IS_XSLT_ELEM(n) \
  46. (((n) != NULL) && ((n)->type == XML_ELEMENT_NODE) && \
  47. ((n)->ns != NULL) && (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE)))
  48. /**
  49. * IS_XSLT_NAME:
  50. *
  51. * Checks the value of an element in XSLT namespace.
  52. */
  53. #define IS_XSLT_NAME(n, val) \
  54. (xmlStrEqual((n)->name, (const xmlChar *) (val)))
  55. /**
  56. * IS_XSLT_REAL_NODE:
  57. *
  58. * Check that a node is a 'real' one: document, element, text or attribute.
  59. */
  60. #define IS_XSLT_REAL_NODE(n) \
  61. (((n) != NULL) && \
  62. (((n)->type == XML_ELEMENT_NODE) || \
  63. ((n)->type == XML_TEXT_NODE) || \
  64. ((n)->type == XML_CDATA_SECTION_NODE) || \
  65. ((n)->type == XML_ATTRIBUTE_NODE) || \
  66. ((n)->type == XML_DOCUMENT_NODE) || \
  67. ((n)->type == XML_HTML_DOCUMENT_NODE) || \
  68. ((n)->type == XML_COMMENT_NODE) || \
  69. ((n)->type == XML_PI_NODE)))
  70. /*
  71. * Our own version of namespaced attributes lookup.
  72. */
  73. XSLTPUBFUN xmlChar * XSLTCALL
  74. xsltGetNsProp (xmlNodePtr node,
  75. const xmlChar *name,
  76. const xmlChar *nameSpace);
  77. XSLTPUBFUN const xmlChar * XSLTCALL
  78. xsltGetCNsProp (xsltStylesheetPtr style,
  79. xmlNodePtr node,
  80. const xmlChar *name,
  81. const xmlChar *nameSpace);
  82. XSLTPUBFUN int XSLTCALL
  83. xsltGetUTF8Char (const unsigned char *utf,
  84. int *len);
  85. #ifdef IN_LIBXSLT
  86. /** DOC_DISABLE */
  87. XSLTPUBFUN int XSLTCALL
  88. xsltGetUTF8CharZ (const unsigned char *utf,
  89. int *len);
  90. /** DOC_ENABLE */
  91. #endif
  92. /*
  93. * XSLT Debug Tracing Tracing Types
  94. */
  95. typedef enum {
  96. XSLT_TRACE_ALL = -1,
  97. XSLT_TRACE_NONE = 0,
  98. XSLT_TRACE_COPY_TEXT = 1<<0,
  99. XSLT_TRACE_PROCESS_NODE = 1<<1,
  100. XSLT_TRACE_APPLY_TEMPLATE = 1<<2,
  101. XSLT_TRACE_COPY = 1<<3,
  102. XSLT_TRACE_COMMENT = 1<<4,
  103. XSLT_TRACE_PI = 1<<5,
  104. XSLT_TRACE_COPY_OF = 1<<6,
  105. XSLT_TRACE_VALUE_OF = 1<<7,
  106. XSLT_TRACE_CALL_TEMPLATE = 1<<8,
  107. XSLT_TRACE_APPLY_TEMPLATES = 1<<9,
  108. XSLT_TRACE_CHOOSE = 1<<10,
  109. XSLT_TRACE_IF = 1<<11,
  110. XSLT_TRACE_FOR_EACH = 1<<12,
  111. XSLT_TRACE_STRIP_SPACES = 1<<13,
  112. XSLT_TRACE_TEMPLATES = 1<<14,
  113. XSLT_TRACE_KEYS = 1<<15,
  114. XSLT_TRACE_VARIABLES = 1<<16
  115. } xsltDebugTraceCodes;
  116. /**
  117. * XSLT_TRACE:
  118. *
  119. * Control the type of xsl debugtrace messages emitted.
  120. */
  121. #define XSLT_TRACE(ctxt,code,call) \
  122. if (ctxt->traceCode && (*(ctxt->traceCode) & code)) \
  123. call
  124. XSLTPUBFUN void XSLTCALL
  125. xsltDebugSetDefaultTrace(xsltDebugTraceCodes val);
  126. XSLTPUBFUN xsltDebugTraceCodes XSLTCALL
  127. xsltDebugGetDefaultTrace(void);
  128. /*
  129. * XSLT specific error and debug reporting functions.
  130. */
  131. XSLTPUBVAR xmlGenericErrorFunc xsltGenericError;
  132. XSLTPUBVAR void *xsltGenericErrorContext;
  133. XSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug;
  134. XSLTPUBVAR void *xsltGenericDebugContext;
  135. XSLTPUBFUN void XSLTCALL
  136. xsltPrintErrorContext (xsltTransformContextPtr ctxt,
  137. xsltStylesheetPtr style,
  138. xmlNodePtr node);
  139. XSLTPUBFUN void XSLTCALL
  140. xsltMessage (xsltTransformContextPtr ctxt,
  141. xmlNodePtr node,
  142. xmlNodePtr inst);
  143. XSLTPUBFUN void XSLTCALL
  144. xsltSetGenericErrorFunc (void *ctx,
  145. xmlGenericErrorFunc handler);
  146. XSLTPUBFUN void XSLTCALL
  147. xsltSetGenericDebugFunc (void *ctx,
  148. xmlGenericErrorFunc handler);
  149. XSLTPUBFUN void XSLTCALL
  150. xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt,
  151. void *ctx,
  152. xmlGenericErrorFunc handler);
  153. XSLTPUBFUN void XSLTCALL
  154. xsltTransformError (xsltTransformContextPtr ctxt,
  155. xsltStylesheetPtr style,
  156. xmlNodePtr node,
  157. const char *msg,
  158. ...) LIBXSLT_ATTR_FORMAT(4,5);
  159. XSLTPUBFUN int XSLTCALL
  160. xsltSetCtxtParseOptions (xsltTransformContextPtr ctxt,
  161. int options);
  162. /*
  163. * Sorting.
  164. */
  165. XSLTPUBFUN void XSLTCALL
  166. xsltDocumentSortFunction (xmlNodeSetPtr list);
  167. XSLTPUBFUN void XSLTCALL
  168. xsltSetSortFunc (xsltSortFunc handler);
  169. XSLTPUBFUN void XSLTCALL
  170. xsltSetCtxtSortFunc (xsltTransformContextPtr ctxt,
  171. xsltSortFunc handler);
  172. XSLTPUBFUN void XSLTCALL
  173. xsltSetCtxtLocaleHandlers (xsltTransformContextPtr ctxt,
  174. xsltNewLocaleFunc newLocale,
  175. xsltFreeLocaleFunc freeLocale,
  176. xsltGenSortKeyFunc genSortKey);
  177. XSLTPUBFUN void XSLTCALL
  178. xsltDefaultSortFunction (xsltTransformContextPtr ctxt,
  179. xmlNodePtr *sorts,
  180. int nbsorts);
  181. XSLTPUBFUN void XSLTCALL
  182. xsltDoSortFunction (xsltTransformContextPtr ctxt,
  183. xmlNodePtr * sorts,
  184. int nbsorts);
  185. XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL
  186. xsltComputeSortResult (xsltTransformContextPtr ctxt,
  187. xmlNodePtr sort);
  188. /*
  189. * QNames handling.
  190. */
  191. XSLTPUBFUN const xmlChar * XSLTCALL
  192. xsltSplitQName (xmlDictPtr dict,
  193. const xmlChar *name,
  194. const xmlChar **prefix);
  195. XSLTPUBFUN const xmlChar * XSLTCALL
  196. xsltGetQNameURI (xmlNodePtr node,
  197. xmlChar **name);
  198. XSLTPUBFUN const xmlChar * XSLTCALL
  199. xsltGetQNameURI2 (xsltStylesheetPtr style,
  200. xmlNodePtr node,
  201. const xmlChar **name);
  202. /*
  203. * Output, reuse libxml I/O buffers.
  204. */
  205. XSLTPUBFUN int XSLTCALL
  206. xsltSaveResultTo (xmlOutputBufferPtr buf,
  207. xmlDocPtr result,
  208. xsltStylesheetPtr style);
  209. XSLTPUBFUN int XSLTCALL
  210. xsltSaveResultToFilename (const char *URI,
  211. xmlDocPtr result,
  212. xsltStylesheetPtr style,
  213. int compression);
  214. XSLTPUBFUN int XSLTCALL
  215. xsltSaveResultToFile (FILE *file,
  216. xmlDocPtr result,
  217. xsltStylesheetPtr style);
  218. XSLTPUBFUN int XSLTCALL
  219. xsltSaveResultToFd (int fd,
  220. xmlDocPtr result,
  221. xsltStylesheetPtr style);
  222. XSLTPUBFUN int XSLTCALL
  223. xsltSaveResultToString (xmlChar **doc_txt_ptr,
  224. int * doc_txt_len,
  225. xmlDocPtr result,
  226. xsltStylesheetPtr style);
  227. /*
  228. * XPath interface
  229. */
  230. XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
  231. xsltXPathCompile (xsltStylesheetPtr style,
  232. const xmlChar *str);
  233. XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
  234. xsltXPathCompileFlags (xsltStylesheetPtr style,
  235. const xmlChar *str,
  236. int flags);
  237. #ifdef IN_LIBXSLT
  238. /** DOC_DISABLE */
  239. #define XSLT_SOURCE_NODE_MASK 15u
  240. #define XSLT_SOURCE_NODE_HAS_KEY 1u
  241. #define XSLT_SOURCE_NODE_HAS_ID 2u
  242. int
  243. xsltGetSourceNodeFlags(xmlNodePtr node);
  244. int
  245. xsltSetSourceNodeFlags(xsltTransformContextPtr ctxt, xmlNodePtr node,
  246. int flags);
  247. int
  248. xsltClearSourceNodeFlags(xmlNodePtr node, int flags);
  249. void **
  250. xsltGetPSVIPtr(xmlNodePtr cur);
  251. /** DOC_ENABLE */
  252. #endif
  253. #ifdef WITH_PROFILER
  254. /*
  255. * Profiling.
  256. */
  257. XSLTPUBFUN void XSLTCALL
  258. xsltSaveProfiling (xsltTransformContextPtr ctxt,
  259. FILE *output);
  260. XSLTPUBFUN xmlDocPtr XSLTCALL
  261. xsltGetProfileInformation (xsltTransformContextPtr ctxt);
  262. XSLTPUBFUN long XSLTCALL
  263. xsltTimestamp (void);
  264. XSLTPUBFUN void XSLTCALL
  265. xsltCalibrateAdjust (long delta);
  266. #endif
  267. /**
  268. * XSLT_TIMESTAMP_TICS_PER_SEC:
  269. *
  270. * Sampling precision for profiling
  271. */
  272. #define XSLT_TIMESTAMP_TICS_PER_SEC 100000l
  273. /*
  274. * Hooks for the debugger.
  275. */
  276. typedef enum {
  277. XSLT_DEBUG_NONE = 0, /* no debugging allowed */
  278. XSLT_DEBUG_INIT,
  279. XSLT_DEBUG_STEP,
  280. XSLT_DEBUG_STEPOUT,
  281. XSLT_DEBUG_NEXT,
  282. XSLT_DEBUG_STOP,
  283. XSLT_DEBUG_CONT,
  284. XSLT_DEBUG_RUN,
  285. XSLT_DEBUG_RUN_RESTART,
  286. XSLT_DEBUG_QUIT
  287. } xsltDebugStatusCodes;
  288. XSLTPUBVAR int xslDebugStatus;
  289. typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node,
  290. xsltTemplatePtr templ, xsltTransformContextPtr ctxt);
  291. typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source);
  292. typedef void (*xsltDropCallCallback) (void);
  293. XSLTPUBFUN int XSLTCALL
  294. xsltGetDebuggerStatus (void);
  295. #ifdef WITH_DEBUGGER
  296. XSLTPUBFUN void XSLTCALL
  297. xsltSetDebuggerStatus (int value);
  298. XSLTPUBFUN int XSLTCALL
  299. xsltSetDebuggerCallbacks (int no, void *block);
  300. XSLTPUBFUN int XSLTCALL
  301. xslAddCall (xsltTemplatePtr templ,
  302. xmlNodePtr source);
  303. XSLTPUBFUN void XSLTCALL
  304. xslDropCall (void);
  305. #endif
  306. #ifdef __cplusplus
  307. }
  308. #endif
  309. #endif /* __XML_XSLTUTILS_H__ */