314 lines
8.1 KiB
C
314 lines
8.1 KiB
C
|
/*
|
||
|
* Summary: set of utilities for the XSLT engine
|
||
|
* Description: interfaces for the utilities module of the XSLT engine.
|
||
|
* things like message handling, profiling, and other
|
||
|
* generally useful routines.
|
||
|
*
|
||
|
* Copy: See Copyright for the status of this software.
|
||
|
*
|
||
|
* Author: Daniel Veillard
|
||
|
*/
|
||
|
|
||
|
#ifndef __XML_XSLTUTILS_H__
|
||
|
#define __XML_XSLTUTILS_H__
|
||
|
|
||
|
#include <libxslt/xsltconfig.h>
|
||
|
#ifdef HAVE_STDARG_H
|
||
|
#include <stdarg.h>
|
||
|
#endif
|
||
|
#include <libxml/xpath.h>
|
||
|
#include <libxml/dict.h>
|
||
|
#include <libxml/xmlerror.h>
|
||
|
#include "xsltexports.h"
|
||
|
#include "xsltInternals.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/**
|
||
|
* XSLT_TODO:
|
||
|
*
|
||
|
* Macro to flag unimplemented blocks.
|
||
|
*/
|
||
|
#define XSLT_TODO \
|
||
|
xsltGenericError(xsltGenericErrorContext, \
|
||
|
"Unimplemented block at %s:%d\n", \
|
||
|
__FILE__, __LINE__);
|
||
|
|
||
|
/**
|
||
|
* XSLT_STRANGE:
|
||
|
*
|
||
|
* Macro to flag that a problem was detected internally.
|
||
|
*/
|
||
|
#define XSLT_STRANGE \
|
||
|
xsltGenericError(xsltGenericErrorContext, \
|
||
|
"Internal error at %s:%d\n", \
|
||
|
__FILE__, __LINE__);
|
||
|
|
||
|
/**
|
||
|
* IS_XSLT_ELEM:
|
||
|
*
|
||
|
* Checks that the element pertains to XSLT namespace.
|
||
|
*/
|
||
|
#define IS_XSLT_ELEM(n) \
|
||
|
(((n) != NULL) && ((n)->type == XML_ELEMENT_NODE) && \
|
||
|
((n)->ns != NULL) && (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE)))
|
||
|
|
||
|
/**
|
||
|
* IS_XSLT_NAME:
|
||
|
*
|
||
|
* Checks the value of an element in XSLT namespace.
|
||
|
*/
|
||
|
#define IS_XSLT_NAME(n, val) \
|
||
|
(xmlStrEqual((n)->name, (const xmlChar *) (val)))
|
||
|
|
||
|
/**
|
||
|
* IS_XSLT_REAL_NODE:
|
||
|
*
|
||
|
* Check that a node is a 'real' one: document, element, text or attribute.
|
||
|
*/
|
||
|
#define IS_XSLT_REAL_NODE(n) \
|
||
|
(((n) != NULL) && \
|
||
|
(((n)->type == XML_ELEMENT_NODE) || \
|
||
|
((n)->type == XML_TEXT_NODE) || \
|
||
|
((n)->type == XML_CDATA_SECTION_NODE) || \
|
||
|
((n)->type == XML_ATTRIBUTE_NODE) || \
|
||
|
((n)->type == XML_DOCUMENT_NODE) || \
|
||
|
((n)->type == XML_HTML_DOCUMENT_NODE) || \
|
||
|
((n)->type == XML_COMMENT_NODE) || \
|
||
|
((n)->type == XML_PI_NODE)))
|
||
|
|
||
|
/*
|
||
|
* Our own version of namespaced attributes lookup.
|
||
|
*/
|
||
|
XSLTPUBFUN xmlChar * XSLTCALL
|
||
|
xsltGetNsProp (xmlNodePtr node,
|
||
|
const xmlChar *name,
|
||
|
const xmlChar *nameSpace);
|
||
|
XSLTPUBFUN const xmlChar * XSLTCALL
|
||
|
xsltGetCNsProp (xsltStylesheetPtr style,
|
||
|
xmlNodePtr node,
|
||
|
const xmlChar *name,
|
||
|
const xmlChar *nameSpace);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltGetUTF8Char (const unsigned char *utf,
|
||
|
int *len);
|
||
|
|
||
|
/*
|
||
|
* XSLT Debug Tracing Tracing Types
|
||
|
*/
|
||
|
typedef enum {
|
||
|
XSLT_TRACE_ALL = -1,
|
||
|
XSLT_TRACE_NONE = 0,
|
||
|
XSLT_TRACE_COPY_TEXT = 1<<0,
|
||
|
XSLT_TRACE_PROCESS_NODE = 1<<1,
|
||
|
XSLT_TRACE_APPLY_TEMPLATE = 1<<2,
|
||
|
XSLT_TRACE_COPY = 1<<3,
|
||
|
XSLT_TRACE_COMMENT = 1<<4,
|
||
|
XSLT_TRACE_PI = 1<<5,
|
||
|
XSLT_TRACE_COPY_OF = 1<<6,
|
||
|
XSLT_TRACE_VALUE_OF = 1<<7,
|
||
|
XSLT_TRACE_CALL_TEMPLATE = 1<<8,
|
||
|
XSLT_TRACE_APPLY_TEMPLATES = 1<<9,
|
||
|
XSLT_TRACE_CHOOSE = 1<<10,
|
||
|
XSLT_TRACE_IF = 1<<11,
|
||
|
XSLT_TRACE_FOR_EACH = 1<<12,
|
||
|
XSLT_TRACE_STRIP_SPACES = 1<<13,
|
||
|
XSLT_TRACE_TEMPLATES = 1<<14,
|
||
|
XSLT_TRACE_KEYS = 1<<15,
|
||
|
XSLT_TRACE_VARIABLES = 1<<16
|
||
|
} xsltDebugTraceCodes;
|
||
|
|
||
|
/**
|
||
|
* XSLT_TRACE:
|
||
|
*
|
||
|
* Control the type of xsl debugtrace messages emitted.
|
||
|
*/
|
||
|
#define XSLT_TRACE(ctxt,code,call) \
|
||
|
if (ctxt->traceCode && (*(ctxt->traceCode) & code)) \
|
||
|
call
|
||
|
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltDebugSetDefaultTrace(xsltDebugTraceCodes val);
|
||
|
XSLTPUBFUN xsltDebugTraceCodes XSLTCALL
|
||
|
xsltDebugGetDefaultTrace(void);
|
||
|
|
||
|
/*
|
||
|
* XSLT specific error and debug reporting functions.
|
||
|
*/
|
||
|
XSLTPUBVAR xmlGenericErrorFunc xsltGenericError;
|
||
|
XSLTPUBVAR void *xsltGenericErrorContext;
|
||
|
XSLTPUBVAR xmlGenericErrorFunc xsltGenericDebug;
|
||
|
XSLTPUBVAR void *xsltGenericDebugContext;
|
||
|
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltPrintErrorContext (xsltTransformContextPtr ctxt,
|
||
|
xsltStylesheetPtr style,
|
||
|
xmlNodePtr node);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltMessage (xsltTransformContextPtr ctxt,
|
||
|
xmlNodePtr node,
|
||
|
xmlNodePtr inst);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetGenericErrorFunc (void *ctx,
|
||
|
xmlGenericErrorFunc handler);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetGenericDebugFunc (void *ctx,
|
||
|
xmlGenericErrorFunc handler);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetTransformErrorFunc (xsltTransformContextPtr ctxt,
|
||
|
void *ctx,
|
||
|
xmlGenericErrorFunc handler);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltTransformError (xsltTransformContextPtr ctxt,
|
||
|
xsltStylesheetPtr style,
|
||
|
xmlNodePtr node,
|
||
|
const char *msg,
|
||
|
...) LIBXSLT_ATTR_FORMAT(4,5);
|
||
|
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSetCtxtParseOptions (xsltTransformContextPtr ctxt,
|
||
|
int options);
|
||
|
/*
|
||
|
* Sorting.
|
||
|
*/
|
||
|
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltDocumentSortFunction (xmlNodeSetPtr list);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetSortFunc (xsltSortFunc handler);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetCtxtSortFunc (xsltTransformContextPtr ctxt,
|
||
|
xsltSortFunc handler);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltDefaultSortFunction (xsltTransformContextPtr ctxt,
|
||
|
xmlNodePtr *sorts,
|
||
|
int nbsorts);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltDoSortFunction (xsltTransformContextPtr ctxt,
|
||
|
xmlNodePtr * sorts,
|
||
|
int nbsorts);
|
||
|
XSLTPUBFUN xmlXPathObjectPtr * XSLTCALL
|
||
|
xsltComputeSortResult (xsltTransformContextPtr ctxt,
|
||
|
xmlNodePtr sort);
|
||
|
|
||
|
/*
|
||
|
* QNames handling.
|
||
|
*/
|
||
|
|
||
|
XSLTPUBFUN const xmlChar * XSLTCALL
|
||
|
xsltSplitQName (xmlDictPtr dict,
|
||
|
const xmlChar *name,
|
||
|
const xmlChar **prefix);
|
||
|
XSLTPUBFUN const xmlChar * XSLTCALL
|
||
|
xsltGetQNameURI (xmlNodePtr node,
|
||
|
xmlChar **name);
|
||
|
|
||
|
XSLTPUBFUN const xmlChar * XSLTCALL
|
||
|
xsltGetQNameURI2 (xsltStylesheetPtr style,
|
||
|
xmlNodePtr node,
|
||
|
const xmlChar **name);
|
||
|
|
||
|
/*
|
||
|
* Output, reuse libxml I/O buffers.
|
||
|
*/
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSaveResultTo (xmlOutputBufferPtr buf,
|
||
|
xmlDocPtr result,
|
||
|
xsltStylesheetPtr style);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSaveResultToFilename (const char *URI,
|
||
|
xmlDocPtr result,
|
||
|
xsltStylesheetPtr style,
|
||
|
int compression);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSaveResultToFile (FILE *file,
|
||
|
xmlDocPtr result,
|
||
|
xsltStylesheetPtr style);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSaveResultToFd (int fd,
|
||
|
xmlDocPtr result,
|
||
|
xsltStylesheetPtr style);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSaveResultToString (xmlChar **doc_txt_ptr,
|
||
|
int * doc_txt_len,
|
||
|
xmlDocPtr result,
|
||
|
xsltStylesheetPtr style);
|
||
|
|
||
|
/*
|
||
|
* XPath interface
|
||
|
*/
|
||
|
XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
|
||
|
xsltXPathCompile (xsltStylesheetPtr style,
|
||
|
const xmlChar *str);
|
||
|
XSLTPUBFUN xmlXPathCompExprPtr XSLTCALL
|
||
|
xsltXPathCompileFlags (xsltStylesheetPtr style,
|
||
|
const xmlChar *str,
|
||
|
int flags);
|
||
|
|
||
|
/*
|
||
|
* Profiling.
|
||
|
*/
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSaveProfiling (xsltTransformContextPtr ctxt,
|
||
|
FILE *output);
|
||
|
XSLTPUBFUN xmlDocPtr XSLTCALL
|
||
|
xsltGetProfileInformation (xsltTransformContextPtr ctxt);
|
||
|
|
||
|
XSLTPUBFUN long XSLTCALL
|
||
|
xsltTimestamp (void);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltCalibrateAdjust (long delta);
|
||
|
|
||
|
/**
|
||
|
* XSLT_TIMESTAMP_TICS_PER_SEC:
|
||
|
*
|
||
|
* Sampling precision for profiling
|
||
|
*/
|
||
|
#define XSLT_TIMESTAMP_TICS_PER_SEC 100000l
|
||
|
|
||
|
/*
|
||
|
* Hooks for the debugger.
|
||
|
*/
|
||
|
|
||
|
typedef enum {
|
||
|
XSLT_DEBUG_NONE = 0, /* no debugging allowed */
|
||
|
XSLT_DEBUG_INIT,
|
||
|
XSLT_DEBUG_STEP,
|
||
|
XSLT_DEBUG_STEPOUT,
|
||
|
XSLT_DEBUG_NEXT,
|
||
|
XSLT_DEBUG_STOP,
|
||
|
XSLT_DEBUG_CONT,
|
||
|
XSLT_DEBUG_RUN,
|
||
|
XSLT_DEBUG_RUN_RESTART,
|
||
|
XSLT_DEBUG_QUIT
|
||
|
} xsltDebugStatusCodes;
|
||
|
|
||
|
XSLTPUBVAR int xslDebugStatus;
|
||
|
|
||
|
typedef void (*xsltHandleDebuggerCallback) (xmlNodePtr cur, xmlNodePtr node,
|
||
|
xsltTemplatePtr templ, xsltTransformContextPtr ctxt);
|
||
|
typedef int (*xsltAddCallCallback) (xsltTemplatePtr templ, xmlNodePtr source);
|
||
|
typedef void (*xsltDropCallCallback) (void);
|
||
|
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xsltSetDebuggerStatus (int value);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltGetDebuggerStatus (void);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xsltSetDebuggerCallbacks (int no, void *block);
|
||
|
XSLTPUBFUN int XSLTCALL
|
||
|
xslAddCall (xsltTemplatePtr templ,
|
||
|
xmlNodePtr source);
|
||
|
XSLTPUBFUN void XSLTCALL
|
||
|
xslDropCall (void);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __XML_XSLTUTILS_H__ */
|
||
|
|
||
|
|