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