26#include <libxml/xmlmodule.h>
41#define PATH_MAX _MAX_PATH
46#define WITH_XSLT_DEBUG_EXTENSIONS
117 "xsltNewExtDef : malloc failed\n");
137 if (extensiond ==
NULL)
157 while (extensiond !=
NULL) {
159 extensiond = extensiond->
next;
186 "xsltNewExtModule : malloc failed\n");
189 cur->initFunc = initFunc;
190 cur->shutdownFunc = shutdownFunc;
191 cur->styleInitFunc = styleInitFunc;
192 cur->styleShutdownFunc = styleShutdownFunc;
229 if (extModule ==
NULL)
234 "xsltNewExtData : malloc failed\n");
237 cur->extModule = extModule;
238 cur->extData = extData;
283 "xsltNewExtElement : malloc failed\n");
286 cur->precomp = precomp;
312typedef void (*exsltRegisterFunction) (
void);
342 exsltRegisterFunction regfunc;
377 if (ext_name ==
NULL) {
383 if ((
'/' == *
i) || (
'\\' == *
i) || (
'.' == *
i) || (
'-' == *
i))
389 while (
i > ext_name && *(
i - 1) ==
'_') {
397 if (
NULL == ext_directory) {
398 ext_directory =
BAD_CAST LIBXSLT_DEFAULT_PLUGINS_PATH();
399 if (
NULL == ext_directory)
402#ifdef WITH_XSLT_DEBUG_EXTENSIONS
405 "LIBXSLT_PLUGINS_PATH is %s\n", ext_directory);
410 "%s/%s%s", ext_directory, ext_name, LIBXML_MODULE_EXTENSION);
412#ifdef WITH_XSLT_DEBUG_EXTENSIONS
414 "Attempting to load plugin: %s for URI: %s\n",
415 module_filename, URI);
418#if LIBXML_VERSION < 21300
421#ifdef WITH_XSLT_DEBUG_EXTENSIONS
423 "xmlCheckFilename failed for plugin: %s\n", module_filename);
432 m = xmlModuleOpen(module_filename, 0);
435#ifdef WITH_XSLT_DEBUG_EXTENSIONS
437 "xmlModuleOpen failed for plugin: %s\n", module_filename);
449 rc = xmlModuleSymbol(
m, (
const char *) regfunc_name, &vregfunc);
465#ifdef WITH_XSLT_DEBUG_EXTENSIONS
467 "xmlModuleSymbol failed for plugin: %s, regfunc: %s\n",
468 module_filename, regfunc_name);
477 return (
NULL == regfunc) ? -1 : 0;
533#ifdef WITH_XSLT_DEBUG_EXTENSIONS
535 "Registering extension namespace '%s'.\n", URI);
538#ifdef XSLT_REFACTORED
548 while (def !=
NULL) {
564#ifdef XSLT_REFACTORED
610 const xmlChar * URI, xmlXPathFunction function)
615 (URI ==
NULL) || (function ==
NULL))
618 xmlXPathRegisterFuncNS(ctxt->
xpathCtxt,
name, URI, function);
647 (URI ==
NULL) || (function ==
NULL))
689 void *userData =
NULL;
696#ifdef WITH_XSLT_DEBUG_EXTENSIONS
698 "Not registered extension module: %s\n", URI);
710#ifdef WITH_XSLT_DEBUG_EXTENSIONS
712 "Not registered extension module: %s\n", URI);
728#ifdef WITH_XSLT_DEBUG_EXTENSIONS
730 "Initializing module with *no* callback: %s\n", URI);
733#ifdef WITH_XSLT_DEBUG_EXTENSIONS
735 "Initializing module with callback: %s\n", URI);
746 if (dataContainer ==
NULL) {
747 if (
module->styleShutdownFunc)
753 (
void *) dataContainer) < 0)
756 "Failed to register module '%s'.\n", URI);
758 if (
module->styleShutdownFunc)
764 return(dataContainer);
791#ifdef XSLT_REFACTORED
798 tmpStyle = tmpStyle->
parent;
802 if (dataContainer !=
NULL) {
808 return(dataContainer->
extData);
819 if (dataContainer !=
NULL) {
820 return(dataContainer->
extData);
827 if (dataContainer !=
NULL)
828 return (dataContainer->
extData);
832#ifdef XSLT_REFACTORED
861 return(dataContainer->
extData);
866 if (dataContainer !=
NULL)
867 return (dataContainer->
extData);
887 if ((ctxt ==
NULL) || (URI ==
NULL))
908#ifdef WITH_XSLT_DEBUG_EXTENSIONS
910 "Not registered extension module: %s\n", URI);
917#ifdef WITH_XSLT_DEBUG_EXTENSIONS
919 "Initializing module: %s\n", URI);
922 extData =
module->initFunc(ctxt, URI);
930 "Failed to register module data: %s\n",
933 module->shutdownFunc(ctxt, URI, extData);
939 return (
data->extData);
965 if ((styleData ==
NULL) || (ctxt ==
NULL) || (URI ==
NULL) ||
967#ifdef WITH_XSLT_DEBUG_EXTENSIONS
969 "xsltInitCtxtExt: NULL param or error\n");
975#ifdef WITH_XSLT_DEBUG_EXTENSIONS
977 "xsltInitCtxtExt: no module or no initFunc\n");
983 if (ctxtData !=
NULL) {
984#ifdef WITH_XSLT_DEBUG_EXTENSIONS
986 "xsltInitCtxtExt: already initialized\n");
992 if (extData ==
NULL) {
993#ifdef WITH_XSLT_DEBUG_EXTENSIONS
995 "xsltInitCtxtExt: no extData\n");
999 if (ctxtData ==
NULL) {
1000 if (
module->shutdownFunc)
1001 module->shutdownFunc(ctxt->
ctxt, URI, extData);
1009 if (
module->shutdownFunc)
1010 module->shutdownFunc(ctxt->
ctxt, URI, extData);
1018 "Failed to register module data: %s\n", URI);
1019 if (
module->shutdownFunc)
1020 module->shutdownFunc(ctxt->
ctxt, URI, extData);
1025#ifdef WITH_XSLT_DEBUG_EXTENSIONS
1064#ifdef WITH_XSLT_DEBUG_EXTENSIONS
1092#ifdef WITH_XSLT_DEBUG_EXTENSIONS
1094 "Shutting down module : %s\n", URI);
1096 module->shutdownFunc(ctxt, URI,
data->extData);
1138#ifdef WITH_XSLT_DEBUG_EXTENSIONS
1140 "Shutting down module : %s\n", URI);
1185#ifdef XSLT_REFACTORED
1196 xsltPointerListPtr
list = XSLT_CCTXT(
style)->inode->extElemNs;
1198 for (
i = 0;
i <
list->number;
i++) {
1282 if ((URI ==
NULL) || (initFunc ==
NULL))
1294 if ((
module->initFunc == initFunc) &&
1295 (
module->shutdownFunc == shutdownFunc))
1302 styleInitFunc, styleShutdownFunc);
1394 if ((ctxt ==
NULL) || (ctxt->context ==
NULL))
1396 return (ctxt->context->extra);
1411 xmlXPathFunction function)
1443 xmlXPathFunction
ret;
1536 "xsltNewExtElement : malloc failed\n");
1565 comp->
func = function;
1567 comp->
free = freeFunc;
1570 style->preComps = comp;
1589 (inst->type != XML_ELEMENT_NODE) || (inst->ns ==
NULL))
1753 return (
ext->transform);
1793 return (
ext->precomp);
1974 return data->extData;
2006 "xsltExtFunctionTest: not initialized,"
2007 " calling xsltGetExtData\n");
2011 "xsltExtElementTest: not initialized\n");
2015 if (tctxt ==
NULL) {
2017 "xsltExtFunctionTest: failed to get the transformation context\n");
2024 "xsltExtFunctionTest: failed to get module data\n");
2029 "xsltExtFunctionTest: got wrong module data\n");
2032#ifdef WITH_XSLT_DEBUG_FUNCTION
2034 "libxslt:test() called with %d args\n", nargs);
2053 "xsltExtElementTest: no transformation context\n");
2058 "xsltExtElementPreCompTest: not initialized,"
2059 " calling xsltStyleGetExtData\n");
2063 "xsltExtElementPreCompTest: not initialized\n");
2071 "xsltExtElementPreCompTest: no instruction\n");
2094 xmlNodePtr commentNode;
2098 "xsltExtElementTest: not initialized,"
2099 " calling xsltGetExtData\n");
2103 "xsltExtElementTest: not initialized\n");
2109 "xsltExtElementTest: no transformation context\n");
2114 "xsltExtElementTest: no current node\n");
2119 "xsltExtElementTest: no instruction\n");
2124 "xsltExtElementTest: no insertion point\n");
2127 commentNode = xmlNewComment((
const xmlChar *)
2128 "libxslt:test element test worked");
2129 xmlAddChild(ctxt->
insert, commentNode);
2146 "xsltExtInitTest: not initialized,"
2147 " calling xsltStyleGetExtData\n");
2151 "xsltExtInitTest: not initialized\n");
2157 "xsltExtInitTest: already initialized\n");
2162 "Registered test module : %s\n", URI);
2181 "xsltExtShutdownTest: not initialized\n");
2186 "xsltExtShutdownTest: wrong data\n");
2190 "Unregistered test module : %s\n", URI);
2208 "xsltExtInitTest: already initialized\n");
2213 "Registered test module : %s\n", URI);
2232 "xsltExtShutdownTest: not initialized\n");
2237 "xsltExtShutdownTest: wrong data\n");
2241 "Unregistered test module : %s\n", URI);
2272 xmlModuleClose(payload);
2353 "Registered XSLT Extensions\n--------------------------\n");
2356 fprintf(output,
"No registered extension functions\n");
2358 fprintf(output,
"Registered extension functions:\n");
2363 fprintf(output,
"\nNo registered top-level extension elements\n");
2365 fprintf(output,
"\nRegistered top-level extension elements:\n");
2370 fprintf(output,
"\nNo registered instruction extension elements\n");
2372 fprintf(output,
"\nRegistered instruction extension elements:\n");
2377 fprintf(output,
"\nNo registered extension modules\n");
2379 fprintf(output,
"\nRegistered extension modules:\n");
int xsltUnregisterExtModuleElement(const xmlChar *name, const xmlChar *URI)
int xsltUnregisterExtModule(const xmlChar *URI)
int xsltCheckExtURI(xsltStylesheetPtr style, const xmlChar *URI)
static xmlChar * testData
static void xsltExtStyleShutdownTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED, const xmlChar *URI, void *data)
int xsltUnregisterExtModuleFunction(const xmlChar *name, const xmlChar *URI)
int xsltRegisterExtFunction(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI, xmlXPathFunction function)
static xmlHashTablePtr xsltModuleHash
int xsltInitCtxtExts(xsltTransformContextPtr ctxt)
static void xsltShutdownExt(void *payload, void *vctxt, const xmlChar *URI)
int xsltCheckExtPrefix(xsltStylesheetPtr style, const xmlChar *URI)
static xmlMutexPtr xsltExtMutex
static void xsltExtFunctionTest(xmlXPathParserContextPtr ctxt, int nargs ATTRIBUTE_UNUSED)
void xsltDebugDumpExtensions(FILE *output)
static xsltExtModulePtr xsltNewExtModule(xsltExtInitFunction initFunc, xsltExtShutdownFunction shutdownFunc, xsltStyleExtInitFunction styleInitFunc, xsltStyleExtShutdownFunction styleShutdownFunc)
int xsltRegisterExtElement(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI, xsltTransformFunction function)
xsltPreComputeFunction xsltExtModuleElementPreComputeLookup(const xmlChar *name, const xmlChar *URI)
static void xsltFreeExtModuleEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED)
static xsltExtElementPtr xsltNewExtElement(xsltPreComputeFunction precomp, xsltTransformFunction transform)
static int xsltExtModuleRegisterDynamic(const xmlChar *URI ATTRIBUTE_UNUSED)
static xsltExtDataPtr xsltStyleInitializeStylesheetModule(xsltStylesheetPtr style, const xmlChar *URI)
void * xsltGetExtData(xsltTransformContextPtr ctxt, const xmlChar *URI)
static void * xsltExtInitTest(xsltTransformContextPtr ctxt, const xmlChar *URI)
static void xsltUnregisterAllExtModuleElement(void)
int xsltRegisterExtModuleFull(const xmlChar *URI, xsltExtInitFunction initFunc, xsltExtShutdownFunction shutdownFunc, xsltStyleExtInitFunction styleInitFunc, xsltStyleExtShutdownFunction styleShutdownFunc)
static void * xsltExtStyleInitTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED, const xmlChar *URI)
static void xsltDebugDumpExtModulesCallback(void *function ATTRIBUTE_UNUSED, void *data, const xmlChar *URI, const xmlChar *not_used ATTRIBUTE_UNUSED, const xmlChar *not_used2 ATTRIBUTE_UNUSED)
static xmlHashTablePtr xsltTopLevelsHash
static void xsltFreeExtData(xsltExtDataPtr ext)
int xsltRegisterExtModuleTopLevel(const xmlChar *name, const xmlChar *URI, xsltTopLevelFunction function)
void xsltRegisterTestModule(void)
static xmlChar * testStyleData
static void xsltUnregisterAllExtModules(void)
int xsltRegisterExtModule(const xmlChar *URI, xsltExtInitFunction initFunc, xsltExtShutdownFunction shutdownFunc)
void xsltFreeCtxtExts(xsltTransformContextPtr ctxt)
static void xsltUnregisterAllExtModuleFunction(void)
xsltExtModule * xsltExtModulePtr
static void xsltFreeExtDefList(xsltExtDefPtr extensiond)
static void xsltFreeElemPreComp(xsltElemPreCompPtr comp)
static xsltExtDataPtr xsltNewExtData(xsltExtModulePtr extModule, void *extData)
xsltTransformFunction xsltExtModuleElementLookup(const xmlChar *name, const xmlChar *URI)
xsltElemPreCompPtr xsltPreComputeExtModuleElement(xsltStylesheetPtr style, xmlNodePtr inst)
static xsltExtDefPtr xsltNewExtDef(const xmlChar *prefix, const xmlChar *URI)
xsltExtElement * xsltExtElementPtr
xsltTransformContextPtr xsltXPathGetTransformContext(xmlXPathParserContextPtr ctxt)
void xsltShutdownExts(xsltStylesheetPtr style)
static void xsltShutdownCtxtExt(void *payload, void *vctxt, const xmlChar *URI)
xsltExtData * xsltExtDataPtr
static void xsltFreeExtDef(xsltExtDefPtr extensiond)
xsltElemPreCompPtr xsltNewElemPreComp(xsltStylesheetPtr style, xmlNodePtr inst, xsltTransformFunction function)
static void xsltFreeExtDataEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED)
static xmlHashTablePtr xsltFunctionsHash
void xsltInitElemPreComp(xsltElemPreCompPtr comp, xsltStylesheetPtr style, xmlNodePtr inst, xsltTransformFunction function, xsltElemPreCompDeallocator freeFunc)
int xsltRegisterExtModuleElement(const xmlChar *name, const xmlChar *URI, xsltPreComputeFunction precomp, xsltTransformFunction transform)
static void xsltUnregisterAllExtModuleTopLevel(void)
static void xsltHashScannerModuleFree(void *payload ATTRIBUTE_UNUSED, void *data ATTRIBUTE_UNUSED, const xmlChar *name ATTRIBUTE_UNUSED)
xmlXPathFunction xsltExtModuleFunctionLookup(const xmlChar *name, const xmlChar *URI)
xsltTransformFunction xsltExtElementLookup(xsltTransformContextPtr ctxt, const xmlChar *name, const xmlChar *URI)
static xsltElemPreCompPtr xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst, xsltTransformFunction function)
static void xsltInitCtxtExt(void *payload, void *data, const xmlChar *URI)
static xmlHashTablePtr xsltElementsHash
void xsltCleanupGlobals(void)
static void xsltFreeExtElement(xsltExtElementPtr ext)
static void xsltExtElementTest(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltElemPreCompPtr comp ATTRIBUTE_UNUSED)
static void xsltFreeExtModule(xsltExtModulePtr ext)
static void xsltExtShutdownTest(xsltTransformContextPtr ctxt, const xmlChar *URI, void *data)
void xsltInitGlobals(void)
static xmlHashTablePtr xsltExtensionsHash
static void xsltFreeExtElementEntry(void *payload, const xmlChar *name ATTRIBUTE_UNUSED)
xmlHashTablePtr xsltGetExtInfo(xsltStylesheetPtr style, const xmlChar *URI)
static void xsltDebugDumpExtensionsCallback(void *function ATTRIBUTE_UNUSED, void *data, const xmlChar *name, const xmlChar *URI, const xmlChar *not_used ATTRIBUTE_UNUSED)
void xsltShutdownCtxtExts(xsltTransformContextPtr ctxt)
xsltExtDef * xsltExtDefPtr
int xsltRegisterExtModuleFunction(const xmlChar *name, const xmlChar *URI, xmlXPathFunction function)
void * xsltStyleGetExtData(xsltStylesheetPtr style, const xmlChar *URI)
void xsltFreeExts(xsltStylesheetPtr style)
int xsltRegisterExtPrefix(xsltStylesheetPtr style, const xmlChar *prefix, const xmlChar *URI)
int xsltUnregisterExtModuleTopLevel(const xmlChar *name, const xmlChar *URI)
xsltTopLevelFunction xsltExtModuleTopLevelLookup(const xmlChar *name, const xmlChar *URI)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static const WCHAR *const ext[]
char *CDECL getenv(const char *name)
int WINAPIV fprintf(FILE *file, const char *format,...)
void(* xsltStyleExtShutdownFunction)(xsltStylesheetPtr style, const xmlChar *URI, void *data)
void(* xsltTopLevelFunction)(xsltStylesheetPtr style, xmlNodePtr inst)
void *(* xsltExtInitFunction)(xsltTransformContextPtr ctxt, const xmlChar *URI)
void *(* xsltStyleExtInitFunction)(xsltStylesheetPtr style, const xmlChar *URI)
void(* xsltExtShutdownFunction)(xsltTransformContextPtr ctxt, const xmlChar *URI, void *data)
xsltElemPreCompPtr(* xsltPreComputeFunction)(xsltStylesheetPtr style, xmlNodePtr inst, xsltTransformFunction function)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLuint GLenum GLenum transform
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
xsltStylesheetPtr xsltNextImport(xsltStylesheetPtr cur)
XMLPUBFUN void xmlMutexLock(xmlMutexPtr tok)
XMLPUBFUN void xmlFreeMutex(xmlMutexPtr tok)
XMLPUBFUN void xmlMutexUnlock(xmlMutexPtr tok)
XMLPUBFUN xmlMutexPtr xmlNewMutex(void)
void xmlHashScan(xmlHashTablePtr hash, xmlHashScanner scan, void *data)
void xmlHashFree(xmlHashTablePtr hash, xmlHashDeallocator dealloc)
void * xmlHashLookup(xmlHashTablePtr hash, const xmlChar *key)
void * xmlHashLookup2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2)
int xmlHashRemoveEntry(xmlHashTablePtr hash, const xmlChar *key, xmlHashDeallocator dealloc)
int xmlHashRemoveEntry2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2, xmlHashDeallocator dealloc)
int xmlHashAddEntry(xmlHashTablePtr hash, const xmlChar *key, void *payload)
xmlHashTablePtr xmlHashCreate(int size)
void xmlHashScanFull(xmlHashTablePtr hash, xmlHashScannerFull scan, void *data)
int xmlHashUpdateEntry2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2, void *payload, xmlHashDeallocator dealloc)
int xmlHashAddEntry2(xmlHashTablePtr hash, const xmlChar *key, const xmlChar *key2, void *payload)
xsltElemPreCompDeallocator free
xsltTransformFunction func
xsltExtModulePtr extModule
struct _xsltExtDef * next
xsltPreComputeFunction precomp
xsltTransformFunction transform
xsltExtInitFunction initFunc
xsltExtShutdownFunction shutdownFunc
xsltStyleExtInitFunction styleInitFunc
xsltStyleExtShutdownFunction styleShutdownFunc
xsltTransformContextPtr ctxt
struct _xsltStylesheet * parent
xmlHashTablePtr extElements
xmlHashTablePtr extFunctions
xmlXPathContextPtr xpathCtxt
Character const *const prefix
XMLPUBFUN int xmlCheckFilename(const char *path)
XMLPUBFUN int xmlStrPrintf(xmlChar *buf, int len, const char *msg,...) LIBXML_ATTR_FORMAT(3
XMLPUBFUN const xmlChar * xmlStrstr(const xmlChar *str, const xmlChar *val)
XMLPUBFUN xmlChar * xmlStrcat(xmlChar *cur, const xmlChar *add)
XMLPUBFUN int xmlStrEqual(const xmlChar *str1, const xmlChar *str2)
XMLPUBFUN xmlChar * xmlStrdup(const xmlChar *cur)
xsltTransformContext * xsltTransformContextPtr
xsltElemPreComp * xsltElemPreCompPtr
#define XML_CAST_FPTR(fptr)
xsltStylesheet * xsltStylesheetPtr
void(* xsltElemPreCompDeallocator)(xsltElemPreCompPtr comp)
void(* xsltTransformFunction)(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst, xsltElemPreCompPtr comp)
void xsltFreeLocales(void)
void xsltTransformError(xsltTransformContextPtr ctxt, xsltStylesheetPtr style, xmlNodePtr node, const char *msg,...)
xmlGenericErrorFunc xsltGenericError
xmlGenericErrorFunc xsltGenericDebug
void * xsltGenericDebugContext
void * xsltGenericErrorContext