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

source code of include/libxslt/xsltutils.h