• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
26 extern "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 atributes lookup.
84  */
85 XSLTPUBFUN xmlChar * XSLTCALL
86 		xsltGetNsProp	(xmlNodePtr node,
87 				 const xmlChar *name,
88 				 const xmlChar *nameSpace);
89 XSLTPUBFUN const xmlChar * XSLTCALL
90 		xsltGetCNsProp	(xsltStylesheetPtr style,
91 				 xmlNodePtr node,
92 				 const xmlChar *name,
93 				 const xmlChar *nameSpace);
94 XSLTPUBFUN int XSLTCALL
95 		xsltGetUTF8Char	(const unsigned char *utf,
96 				 int *len);
97 
98 /*
99  * XSLT Debug Tracing Tracing Types
100  */
101 typedef 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 
132 XSLTPUBFUN void XSLTCALL
133 		xsltDebugSetDefaultTrace(xsltDebugTraceCodes val);
134 XSLTPUBFUN xsltDebugTraceCodes XSLTCALL
135 		xsltDebugGetDefaultTrace(void);
136 
137 /*
138  * XSLT specific error and debug reporting functions.
139  */
140 XSLTPUBVAR xmlGenericErrorFunc xsltGenericError;
141 XSLTPUBVAR void *xsltGenericErrorContext;
142 XSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug;
143 XSLTPUBVAR void *xsltGenericDebugContext;
144 
145 XSLTPUBFUN void XSLTCALL
146 		xsltPrintErrorContext		(xsltTransformContextPtr ctxt,
147 	                                         xsltStylesheetPtr style,
148 						 xmlNodePtr node);
149 XSLTPUBFUN void XSLTCALL
150     		xsltMessage			(xsltTransformContextPtr ctxt,
151 						 xmlNodePtr node,
152 						 xmlNodePtr inst);
153 XSLTPUBFUN void XSLTCALL
154     		xsltSetGenericErrorFunc		(void *ctx,
155 						 xmlGenericErrorFunc handler);
156 XSLTPUBFUN void XSLTCALL
157     		xsltSetGenericDebugFunc		(void *ctx,
158 						 xmlGenericErrorFunc handler);
159 XSLTPUBFUN void XSLTCALL
160     		xsltSetTransformErrorFunc	(xsltTransformContextPtr ctxt,
161 						 void *ctx,
162 						 xmlGenericErrorFunc handler);
163 XSLTPUBFUN void XSLTCALL
164     		xsltTransformError		(xsltTransformContextPtr ctxt,
165 						 xsltStylesheetPtr style,
166 						 xmlNodePtr node,
167 						 const char *msg,
168 						 ...);
169 
170 XSLTPUBFUN int XSLTCALL
171 		xsltSetCtxtParseOptions		(xsltTransformContextPtr ctxt,
172 						 int options);
173 /*
174  * Sorting.
175  */
176 
177 XSLTPUBFUN void XSLTCALL
178     		xsltDocumentSortFunction	(xmlNodeSetPtr list);
179 XSLTPUBFUN void XSLTCALL
180     		xsltSetSortFunc			(xsltSortFunc handler);
181 XSLTPUBFUN void XSLTCALL
182     		xsltSetCtxtSortFunc		(xsltTransformContextPtr ctxt,
183 						 xsltSortFunc handler);
184 XSLTPUBFUN void XSLTCALL
185     		xsltDefaultSortFunction		(xsltTransformContextPtr ctxt,
186 						 xmlNodePtr *sorts,
187 						 int nbsorts);
188 XSLTPUBFUN void XSLTCALL
189     		xsltDoSortFunction		(xsltTransformContextPtr ctxt,
190 						 xmlNodePtr * sorts,
191 						 int nbsorts);
192 XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL
193     		xsltComputeSortResult		(xsltTransformContextPtr ctxt,
194 						 xmlNodePtr sort);
195 
196 /*
197  * QNames handling.
198  */
199 
200 XSLTPUBFUN const xmlChar * XSLTCALL
201 		xsltSplitQName			(xmlDictPtr dict,
202 						 const xmlChar *name,
203 						 const xmlChar **prefix);
204 XSLTPUBFUN const xmlChar * XSLTCALL
205     		xsltGetQNameURI			(xmlNodePtr node,
206 						 xmlChar **name);
207 
208 XSLTPUBFUN const xmlChar * XSLTCALL
209 		xsltGetQNameURI2		(xsltStylesheetPtr style,
210 						 xmlNodePtr node,
211 						 const xmlChar **name);
212 
213 /*
214  * Output, reuse libxml I/O buffers.
215  */
216 XSLTPUBFUN int XSLTCALL
217     		xsltSaveResultTo		(xmlOutputBufferPtr buf,
218 						 xmlDocPtr result,
219 						 xsltStylesheetPtr style);
220 XSLTPUBFUN int XSLTCALL
221     		xsltSaveResultToFilename	(const char *URI,
222 						 xmlDocPtr result,
223 						 xsltStylesheetPtr style,
224 						 int compression);
225 XSLTPUBFUN int XSLTCALL
226     		xsltSaveResultToFile		(FILE *file,
227 						 xmlDocPtr result,
228 						 xsltStylesheetPtr style);
229 XSLTPUBFUN int XSLTCALL
230     		xsltSaveResultToFd		(int fd,
231 						 xmlDocPtr result,
232 						 xsltStylesheetPtr style);
233 XSLTPUBFUN 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  */
242 XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
243 		xsltXPathCompile		(xsltStylesheetPtr style,
244 						 const xmlChar *str);
245 
246 /*
247  * Profiling.
248  */
249 XSLTPUBFUN void XSLTCALL
250     		xsltSaveProfiling		(xsltTransformContextPtr ctxt,
251 						 FILE *output);
252 XSLTPUBFUN xmlDocPtr XSLTCALL
253     		xsltGetProfileInformation	(xsltTransformContextPtr ctxt);
254 
255 XSLTPUBFUN long XSLTCALL
256     		xsltTimestamp			(void);
257 XSLTPUBFUN void XSLTCALL
258     		xsltCalibrateAdjust		(long delta);
259 
260 /**
261  * XSLT_TIMESTAMP_TICS_PER_SEC:
262  *
263  * Sampling precision for profiling
264  */
265 #define XSLT_TIMESTAMP_TICS_PER_SEC 100000l
266 
267 /*
268  * Hooks for the debugger.
269  */
270 
271 typedef enum {
272     XSLT_DEBUG_NONE = 0, /* no debugging allowed */
273     XSLT_DEBUG_INIT,
274     XSLT_DEBUG_STEP,
275     XSLT_DEBUG_STEPOUT,
276     XSLT_DEBUG_NEXT,
277     XSLT_DEBUG_STOP,
278     XSLT_DEBUG_CONT,
279     XSLT_DEBUG_RUN,
280     XSLT_DEBUG_RUN_RESTART,
281     XSLT_DEBUG_QUIT
282 } xsltDebugStatusCodes;
283 
284 XSLTPUBVAR int xslDebugStatus;
285 
286 typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node,
287 			xsltTemplatePtr templ, xsltTransformContextPtr ctxt);
288 typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source);
289 typedef void (*xsltDropCallCallback) (void);
290 
291 XSLTPUBFUN void XSLTCALL
292 		xsltSetDebuggerStatus		(int value);
293 XSLTPUBFUN int XSLTCALL
294 		xsltGetDebuggerStatus		(void);
295 XSLTPUBFUN int XSLTCALL
296 		xsltSetDebuggerCallbacks	(int no, void *block);
297 XSLTPUBFUN int XSLTCALL
298 		xslAddCall			(xsltTemplatePtr templ,
299 						 xmlNodePtr source);
300 XSLTPUBFUN void XSLTCALL
301 		xslDropCall			(void);
302 
303 #ifdef __cplusplus
304 }
305 #endif
306 
307 #endif /* __XML_XSLTUTILS_H__ */
308 
309 
310