Coverage Report

Created: 2024-08-27 12:19

/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