Home | History | Annotate | Download | only in libxslt
      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