| OLD | NEW |
| (Empty) |
| 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 ...) LIBXSLT_ATTR_FORMAT(4,5); | |
| 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 XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL | |
| 246 xsltXPathCompileFlags (xsltStylesheetPtr style, | |
| 247 const xmlChar *str, | |
| 248 int flags); | |
| 249 | |
| 250 /* | |
| 251 * Profiling. | |
| 252 */ | |
| 253 XSLTPUBFUN void XSLTCALL | |
| 254 xsltSaveProfiling (xsltTransformContextPtr ctxt, | |
| 255 FILE *output); | |
| 256 XSLTPUBFUN xmlDocPtr XSLTCALL | |
| 257 xsltGetProfileInformation (xsltTransformContextPtr ctxt); | |
| 258 | |
| 259 XSLTPUBFUN long XSLTCALL | |
| 260 xsltTimestamp (void); | |
| 261 XSLTPUBFUN void XSLTCALL | |
| 262 xsltCalibrateAdjust (long delta); | |
| 263 | |
| 264 /** | |
| 265 * XSLT_TIMESTAMP_TICS_PER_SEC: | |
| 266 * | |
| 267 * Sampling precision for profiling | |
| 268 */ | |
| 269 #define XSLT_TIMESTAMP_TICS_PER_SEC 100000l | |
| 270 | |
| 271 /* | |
| 272 * Hooks for the debugger. | |
| 273 */ | |
| 274 | |
| 275 typedef enum { | |
| 276 XSLT_DEBUG_NONE = 0, /* no debugging allowed */ | |
| 277 XSLT_DEBUG_INIT, | |
| 278 XSLT_DEBUG_STEP, | |
| 279 XSLT_DEBUG_STEPOUT, | |
| 280 XSLT_DEBUG_NEXT, | |
| 281 XSLT_DEBUG_STOP, | |
| 282 XSLT_DEBUG_CONT, | |
| 283 XSLT_DEBUG_RUN, | |
| 284 XSLT_DEBUG_RUN_RESTART, | |
| 285 XSLT_DEBUG_QUIT | |
| 286 } xsltDebugStatusCodes; | |
| 287 | |
| 288 XSLTPUBVAR int xslDebugStatus; | |
| 289 | |
| 290 typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node, | |
| 291 xsltTemplatePtr templ, xsltTransformContextPtr ctxt); | |
| 292 typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source); | |
| 293 typedef void (*xsltDropCallCallback) (void); | |
| 294 | |
| 295 XSLTPUBFUN void XSLTCALL | |
| 296 xsltSetDebuggerStatus (int value); | |
| 297 XSLTPUBFUN int XSLTCALL | |
| 298 xsltGetDebuggerStatus (void); | |
| 299 XSLTPUBFUN int XSLTCALL | |
| 300 xsltSetDebuggerCallbacks (int no, void *block); | |
| 301 XSLTPUBFUN int XSLTCALL | |
| 302 xslAddCall (xsltTemplatePtr templ, | |
| 303 xmlNodePtr source); | |
| 304 XSLTPUBFUN void XSLTCALL | |
| 305 xslDropCall (void); | |
| 306 | |
| 307 #ifdef __cplusplus | |
| 308 } | |
| 309 #endif | |
| 310 | |
| 311 #endif /* __XML_XSLTUTILS_H__ */ | |
| 312 | |
| 313 | |
| OLD | NEW |