added the possibility to register a transformation context specific error
authorDaniel Veillard <veillard@src.gnome.org>
Tue, 15 Oct 2002 16:06:47 +0000 (16:06 +0000)
committerDaniel Veillard <veillard@src.gnome.org>
Tue, 15 Oct 2002 16:06:47 +0000 (16:06 +0000)
* libxslt/xsltInternals.h libxslt/xsltutils.[ch]: added the
  possibility to register a transformation context specific
  error handler, with xsltSetTransformErrorFunc() and provided
  a new routine xsltTransformError() to handle contextual errors,
  this should fix #94435
* libxslt/*.c: modified all the code to use the context specific
  error handling, as a result xsltPrintErrorContext() is not called
  anymore except internally from xsltTransformError()
Daniel

21 files changed:
ChangeLog
libxslt/attributes.c
libxslt/documents.c
libxslt/extensions.c
libxslt/extra.c
libxslt/functions.c
libxslt/imports.c
libxslt/keys.c
libxslt/namespaces.c
libxslt/numbers.c
libxslt/pattern.c
libxslt/preproc.c
libxslt/security.c
libxslt/templates.c
libxslt/templates.h
libxslt/transform.c
libxslt/variables.c
libxslt/xslt.c
libxslt/xsltInternals.h
libxslt/xsltutils.c
libxslt/xsltutils.h

index cf71155..8f8768c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Tue Oct 15 18:02:37 CEST 2002 Daniel Veillard <daniel@veillard.com>
+
+       * libxslt/xsltInternals.h libxslt/xsltutils.[ch]: added the
+         possibility to register a transformation context specific
+         error handler, with xsltSetTransformErrorFunc() and provided
+         a new routine xsltTransformError() to handle contextual errors,
+         this should fix #94435
+       * libxslt/*.c: modified all the code to use the context specific
+         error handling, as a result xsltPrintErrorContext() is not called
+         anymore except internally from xsltTransformError()
+
 Tue Oct 15 14:52:23 CEST 2002 Daniel Veillard <daniel@veillard.com>
 
        * libxslt/transform.c: closing #94933, any error will make
index febee1a..45fff85 100644 (file)
@@ -533,8 +533,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if (ctxt->insert == NULL)
         return;
     if (comp == NULL) {
-        xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(ctxt, NULL, inst,
                          "xsl:attribute : compilation failed\n");
         return;
     }
@@ -546,8 +545,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node,
         return;
     }
     if (ctxt->insert->children != NULL) {
-        xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(ctxt, NULL, inst,
                          "xsl:attribute : node already has children\n");
         return;
     }
@@ -562,8 +560,7 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node,
             xsltEvalAttrValueTemplate(ctxt, inst, (const xmlChar *) "name",
                                       XSLT_NAMESPACE);
         if (prop == NULL) {
-            xsltPrintErrorContext(ctxt, NULL, inst);
-            xsltGenericError(xsltGenericErrorContext,
+            xsltTransformError(ctxt, NULL, inst,
                              "xsl:attribute : name is missing\n");
             goto error;
         }
@@ -597,9 +594,8 @@ xsltAttributeInternal(xsltTransformContextPtr ctxt, xmlNodePtr node,
             if (prefix != NULL) {
                 ns = xmlSearchNs(inst->doc, inst, prefix);
                 if (ns == NULL) {
-                    xsltPrintErrorContext(ctxt, NULL, inst);
-                    xsltGenericError(xsltGenericErrorContext,
-                                     "xsl:attribute : no namespace bound to prefix %s\n",
+                    xsltTransformError(ctxt, NULL, inst,
+                        "xsl:attribute : no namespace bound to prefix %s\n",
                                      prefix);
                 } else {
                     ns = xsltGetNamespace(ctxt, inst, ns, ctxt->insert);
index 7c3b9eb..e0c817e 100644 (file)
@@ -52,8 +52,7 @@ xsltNewDocument(xsltTransformContextPtr ctxt, xmlDocPtr doc) {
 
     cur = (xsltDocumentPtr) xmlMalloc(sizeof(xsltDocument));
     if (cur == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
                "xsltNewDocument : malloc failed\n");
        return(NULL);
     }
@@ -80,8 +79,7 @@ xsltNewStyleDocument(xsltStylesheetPtr style, xmlDocPtr doc) {
 
     cur = (xsltDocumentPtr) xmlMalloc(sizeof(xsltDocument));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, style, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, (xmlNodePtr) doc,
                "xsltNewStyleDocument : malloc failed\n");
        return(NULL);
     }
@@ -172,8 +170,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) {
        
        res = xsltCheckRead(ctxt->sec, ctxt, URI);
        if (res == 0) {
-           xsltPrintErrorContext(ctxt, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, NULL,
                 "xsltLoadDocument: read rights for %s denied\n",
                             URI);
            return(NULL);
@@ -199,8 +196,7 @@ xsltLoadDocument(xsltTransformContextPtr ctxt, const xmlChar *URI) {
 #ifdef LIBXML_XINCLUDE_ENABLED
        xmlXIncludeProcess(doc);
 #else
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
            "xsltLoadDocument(%s) : XInclude processing not compiled in\n",
                         URI);
 #endif
@@ -242,8 +238,7 @@ xsltLoadStyleDocument(xsltStylesheetPtr style, const xmlChar *URI) {
 
        res = xsltCheckRead(sec, NULL, URI);
        if (res == 0) {
-           xsltPrintErrorContext(NULL, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                 "xsltLoadStyleDocument: read rights for %s denied\n",
                             URI);
            return(NULL);
index befd8af..a50e8e0 100644 (file)
@@ -95,8 +95,7 @@ xsltNewExtDef(const xmlChar * prefix, const xmlChar * URI)
 
     cur = (xsltExtDefPtr) xmlMalloc(sizeof(xsltExtDef));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltNewExtDef : malloc failed\n");
         return (NULL);
     }
@@ -163,8 +162,7 @@ xsltNewExtModule(xsltExtInitFunction initFunc,
 
     cur = (xsltExtModulePtr) xmlMalloc(sizeof(xsltExtModule));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltNewExtModule : malloc failed\n");
         return (NULL);
     }
@@ -206,8 +204,7 @@ xsltNewExtData(xsltExtModulePtr extModule, void *extData)
        return(NULL);
     cur = (xsltExtDataPtr) xmlMalloc(sizeof(xsltExtData));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltNewExtData : malloc failed\n");
         return (NULL);
     }
@@ -249,8 +246,7 @@ xsltNewExtElement (xsltPreComputeFunction precomp,
 
     cur = (xsltExtElementPtr) xmlMalloc(sizeof(xsltExtElement));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltNewExtElement : malloc failed\n");
         return (NULL);
     }
@@ -524,8 +520,7 @@ xsltGetExtData(xsltTransformContextPtr ctxt, const xmlChar * URI) {
                return (NULL);
            if (xmlHashAddEntry(ctxt->extInfos, URI,
                                (void *) data) < 0) {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                                 "Failed to register module data: %s\n", URI);
                if (module->shutdownFunc)
                    module->shutdownFunc(ctxt, URI, extData);
@@ -984,8 +979,7 @@ xsltNewElemPreComp (xsltStylesheetPtr style, xmlNodePtr inst,
 
     cur = (xsltElemPreCompPtr) xmlMalloc (sizeof(xsltElemPreComp));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, style, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, NULL,
                          "xsltNewExtElement : malloc failed\n");
         return (NULL);
     }
@@ -1307,29 +1301,25 @@ xsltExtFunctionTest(xmlXPathParserContextPtr ctxt, int nargs ATTRIBUTE_UNUSED)
                         " calling xsltGetExtData\n");
        data = xsltGetExtData(tctxt, (const xmlChar *) XSLT_DEFAULT_URL);
        if (data == NULL) {
-           xsltPrintErrorContext(tctxt, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(tctxt, NULL, NULL,
                             "xsltExtElementTest: not initialized\n");
            return;
        }
     }
     if (tctxt == NULL) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "xsltExtFunctionTest: failed to get the transformation context\n");
         return;
     }
     if (data == NULL)
        data = xsltGetExtData(tctxt, (const xmlChar *) XSLT_DEFAULT_URL);
     if (data == NULL) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "xsltExtFunctionTest: failed to get module data\n");
         return;
     }
     if (data != testData) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "xsltExtFunctionTest: got wrong module data\n");
         return;
     }
@@ -1352,8 +1342,7 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst,
     xsltElemPreCompPtr ret;
 
     if (style == NULL) {
-       xsltPrintErrorContext(NULL, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, inst,
                 "xsltExtElementTest: no transformation context\n");
         return (NULL);
     }
@@ -1363,16 +1352,14 @@ xsltExtElementPreCompTest(xsltStylesheetPtr style, xmlNodePtr inst,
                 " calling xsltStyleGetExtData\n");
        xsltStyleGetExtData(style, (const xmlChar *) XSLT_DEFAULT_URL);
        if (testStyleData == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsltExtElementPreCompTest: not initialized\n");
            style->errors++;
            return (NULL);
        }
     }
     if (inst == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
                 "xsltExtElementPreCompTest: no instruction\n");
        style->errors++;
         return (NULL);
@@ -1403,33 +1390,28 @@ xsltExtElementTest(xsltTransformContextPtr ctxt, xmlNodePtr node,
                         " calling xsltGetExtData\n");
        xsltGetExtData(ctxt, (const xmlChar *) XSLT_DEFAULT_URL);
        if (testData == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                             "xsltExtElementTest: not initialized\n");
            return;
        }
     }
     if (ctxt == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltExtElementTest: no transformation context\n");
         return;
     }
     if (node == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltExtElementTest: no current node\n");
         return;
     }
     if (inst == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltExtElementTest: no instruction\n");
         return;
     }
     if (ctxt->insert == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltExtElementTest: no insertion point\n");
         return;
     }
@@ -1456,15 +1438,13 @@ xsltExtInitTest(xsltTransformContextPtr ctxt, const xmlChar * URI) {
                         " calling xsltStyleGetExtData\n");
        xsltStyleGetExtData(ctxt->style, URI);
        if (testStyleData == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, NULL,
                             "xsltExtInitTest: not initialized\n");
            return (NULL);
        }
     }  
     if (testData != NULL) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
                          "xsltExtInitTest: already initialized\n");
         return (NULL);
     }
@@ -1487,14 +1467,12 @@ static void
 xsltExtShutdownTest(xsltTransformContextPtr ctxt,
                     const xmlChar * URI, void *data) {
     if (testData == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
                          "xsltExtShutdownTest: not initialized\n");
         return;
     }
     if (data != testData) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
                          "xsltExtShutdownTest: wrong data\n");
     }
     testData = NULL;
@@ -1515,8 +1493,7 @@ xsltExtStyleInitTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED,
                     const xmlChar * URI)
 {
     if (testStyleData != NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltExtInitTest: already initialized\n");
         return (NULL);
     }
@@ -1544,8 +1521,7 @@ xsltExtStyleShutdownTest(xsltStylesheetPtr style ATTRIBUTE_UNUSED,
         return;
     }
     if (data != testStyleData) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                          "xsltExtShutdownTest: wrong data\n");
     }
     testStyleData = NULL;
@@ -1588,7 +1564,10 @@ xsltCleanupGlobals(void)
 }
 
 static void
-xsltDebugDumpExtensionsCallback(void* function, FILE *output, const xmlChar* name, const xmlChar* URI, const xmlChar* not_used) {
+xsltDebugDumpExtensionsCallback(void* function ATTRIBUTE_UNUSED,
+                               FILE *output, const xmlChar* name,
+                               const xmlChar* URI,
+                               const xmlChar* not_used ATTRIBUTE_UNUSED) {
        if (!name||!URI)
                return;
        fprintf(output,"{%s}%s\n",URI,name);
index de5964e..51b6c73 100644 (file)
@@ -131,8 +131,7 @@ xsltDebug(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED,
 void
 xsltFunctionNodeSet(xmlXPathParserContextPtr ctxt, int nargs){
     if (nargs != 1) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "node-set() : expects one result-tree arg\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
@@ -140,8 +139,7 @@ xsltFunctionNodeSet(xmlXPathParserContextPtr ctxt, int nargs){
     if ((ctxt->value == NULL) ||
        ((ctxt->value->type != XPATH_XSLT_TREE) &&
         (ctxt->value->type != XPATH_NODESET))) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
            "node-set() invalid arg expecting a result tree\n");
        ctxt->error = XPATH_INVALID_TYPE;
        return;
@@ -183,8 +181,7 @@ xsltFunctionLocalTime(xmlXPathParserContextPtr ctxt, int nargs) {
     struct tm *local_tm;
  
     if (nargs != 1) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                       "localTime() : invalid number of args %d\n", nargs);
        ctxt->error = XPATH_INVALID_ARITY;
        return;
index a4c5707..5584106 100644 (file)
@@ -114,18 +114,14 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
 
 
     if ((nargs < 1) || (nargs > 2)) {
-        xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL,
-                              NULL);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "document() : invalid number of args %d\n",
                          nargs);
         ctxt->error = XPATH_INVALID_ARITY;
         return;
     }
     if (ctxt->value == NULL) {
-        xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL,
-                              NULL);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "document() : invalid arg value\n");
         ctxt->error = XPATH_INVALID_TYPE;
         return;
@@ -133,9 +129,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
 
     if (nargs == 2) {
         if (ctxt->value->type != XPATH_NODESET) {
-            xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                  NULL, NULL);
-            xsltGenericError(xsltGenericErrorContext,
+            xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                              "document() : invalid arg expecting a nodeset\n");
             ctxt->error = XPATH_INVALID_TYPE;
             return;
@@ -182,9 +176,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
      */
     xmlXPathStringFunction(ctxt, 1);
     if (ctxt->value->type != XPATH_STRING) {
-        xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL,
-                              NULL);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                          "document() : invalid arg expecting a string\n");
         ctxt->error = XPATH_INVALID_TYPE;
         if (obj2 != NULL)
@@ -227,9 +219,7 @@ xsltDocumentFunction(xmlXPathParserContextPtr ctxt, int nargs)
 
             tctxt = xsltXPathGetTransformContext(ctxt);
             if (tctxt == NULL) {
-                xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                      NULL, NULL);
-                xsltGenericError(xsltGenericErrorContext,
+                xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                                  "document() : internal error tctxt == NULL\n");
                 valuePush(ctxt, xmlXPathNewNodeSet(NULL));
             } else {
@@ -274,8 +264,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
     xsltTransformContextPtr tctxt;
 
     if (nargs != 2) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "key() : expects two arguments\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
@@ -284,8 +273,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
     obj2 = valuePop(ctxt);
     if ((obj2 == NULL) ||
        (ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
            "key() : invalid arg expecting a string\n");
        ctxt->error = XPATH_INVALID_TYPE;
        xmlXPathFreeObject(obj2);
@@ -331,9 +319,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
            if (prefix != NULL) {
                keyURI = xmlXPathNsLookup(ctxt->context, prefix);
                if (keyURI == NULL) {
-                   xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                         NULL, NULL);
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                        "key() : prefix %s is not bound\n", prefix);
                }
                xmlFree(prefix);
@@ -348,9 +334,7 @@ xsltKeyFunction(xmlXPathParserContextPtr ctxt, int nargs){
        valuePush(ctxt, obj2);
        xmlXPathStringFunction(ctxt, 1);
        if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
-           xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                 NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "key() : invalid arg expecting a string\n");
            ctxt->error = XPATH_INVALID_TYPE;
            xmlXPathFreeObject(obj1);
@@ -498,9 +482,7 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
 
        if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_NODESET)) {
            ctxt->error = XPATH_INVALID_TYPE;
-           xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                 NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "generate-id() : invalid arg expecting a node-set\n");
            return;
        }
@@ -519,8 +501,7 @@ xsltGenerateIdFunction(xmlXPathParserContextPtr ctxt, int nargs){
        }
        xmlXPathFreeObject(obj);
     } else {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "generate-id() : invalid number of args %d\n", nargs);
        ctxt->error = XPATH_INVALID_ARITY;
        return;
@@ -550,15 +531,13 @@ xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs){
     const xmlChar *nsURI = NULL;
 
     if (nargs != 1) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "system-property() : expects one string arg\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
     }
     if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
            "system-property() : invalid arg expecting a string\n");
        ctxt->error = XPATH_INVALID_TYPE;
        return;
@@ -573,9 +552,7 @@ xsltSystemPropertyFunction(xmlXPathParserContextPtr ctxt, int nargs){
        } else {
            nsURI = xmlXPathNsLookup(ctxt->context, prefix);
            if (nsURI == NULL) {
-               xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                     NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                    "system-property() : prefix %s is not bound\n", prefix);
            }
        }
@@ -647,15 +624,13 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){
     xsltTransformContextPtr tctxt;
 
     if (nargs != 1) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "element-available() : expects one string arg\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
     }
     if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
            "element-available() : invalid arg expecting a string\n");
        ctxt->error = XPATH_INVALID_TYPE;
        return;
@@ -663,8 +638,7 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){
     obj = valuePop(ctxt);
     tctxt = xsltXPathGetTransformContext(ctxt);
     if (tctxt == NULL) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "element-available() : internal error tctxt == NULL\n");
        xmlXPathFreeObject(obj);
        valuePush(ctxt, xmlXPathNewBoolean(0));
@@ -682,9 +656,7 @@ xsltElementAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){
     } else {
        nsURI = xmlXPathNsLookup(ctxt->context, prefix);
        if (nsURI == NULL) {
-           xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                 NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "element-available() : prefix %s is not bound\n", prefix);
        }
     }
@@ -717,15 +689,13 @@ xsltFunctionAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){
     const xmlChar *nsURI = NULL;
 
     if (nargs != 1) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "function-available() : expects one string arg\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
     }
     if ((ctxt->value == NULL) || (ctxt->value->type != XPATH_STRING)) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
            "function-available() : invalid arg expecting a string\n");
        ctxt->error = XPATH_INVALID_TYPE;
        return;
@@ -738,9 +708,7 @@ xsltFunctionAvailableFunction(xmlXPathParserContextPtr ctxt, int nargs){
     } else {
        nsURI = xmlXPathNsLookup(ctxt->context, prefix);
        if (nsURI == NULL) {
-           xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt),
-                                 NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "function-available() : prefix %s is not bound\n", prefix);
        }
     }
@@ -771,16 +739,14 @@ xsltCurrentFunction(xmlXPathParserContextPtr ctxt, int nargs){
     xsltTransformContextPtr tctxt;
 
     if (nargs != 0) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "current() : function uses no argument\n");
        ctxt->error = XPATH_INVALID_ARITY;
        return;
     }
     tctxt = xsltXPathGetTransformContext(ctxt);
     if (tctxt == NULL) {
-       xsltPrintErrorContext(xsltXPathGetTransformContext(ctxt), NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(xsltXPathGetTransformContext(ctxt), NULL, NULL,
                "current() : internal error tctxt == NULL\n");
        valuePush(ctxt, xmlXPathNewNodeSet(NULL));
     } else {
index 8842af7..35a0230 100644 (file)
@@ -78,8 +78,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     uriRef = xsltGetNsProp(cur, (const xmlChar *)"href", XSLT_NAMESPACE);
     if (uriRef == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:import : missing href attribute\n");
        goto error;
     }
@@ -87,8 +86,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
     base = xmlNodeGetBase(style->doc, cur);
     URI = xmlBuildURI(uriRef, base);
     if (URI == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:import : invalid URI reference %s\n", uriRef);
        goto error;
     }
@@ -98,12 +96,11 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
      */
     sec = xsltGetDefaultSecurityPrefs();
     if (sec != NULL) {
-       int res;
+       int secres;
 
-       res = xsltCheckRead(sec, NULL, URI);
-       if (res == 0) {
-           xsltPrintErrorContext(NULL, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+       secres = xsltCheckRead(sec, NULL, URI);
+       if (secres == 0) {
+           xsltTransformError(NULL, NULL, NULL,
                 "xsl:import: read rights for %s denied\n",
                             URI);
            goto error;
@@ -112,8 +109,7 @@ xsltParseStylesheetImport(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     import = xmlParseFile((const char *)URI);
     if (import == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:import : unable to load %s\n", URI);
        goto error;
     }
@@ -164,8 +160,7 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     uriRef = xsltGetNsProp(cur, (const xmlChar *)"href", XSLT_NAMESPACE);
     if (uriRef == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:include : missing href attribute\n");
        goto error;
     }
@@ -173,16 +168,14 @@ xsltParseStylesheetInclude(xsltStylesheetPtr style, xmlNodePtr cur) {
     base = xmlNodeGetBase(style->doc, cur);
     URI = xmlBuildURI(uriRef, base);
     if (URI == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:include : invalid URI reference %s\n", uriRef);
        goto error;
     }
 
     include = xsltLoadStyleDocument(style, URI);
     if (include == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:include : unable to load %s\n", URI);
        goto error;
     }
index 8486c36..d4f7a57 100644 (file)
@@ -76,8 +76,7 @@ xsltNewKeyDef(const xmlChar *name, const xmlChar *nameURI) {
 
     cur = (xsltKeyDefPtr) xmlMalloc(sizeof(xsltKeyDef));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewKeyDef : malloc failed\n");
        return(NULL);
     }
@@ -147,8 +146,7 @@ xsltNewKeyTable(const xmlChar *name, const xmlChar *nameURI) {
 
     cur = (xsltKeyTablePtr) xmlMalloc(sizeof(xsltKeyTable));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewKeyTable : malloc failed\n");
        return(NULL);
     }
@@ -265,8 +263,7 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
            end++;
        }
        if (current == end) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                             "key pattern is empty\n");
            style->errors++;
            goto error;
@@ -296,16 +293,14 @@ xsltAddKey(xsltStylesheetPtr style, const xmlChar *name,
 #endif
     key->comp = xmlXPathCompile(pattern);
     if (key->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
                "xsl:key : XPath pattern compilation failed '%s'\n",
                         pattern);
        style->errors++;
     }
     key->usecomp = xmlXPathCompile(use);
     if (key->usecomp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
                "xsl:key : XPath pattern compilation failed '%s'\n",
                         use);
        style->errors++;
@@ -419,8 +414,7 @@ xsltEvalXPathKeys(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp) {
                    res->stringval = NULL;
                }
            } else {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                     "xpath : string() function didn't return a String\n");
            }
        }
index 16796ff..ba99118 100644 (file)
@@ -70,16 +70,14 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) {
     sprefix = xsltGetNsProp(node, (const xmlChar *)"stylesheet-prefix",
                           XSLT_NAMESPACE);
     if (sprefix == NULL) {
-       xsltPrintErrorContext(NULL, style, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
            "namespace-alias: stylesheet-prefix attribute missing\n");
        return;
     }
     rprefix = xsltGetNsProp(node, (const xmlChar *)"result-prefix",
                           XSLT_NAMESPACE);
     if (rprefix == NULL) {
-       xsltPrintErrorContext(NULL, style, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
            "namespace-alias: result-prefix attribute missing\n");
        goto error;
     }
@@ -89,8 +87,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) {
        sNs = xmlSearchNs(node->doc, node, sprefix);
     }
     if ((sNs == NULL) || (sNs->href == NULL)) {
-       xsltPrintErrorContext(NULL, style, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
            "namespace-alias: prefix %s not bound to any namespace\n",
                         sprefix);
        goto error;
@@ -101,8 +98,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) {
        rNs = xmlSearchNs(node->doc, node, rprefix);
     }
     if ((rNs == NULL) || (rNs->href == NULL)) {
-       xsltPrintErrorContext(NULL, style, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
            "namespace-alias: prefix %s not bound to any namespace\n",
                         rprefix);
        goto error;
@@ -110,8 +106,7 @@ xsltNamespaceAlias(xsltStylesheetPtr style, xmlNodePtr node) {
     if (style->nsAliases == NULL)
        style->nsAliases = xmlHashCreate(10);
     if (style->nsAliases == NULL) {
-       xsltPrintErrorContext(NULL, style, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
            "namespace-alias: cannot create hash table\n");
        goto error;
     }
index b31e586..e99aed2 100644 (file)
@@ -1073,8 +1073,7 @@ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
 
 OUTPUT_NUMBER:
     if (found_error != 0) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                 "xsltFormatNumberConversion : error in format string, using default\n");
        default_sign = (number < 0.0) ? 1 : 0;
        prefix_length = suffix_length = 0;
index d61ca14..c88b33d 100644 (file)
@@ -125,8 +125,7 @@ xsltNewCompMatch(void) {
 
     cur = (xsltCompMatchPtr) xmlMalloc(sizeof(xsltCompMatch));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewCompMatch : malloc failed\n");
        return(NULL);
     }
@@ -205,8 +204,7 @@ xsltNewParserContext(xsltStylesheetPtr style, xsltTransformContextPtr ctxt) {
 
     cur = (xsltParserContextPtr) xmlMalloc(sizeof(xsltParserContext));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewParserContext : malloc failed\n");
        return(NULL);
     }
@@ -246,8 +244,7 @@ xsltCompMatchAdd(xsltParserContextPtr ctxt, xsltCompMatchPtr comp,
                  xsltOp op, xmlChar * value, xmlChar * value2)
 {
     if (comp->nbStep >= 40) {
-        xsltPrintErrorContext(NULL, NULL, NULL);        /* TODO */
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(NULL, NULL, NULL,
                          "xsltCompMatchAdd: overflow\n");
         return (-1);
     }
@@ -366,8 +363,7 @@ xsltTestCompMatch(xsltTransformContextPtr ctxt, xsltCompMatchPtr comp,
     xsltStepOpPtr step, select = NULL;
 
     if ((comp == NULL) || (node == NULL) || (ctxt == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, node);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, node,
                "xsltTestCompMatch: null arg\n");
         return(-1);
     }
@@ -1192,8 +1188,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
     xmlChar *lit2 = NULL;
 
     if (CUR != '(') {
-       xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltCompileIdKeyPattern : ( expected\n");
        ctxt->error = 1;
        return;
@@ -1206,8 +1201,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
            return;
        SKIP_BLANKS;
        if (CUR != ')') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : ) expected\n");
            ctxt->error = 1;
            return;
@@ -1222,8 +1216,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
            return;
        SKIP_BLANKS;
        if (CUR != ',') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : , expected\n");
            ctxt->error = 1;
            return;
@@ -1235,8 +1228,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
            return;
        SKIP_BLANKS;
        if (CUR != ')') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : ) expected\n");
            ctxt->error = 1;
            return;
@@ -1253,8 +1245,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
                return;
            SKIP_BLANKS;
            if (CUR != ')') {
-               xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, NULL, NULL,
                        "xsltCompileIdKeyPattern : ) expected\n");
                ctxt->error = 1;
                return;
@@ -1266,8 +1257,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
        NEXT;
        SKIP_BLANKS;
        if (CUR != ')') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : ) expected\n");
            ctxt->error = 1;
            return;
@@ -1278,8 +1268,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
        NEXT;
        SKIP_BLANKS;
        if (CUR != ')') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : ) expected\n");
            ctxt->error = 1;
            return;
@@ -1290,8 +1279,7 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
        NEXT;
        SKIP_BLANKS;
        if (CUR != ')') {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileIdKeyPattern : ) expected\n");
            ctxt->error = 1;
            return;
@@ -1299,14 +1287,12 @@ xsltCompileIdKeyPattern(xsltParserContextPtr ctxt, xmlChar *name, int aid) {
        NEXT;
        PUSH(XSLT_OP_NODE, NULL, NULL);
     } else if (aid) {
-       xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
            "xsltCompileIdKeyPattern : expecting 'key' or 'id' or node type\n");
        ctxt->error = 1;
        return;
     } else {
-       xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
            "xsltCompileIdKeyPattern : node type\n");
        ctxt->error = 1;
        return;
@@ -1360,8 +1346,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
 
            ns = xmlSearchNs(ctxt->doc, ctxt->elem, prefix);
            if (ns == NULL) {
-               xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, NULL, NULL,
                "xsltCompileStepPattern : no namespace bound to prefix %s\n",
                                 prefix);
            } else {
@@ -1375,8 +1360,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
                PUSH(XSLT_OP_ATTR, NULL, URL);
                return;
            }
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileStepPattern : Name expected\n");
            ctxt->error = 1;
            goto error;
@@ -1392,8 +1376,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
            PUSH(XSLT_OP_ALL, token, NULL);
            goto parse_predicate;
        } else {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileStepPattern : Name expected\n");
            ctxt->error = 1;
            goto error;
@@ -1418,8 +1401,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
            token = xsltScanName(ctxt);
            ns = xmlSearchNs(ctxt->doc, ctxt->elem, prefix);
            if (ns == NULL) {
-               xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, NULL, NULL,
            "xsltCompileStepPattern : no namespace bound to prefix %s\n",
                                 prefix);
                ctxt->error = 1;
@@ -1433,8 +1415,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
                    NEXT;
                    PUSH(XSLT_OP_NS, URL, NULL);
                } else {
-                   xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(NULL, NULL, NULL,
                            "xsltCompileStepPattern : Name expected\n");
                    ctxt->error = 1;
                    goto error;
@@ -1453,8 +1434,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
                        PUSH(XSLT_OP_ALL, token, NULL);
                        goto parse_predicate;
                    } else {
-                       xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-                       xsltGenericError(xsltGenericErrorContext,
+                       xsltTransformError(NULL, NULL, NULL,
                            "xsltCompileStepPattern : QName expected\n");
                        ctxt->error = 1;
                        goto error;
@@ -1474,8 +1454,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
                xmlFree(token);
                token = xsltScanName(ctxt);
                if (token == NULL) {
-                   xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(NULL, NULL, NULL,
                            "xsltCompileStepPattern : QName expected\n");
                    ctxt->error = 1;
                    goto error;
@@ -1491,8 +1470,7 @@ xsltCompileStepPattern(xsltParserContextPtr ctxt, xmlChar *token) {
                }
                PUSH(XSLT_OP_ATTR, name, URL);
            } else {
-               xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileStepPattern : 'child' or 'attribute' expected\n");
                ctxt->error = 1;
                goto error;
@@ -1542,8 +1520,7 @@ parse_predicate:
            NEXT;
        }
        if (CUR == 0) {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileStepPattern : ']' expected\n");
            ctxt->error = 1;
            goto error;
@@ -1647,8 +1624,7 @@ xsltCompileLocationPathPattern(xsltParserContextPtr ctxt) {
        xmlChar *name;
        name = xsltScanName(ctxt);
        if (name == NULL) {
-           xsltPrintErrorContext(NULL, NULL, NULL); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                    "xsltCompileLocationPathPattern : Name expected\n");
            ctxt->error = 1;
            return;
@@ -1701,8 +1677,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
     int current, start, end, level, j;
 
     if (pattern == NULL) {
-       xsltPrintErrorContext(NULL, NULL, node); /* TODO */
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, node,
                         "xsltCompilePattern : NULL pattern\n");
        return(NULL);
     }
@@ -1736,8 +1711,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
            end++;
        }
        if (current == end) {
-           xsltPrintErrorContext(NULL, NULL, node); /* TODO */
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, node,
                             "xsltCompilePattern : NULL pattern\n");
            goto error;
        }
@@ -1773,8 +1747,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
 #endif
        xsltCompileLocationPathPattern(ctxt);
        if (ctxt->error) {
-           xsltPrintErrorContext(NULL, style, node);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, node,
                             "xsltCompilePattern : failed to compile '%s'\n",
                             element->pattern);
            style->errors++;
@@ -1836,8 +1809,7 @@ xsltCompilePattern(const xmlChar *pattern, xmlDocPtr doc,
        current = end;
     }
     if (end == 0) {
-       xsltPrintErrorContext(NULL, NULL, node); /* TODO */
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, node,
                         "xsltCompilePattern : NULL pattern\n");
        style->errors++;
        goto error;
@@ -1925,8 +1897,7 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
            break;
         case XSLT_OP_END:
        case XSLT_OP_PREDICATE:
-           xsltPrintErrorContext(NULL, style, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, NULL,
                             "xsltAddTemplate: invalid compiled pattern\n");
            xsltFreeCompMatch(pat);
            return(-1);
@@ -2007,8 +1978,7 @@ xsltAddTemplate(xsltStylesheetPtr style, xsltTemplatePtr cur,
                list->next = pat;
            }
        } else {
-           xsltPrintErrorContext(NULL, style, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, NULL,
                             "xsltAddTemplate: invalid compiled pattern\n");
            xsltFreeCompMatch(pat);
            return(-1);
index a52f193..9149af8 100644 (file)
@@ -66,8 +66,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) {
 
     cur = (xsltStylePreCompPtr) xmlMalloc(sizeof(xsltStylePreComp));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, style, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, NULL,
                "xsltNewStylePreComp : malloc failed\n");
        style->errors++;
        return(NULL);
@@ -121,8 +120,7 @@ xsltNewStylePreComp(xsltStylesheetPtr style, xsltStyleType type) {
            cur->func = NULL;break;
        default:
        if (cur->func == NULL) {
-           xsltPrintErrorContext(NULL, style, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, NULL,
                    "xsltNewStylePreComp : no function for type %d\n", type);
            style->errors++;
        }
@@ -257,8 +255,7 @@ xsltDocumentComp(xsltStylesheetPtr style, xmlNodePtr inst,
        base = xmlNodeGetBase(inst->doc, inst);
        URL = xmlBuildURI(filename, base);
        if (URL == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                "xsltDocumentComp: URL computation failed %s\n", filename);
            style->warnings++;
            comp->filename = xmlStrdup(filename);
@@ -313,8 +310,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) {
        else if (xmlStrEqual(comp->stype, (const xmlChar *) "number"))
            comp->number = 1;
        else {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsltSortComp: no support for data-type = %s\n", comp->stype);
            comp->number = 0; /* use default */
            style->warnings++;
@@ -329,8 +325,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) {
        else if (xmlStrEqual(comp->order, (const xmlChar *) "descending"))
            comp->descending = 1;
        else {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsltSortComp: invalid value %s for order\n", comp->order);
            comp->descending = 0; /* use default */
            style->warnings++;
@@ -350,8 +345,7 @@ xsltSortComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     }
     comp->comp = xmlXPathCompile(comp->select);
     if (comp->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsltSortComp: could not compile select expression '%s'\n",
                         comp->select);
        style->errors++;
@@ -416,8 +410,7 @@ xsltTextComp(xsltStylesheetPtr style, xmlNodePtr inst) {
            comp->noescape = 1;
        } else if (!xmlStrEqual(prop,
                                (const xmlChar *)"no")){
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
 "xsl:text: disable-output-escaping allows only yes or no\n");
            style->warnings++;
        }
@@ -564,16 +557,14 @@ xsltCopyOfComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     comp->select = xsltGetNsProp(inst, (const xmlChar *)"select",
                                XSLT_NAMESPACE);
     if (comp->select == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:copy-of : select is missing\n");
        style->errors++;
        return;
     }
     comp->comp = xmlXPathCompile(comp->select);
     if (comp->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:copy-of : could not compile select expression '%s'\n",
                         comp->select);
        style->errors++;
@@ -608,8 +599,7 @@ xsltValueOfComp(xsltStylesheetPtr style, xmlNodePtr inst) {
            comp->noescape = 1;
        } else if (!xmlStrEqual(prop,
                                (const xmlChar *)"no")){
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
 "xsl:value-of : disable-output-escaping allows only yes or no\n");
            style->warnings++;
        }
@@ -618,16 +608,14 @@ xsltValueOfComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     comp->select = xsltGetNsProp(inst, (const xmlChar *)"select",
                                XSLT_NAMESPACE);
     if (comp->select == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:value-of : select is missing\n");
        style->errors++;
        return;
     }
     comp->comp = xmlXPathCompile(comp->select);
     if (comp->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:value-of : could not compile select expression '%s'\n",
                         comp->select);
        style->errors++;
@@ -659,8 +647,7 @@ xsltWithParamComp(xsltStylesheetPtr style, xmlNodePtr inst) {
      */
     prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE);
     if (prop == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:with-param : name is missing\n");
        style->errors++;
     } else {
@@ -686,15 +673,13 @@ xsltWithParamComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     if (comp->select != NULL) {
        comp->comp = xmlXPathCompile(comp->select);
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsl:param : could not compile select expression '%s'\n",
                             comp->select);
            style->errors++;
        }
        if (inst->children != NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
            "xsl:param : content should be empty since select is present \n");
            style->warnings++;
        }
@@ -749,8 +734,7 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) {
            xmlStrEqual(prop, BAD_CAST("any"))) {
            comp->numdata.level = prop;
        } else {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                         "xsl:number : invalid value %s for level\n", prop);
            style->warnings++;
            xmlFree(prop);
@@ -766,20 +750,17 @@ xsltNumberComp(xsltStylesheetPtr style, xmlNodePtr cur) {
     prop = xsltGetNsProp(cur, (const xmlChar *)"letter-value", XSLT_NAMESPACE);
     if (prop != NULL) {
        if (xmlStrEqual(prop, BAD_CAST("alphabetic"))) {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                 "xsl:number : letter-value 'alphabetic' not implemented\n");
            style->warnings++;
            XSLT_TODO; /* xsl:number letter-value attribute alphabetic */
        } else if (xmlStrEqual(prop, BAD_CAST("traditional"))) {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                 "xsl:number : letter-value 'traditional' not implemented\n");
            style->warnings++;
            XSLT_TODO; /* xsl:number letter-value attribute traditional */
        } else {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                     "xsl:number : invalid value %s for letter-value\n", prop);
            style->warnings++;
        }
@@ -855,8 +836,7 @@ xsltCallTemplateComp(xsltStylesheetPtr style, xmlNodePtr inst) {
      */
     prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE);
     if (prop == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:call-template : name is missing\n");
        style->errors++;
     } else {
@@ -923,8 +903,7 @@ xsltApplyTemplatesComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     if (comp->select != NULL) {
        comp->comp = xmlXPathCompile(comp->select);
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
      "xsl:apply-templates : could not compile select expression '%s'\n",
                             comp->select);
            style->errors++;
@@ -975,16 +954,14 @@ xsltIfComp(xsltStylesheetPtr style, xmlNodePtr inst) {
 
     comp->test = xsltGetNsProp(inst, (const xmlChar *)"test", XSLT_NAMESPACE);
     if (comp->test == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:if : test is not defined\n");
        style->errors++;
        return;
     }
     comp->comp = xmlXPathCompile(comp->test);
     if (comp->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:if : could not compile test expression '%s'\n",
                         comp->test);
        style->errors++;
@@ -1012,16 +989,14 @@ xsltWhenComp(xsltStylesheetPtr style, xmlNodePtr inst) {
 
     comp->test = xsltGetNsProp(inst, (const xmlChar *)"test", XSLT_NAMESPACE);
     if (comp->test == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:when : test is not defined\n");
        style->errors++;
        return;
     }
     comp->comp = xmlXPathCompile(comp->test);
     if (comp->comp == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:when : could not compile test expression '%s'\n",
                         comp->test);
        style->errors++;
@@ -1050,15 +1025,13 @@ xsltForEachComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     comp->select = xsltGetNsProp(inst, (const xmlChar *)"select",
                                XSLT_NAMESPACE);
     if (comp->select == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
                "xsl:for-each : select is missing\n");
        style->errors++;
     } else {
        comp->comp = xmlXPathCompile(comp->select);
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
      "xsl:for-each : could not compile select expression '%s'\n",
                             comp->select);
            style->errors++;
@@ -1092,8 +1065,7 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) {
      */
     prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE);
     if (prop == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:variable : name is missing\n");
        style->errors++;
     } else {
@@ -1119,15 +1091,13 @@ xsltVariableComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     if (comp->select != NULL) {
        comp->comp = xmlXPathCompile(comp->select);
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsl:variable : could not compile select expression '%s'\n",
                             comp->select);
            style->errors++;
        }
        if (inst->children != NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
        "xsl:variable : content should be empty since select is present \n");
            style->warnings++;
        }
@@ -1159,8 +1129,7 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) {
      */
     prop = xsltGetNsProp(inst, (const xmlChar *)"name", XSLT_NAMESPACE);
     if (prop == NULL) {
-       xsltPrintErrorContext(NULL, style, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, inst,
             "xsl:param : name is missing\n");
        style->errors++;
     } else {
@@ -1186,15 +1155,13 @@ xsltParamComp(xsltStylesheetPtr style, xmlNodePtr inst) {
     if (comp->select != NULL) {
        comp->comp = xmlXPathCompile(comp->select);
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsl:param : could not compile select expression '%s'\n",
                             comp->select);
            style->errors++;
        }
        if (inst->children != NULL) {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
        "xsl:param : content should be empty since select is present \n");
            style->warnings++;
        }
@@ -1334,8 +1301,7 @@ xsltStylePreCompute(xsltStylesheetPtr style, xmlNodePtr inst) {
            inst->_private = (void *) xsltDocumentComp(style, inst,
                                (xsltTransformFunction) xsltDocumentElem);
        } else {
-           xsltPrintErrorContext(NULL, style, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, inst,
                 "xsltStylePreCompute: unknown xsl:%s\n", inst->name);
            style->warnings++;
        }
index 8b4422c..31b4068 100644 (file)
@@ -72,8 +72,7 @@ xsltNewSecurityPrefs(void) {
 
     ret = (xsltSecurityPrefsPtr) xmlMalloc(sizeof(xsltSecurityPrefs));
     if (ret == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewSecurityPrefs : malloc failed\n");
        return(NULL);
     }
@@ -290,8 +289,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec,
 
     uri = xmlParseURI((const char *)URL);
     if (uri == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
         "xsltDocumentElem: URL parsing failed for %s\n",
                         URL);
        return(-1);
@@ -307,8 +305,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec,
        if (check != NULL) {
            ret = check(sec, ctxt, uri->path);
            if (ret == 0) {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                             "File write for %s refused\n", URL);
                xmlFreeURI(uri);
                return(0);
@@ -327,8 +324,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec,
                if (check != NULL) {
                    ret = check(sec, ctxt, directory);
                    if (ret == 0) {
-                       xsltPrintErrorContext(ctxt, NULL, NULL);
-                       xsltGenericError(xsltGenericErrorContext,
+                       xsltTransformError(ctxt, NULL, NULL,
                                         "Directory creation for %s refused\n",
                                         URL);
                        xmlFree(directory);
@@ -352,8 +348,7 @@ xsltCheckWrite(xsltSecurityPrefsPtr sec,
        if (check != NULL) {
            ret = check(sec, ctxt, uri->path);
            if (ret == 0) {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                             "File write for %s refused\n", URL);
                xmlFreeURI(uri);
                return(0);
@@ -384,8 +379,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec,
 
     uri = xmlParseURI((const char *)URL);
     if (uri == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
         "xsltCheckRead: URL parsing failed for %s\n",
                         URL);
        return(-1);
@@ -400,8 +394,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec,
        if (check != NULL) {
            ret = check(sec, ctxt, uri->path);
            if (ret == 0) {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                             "Local file read for %s refused\n", URL);
                xmlFreeURI(uri);
                return(0);
@@ -415,8 +408,7 @@ xsltCheckRead(xsltSecurityPrefsPtr sec,
        if (check != NULL) {
            ret = check(sec, ctxt, uri->path);
            if (ret == 0) {
-               xsltPrintErrorContext(ctxt, NULL, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, NULL,
                             "Network file read for %s refused\n", URL);
                xmlFreeURI(uri);
                return(0);
index d4a65e3..ef24e54 100644 (file)
@@ -142,8 +142,7 @@ xsltEvalXPathStringNs(xsltTransformContextPtr ctxt, xmlXPathCompExprPtr comp,
             ret = res->stringval;
            res->stringval = NULL;
        } else {
-           xsltPrintErrorContext(ctxt, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, NULL,
                 "xpath : string() function didn't return a String\n");
        }
        xmlXPathFreeObject(res);
index 07510e2..c92d1c5 100644 (file)
@@ -37,6 +37,10 @@ xmlChar *    xsltEvalStaticAttrValueTemplate (xsltStylesheetPtr style,
 /* TODO: this is obviously broken ... the namespaces should be passed too ! */
 xmlChar *      xsltEvalXPathString             (xsltTransformContextPtr ctxt,
                                                 xmlXPathCompExprPtr comp);
+xmlChar *      xsltEvalXPathStringNs           (xsltTransformContextPtr ctxt,
+                                                xmlXPathCompExprPtr comp,
+                                                int nsNr,
+                                                xmlNsPtr *nsList);
 
 xmlNodePtr *   xsltTemplateProcess             (xsltTransformContextPtr ctxt,
                                                 xmlNodePtr node);
@@ -48,6 +52,9 @@ xmlAttrPtr    xsltAttrTemplateProcess         (xsltTransformContextPtr ctxt,
                                                 xmlAttrPtr attr);
 xmlChar *      xsltAttrTemplateValueProcess    (xsltTransformContextPtr ctxt,
                                                 const xmlChar* attr);
+xmlChar *      xsltAttrTemplateValueProcessNode(xsltTransformContextPtr ctxt,
+                                                const xmlChar* str,
+                                                xmlNodePtr node);
 #ifdef __cplusplus
 }
 #endif
index 1c4cbd0..5ff5944 100644 (file)
@@ -181,8 +181,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) {
 
     cur = (xsltTransformContextPtr) xmlMalloc(sizeof(xsltTransformContext));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, (xmlNodePtr)doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, (xmlNodePtr)doc,
                "xsltNewTransformContext : malloc failed\n");
        return(NULL);
     }
@@ -194,8 +193,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) {
     cur->templTab = (xsltTemplatePtr *)
                xmlMalloc(10 * sizeof(xsltTemplatePtr));
     if (cur->templTab == NULL) {
-       xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, (xmlNodePtr) doc,
                "xsltNewTransformContext: out of memory\n");
        xmlFree(cur);
        return(NULL);
@@ -233,8 +231,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) {
     xmlXPathInit();
     cur->xpathCtxt = xmlXPathNewContext(doc);
     if (cur->xpathCtxt == NULL) {
-       xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, (xmlNodePtr) doc,
                "xsltNewTransformContext : xmlXPathNewContext failed\n");
        xmlFree(cur->templTab);
        xmlFree(cur->varsTab);
@@ -278,8 +275,7 @@ xsltNewTransformContext(xsltStylesheetPtr style, xmlDocPtr doc) {
     cur->xpathCtxt->nsHash = style->nsHash;
     docu = xsltNewDocument(cur, doc);
     if (docu == NULL) {
-       xsltPrintErrorContext(cur, NULL, (xmlNodePtr)doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(cur, NULL, (xmlNodePtr)doc,
                "xsltNewTransformContext : xsltNewDocument failed\n");
        xmlFree(cur->templTab);
        xmlFree(cur->varsTab);
@@ -401,8 +397,7 @@ xsltCopyTextString(xsltTransformContextPtr ctxt, xmlNodePtr target,
        if (target != NULL)
            xmlAddChild(target, copy);
     } else {
-       xsltPrintErrorContext(ctxt, NULL, target);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, target,
                         "xsltCopyTextString: text copy failed\n");
     }
     return(copy);
@@ -470,8 +465,7 @@ xsltCopyText(xsltTransformContextPtr ctxt, xmlNodePtr target,
        if (target != NULL)
            xmlAddChild(target, copy);
     } else {
-       xsltPrintErrorContext(ctxt, NULL, target);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, target,
                         "xsltCopyText: text copy failed\n");
     }
     return(copy);
@@ -588,8 +582,7 @@ xsltCopyNode(xsltTransformContextPtr ctxt, xmlNodePtr node,
            copy->ns = xsltGetNamespace(ctxt, node, node->ns, copy);
        }
     } else {
-       xsltPrintErrorContext(ctxt, NULL, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, node,
                "xsltCopyNode: copy %s failed\n", node->name);
     }
     return(copy);
@@ -707,8 +700,7 @@ xsltCopyTree(xsltTransformContextPtr ctxt, xmlNodePtr node,
        if (node->children != NULL)
            xsltCopyTreeList(ctxt, node->children, copy);
     } else {
-       xsltPrintErrorContext(ctxt, NULL, node);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, node,
                "xsltCopyTree: copy %s failed\n", node->name);
     }
     return(copy);
@@ -813,8 +805,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
            if (copy != NULL) {
                xmlAddChild(ctxt->insert, copy);
            } else {
-               xsltPrintErrorContext(ctxt, NULL, node);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, node,
                 "xsltDefaultProcessOneNode: cdata copy failed\n");
            }
            return;
@@ -832,8 +823,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
            if (copy != NULL) {
                xmlAddChild(ctxt->insert, copy);
            } else {
-               xsltPrintErrorContext(ctxt, NULL, node);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, node,
                 "xsltDefaultProcessOneNode: text copy failed\n");
            }
            return;
@@ -842,8 +832,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
            while ((cur != NULL) && (cur->type != XML_TEXT_NODE))
                cur = cur->next;
            if (cur == NULL) {
-               xsltPrintErrorContext(ctxt, NULL, node);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, node,
                 "xsltDefaultProcessOneNode: no text for attribute\n");
            } else {
 #ifdef WITH_XSLT_DEBUG_PROCESS
@@ -859,8 +848,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
                if (copy != NULL) {
                    xmlAddChild(ctxt->insert, copy);
                } else {
-                   xsltPrintErrorContext(ctxt, NULL, node);
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(ctxt, NULL, node,
                     "xsltDefaultProcessOneNode: text copy failed\n");
                }
            }
@@ -966,8 +954,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
                    if (copy != NULL) {
                        xmlAddChild(ctxt->insert, copy);
                    } else {
-                       xsltPrintErrorContext(ctxt, NULL, cur);
-                       xsltGenericError(xsltGenericErrorContext,
+                       xsltTransformError(ctxt, NULL, cur,
                            "xsltDefaultProcessOneNode: cdata copy failed\n");
                    }
                }
@@ -998,8 +985,7 @@ xsltDefaultProcessOneNode(xsltTransformContextPtr ctxt, xmlNodePtr node) {
                    if (copy != NULL) {
                        xmlAddChild(ctxt->insert, copy);
                    } else {
-                       xsltPrintErrorContext(ctxt, NULL, cur);
-                       xsltGenericError(xsltGenericErrorContext,
+                       xsltTransformError(ctxt, NULL, cur,
                            "xsltDefaultProcessOneNode: text copy failed\n");
                    }
                }
@@ -1172,8 +1158,7 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
     CHECK_STOPPED;
 
     if (ctxt->templNr >= xsltMaxDepth) {
-        xsltPrintErrorContext(ctxt, NULL, list);
-        xsltGenericError(xsltGenericErrorContext,
+        xsltTransformError(ctxt, NULL, list,
                          "xsltApplyOneTemplate: loop found ???\n");
         xsltGenericError(xsltGenericErrorContext,
                          "try increasing xsltMaxDepth (--maxdepth)\n");
@@ -1348,8 +1333,7 @@ xsltApplyOneTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
                 }
 
                 if (!found) {
-                    xsltPrintErrorContext(ctxt, NULL, cur);
-                    xsltGenericError(xsltGenericErrorContext,
+                    xsltTransformError(ctxt, NULL, cur,
                                      "xsltApplyOneTemplate: failed to find extension %s\n",
                                      cur->name);
                 }
@@ -1609,8 +1593,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
     }
 
     if (URL == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                         "xsltDocumentElem: href/URI-Reference not found\n");
        return;
     }
@@ -1630,8 +1613,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
     }
 
     if (filename == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                         "xsltDocumentElem: URL computation failed for %s\n",
                         URL);
        xmlFree(URL);
@@ -1644,8 +1626,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if (ctxt->sec != NULL) {
        ret = xsltCheckWrite(ctxt->sec, ctxt, filename);
        if (ret == 0) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsltDocumentElem: write rights for %s denied\n",
                             filename);
            xmlFree(URL);
@@ -1662,8 +1643,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
 
     style = xsltNewStylesheet();
     if (style == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltDocumentElem: out of memory\n");
         goto error;
     }
@@ -1710,8 +1690,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
                (xmlStrEqual(prop, (const xmlChar *) "text"))) {
                style->method = prop;
            } else {
-               xsltPrintErrorContext(ctxt, NULL, inst);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, inst,
                                 "invalid value for method: %s\n", prop);
                style->warnings++;
            }
@@ -1745,8 +1724,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
        } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
            style->standalone = 0;
        } else {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                             "invalid value for standalone: %s\n",
                             prop);
            style->warnings++;
@@ -1763,8 +1741,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
        } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
            style->indent = 0;
        } else {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                             "invalid value for indent: %s\n", prop);
            style->warnings++;
        }
@@ -1781,8 +1758,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
        } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
            style->omitXmlDeclaration = 0;
        } else {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                             "invalid value for omit-xml-declaration: %s\n",
                             prop);
            style->warnings++;
@@ -1854,8 +1830,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
            if (res == NULL)
                goto error;
        } else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
             "xsltDocumentElem: unsupported method xhtml, using html\n",
                             style->method);
            ctxt->type = XSLT_OUTPUT_HTML;
@@ -1868,8 +1843,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
            if (res == NULL)
                goto error;
        } else {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                             "xsltDocumentElem: unsupported method %s\n",
                             style->method);
            goto error;
@@ -1945,8 +1919,7 @@ xsltDocumentElem(xsltTransformContextPtr ctxt, xmlNodePtr node,
     ret = xsltSaveResultToFilename((const char *) filename,
                                    res, style, 0);
     if (ret < 0) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
                          "xsltDocumentElem: unable to save to %s\n",
                          filename);
        ctxt->state = XSLT_STATE_ERROR;
@@ -1996,13 +1969,11 @@ xsltSort(xsltTransformContextPtr ctxt,
        xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr inst,
        xsltStylePreCompPtr comp) {
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:sort : compilation failed\n");
        return;
     }
-    xsltPrintErrorContext(ctxt, NULL, inst);
-    xsltGenericError(xsltGenericErrorContext,
+    xsltTransformError(ctxt, NULL, inst,
         "xsl:sort : improper use this should not be reached\n");
 }
 
@@ -2162,8 +2133,7 @@ xsltText(xsltTransformContextPtr ctxt, xmlNodePtr node ATTRIBUTE_UNUSED,
        while (text != NULL) {
            if ((text->type != XML_TEXT_NODE) &&
                 (text->type != XML_CDATA_SECTION_NODE)) {
-               xsltPrintErrorContext(ctxt, NULL, inst);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, inst,
                                 "xsl:text content problem\n");
                break;
            }
@@ -2218,8 +2188,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node,
        prop = xsltEvalAttrValueTemplate(ctxt, inst,
                      (const xmlChar *)"name", XSLT_NAMESPACE);
        if (prop == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsl:element : name is missing\n");
            goto error;
        }
@@ -2259,8 +2228,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node,
        }
        oldns = xmlSearchNs(inst->doc, inst, prefix);
        if (oldns == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                "xsl:element : no namespace bound to prefix %s\n", prefix);
        } else {
            ns = xsltGetNamespace(ctxt, inst, ns, ctxt->insert);
@@ -2269,8 +2237,7 @@ xsltElement(xsltTransformContextPtr ctxt, xmlNodePtr node,
 
     copy = xmlNewDocNode(ctxt->output, ns, name, NULL);
     if (copy == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
            "xsl:element : creation of %s failed\n", name);
        goto error;
     }
@@ -2372,8 +2339,7 @@ xsltProcessingInstruction(xsltTransformContextPtr ctxt, xmlNodePtr node,
        ncname = xsltEvalAttrValueTemplate(ctxt, inst,
                            (const xmlChar *)"name", XSLT_NAMESPACE);
        if (ncname == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsl:processing-instruction : name is missing\n");
            goto error;
        }
@@ -2427,8 +2393,7 @@ xsltCopyOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
        return;
     if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:copy-of : compilation failed\n");
        return;
     }
@@ -2529,8 +2494,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
        return;
     if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:value-of : compilation failed\n");
        return;
     }
@@ -2564,8 +2528,7 @@ xsltValueOf(xsltTransformContextPtr ctxt, xmlNodePtr node,
     }
     if (copy == NULL) {
        if ((res == NULL) || (res->stringval != NULL)) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                "xsltValueOf: text copy failed\n");
        }
     }
@@ -2592,8 +2555,7 @@ xsltNumber(xsltTransformContextPtr ctxt, xmlNodePtr node,
           xmlNodePtr inst, xsltStylePreCompPtr comp)
 {
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:number : compilation failed\n");
        return;
     }
@@ -2623,8 +2585,7 @@ xsltApplyImports(xsltTransformContextPtr ctxt, xmlNodePtr node,
     xsltTemplatePtr template;
 
     if ((ctxt->templ == NULL) || (ctxt->templ->style == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:apply-imports : internal error no current template\n");
        return;
     }
@@ -2652,8 +2613,7 @@ xsltCallTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if (ctxt->insert == NULL)
        return;
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:call-template : compilation failed\n");
        return;
     }
@@ -2664,8 +2624,7 @@ xsltCallTemplate(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if (comp->templ == NULL) {
        comp->templ = xsltFindTemplate(ctxt, comp->name, comp->ns);
        if (comp->templ == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsl:call-template : template %s not found\n", comp->name);
            return;
        }
@@ -2741,8 +2700,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
     xmlNsPtr *oldNamespaces;
 
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:apply-templates : compilation failed\n");
        return;
     }
@@ -2779,8 +2737,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
 
     if (comp->select != NULL) {
        if (comp->comp == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsl:apply-templates : compilation failed\n");
            goto error;
        }
@@ -2940,8 +2897,7 @@ xsltApplyTemplates(xsltTransformContextPtr ctxt, xmlNodePtr node,
            ctxt->xpathCtxt->doc=list->nodeTab[i]->doc->doc;
            if ((ctxt->document =
                  xsltFindDocument(ctxt,list->nodeTab[i]->doc->doc))==NULL) { 
-               xsltPrintErrorContext(ctxt, NULL, inst);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, inst,
                        "xsl:apply-templates : can't find doc\n");
                goto error;
            }
@@ -3006,15 +2962,13 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node,
      */
     replacement = inst->children;
     if (replacement == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:choose: empty content not allowed\n");
        goto error;
     }
     if ((!IS_XSLT_ELEM(replacement)) ||
        (!IS_XSLT_NAME(replacement, "when"))) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:choose: xsl:when expected first\n");
        goto error;
     }
@@ -3022,8 +2976,7 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node,
        xsltStylePreCompPtr wcomp = replacement->_private;
 
        if ((wcomp == NULL) || (wcomp->test == NULL) || (wcomp->comp == NULL)) {
-           xsltPrintErrorContext(ctxt, NULL, inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, inst,
                 "xsl:choose: compilation failed !\n");
            goto error;
        }
@@ -3100,8 +3053,7 @@ xsltChoose(xsltTransformContextPtr ctxt, xmlNodePtr node,
        replacement = replacement->next;
     }
     if (replacement != NULL) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:choose: unexpected content %s\n", replacement->name);
        goto error;
     }
@@ -3135,8 +3087,7 @@ xsltIf(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
        return;
     if ((comp == NULL) || (comp->test == NULL) || (comp->comp == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:if : compilation failed\n");
        return;
     }
@@ -3214,8 +3165,7 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr node,
     if ((ctxt == NULL) || (node == NULL) || (inst == NULL))
        return;
     if ((comp == NULL) || (comp->select == NULL) || (comp->comp == NULL)) {
-       xsltPrintErrorContext(ctxt, NULL, inst);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, inst,
             "xsl:for-each : compilation failed\n");
        return;
     }
@@ -3299,8 +3249,7 @@ xsltForEach(xsltTransformContextPtr ctxt, xmlNodePtr node,
            ctxt->xpathCtxt->doc=list->nodeTab[i]->doc->doc;
            if ((ctxt->document =
                  xsltFindDocument(ctxt,list->nodeTab[i]->doc->doc))==NULL) { 
-               xsltPrintErrorContext(ctxt, NULL, inst);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, NULL, inst,
                        "xsl:for-each : can't find doc\n");
                goto error;
            }
@@ -3569,8 +3518,7 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc,
             if (res == NULL)
                 goto error;
         } else if (xmlStrEqual(method, (const xmlChar *) "xhtml")) {
-           xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc);
-            xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
      "xsltApplyStylesheetInternal: unsupported method xhtml, using html\n",
                         style->method);
             ctxt->type = XSLT_OUTPUT_HTML;
@@ -3583,8 +3531,7 @@ xsltApplyStylesheetInternal(xsltStylesheetPtr style, xmlDocPtr doc,
             if (res == NULL)
                 goto error;
         } else {
-           xsltPrintErrorContext(ctxt, NULL, (xmlNodePtr) doc);
-            xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, (xmlNodePtr) doc,
                     "xsltApplyStylesheetInternal: unsupported method %s\n",
                              style->method);
             goto error;
@@ -3843,8 +3790,7 @@ xsltRunStylesheetUser(xsltStylesheetPtr style, xmlDocPtr doc,
     tmp = xsltApplyStylesheetInternal(style, doc, params, output, profile,
                                      userCtxt);
     if (tmp == NULL) {
-       xsltPrintErrorContext(NULL, NULL, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, (xmlNodePtr) doc,
                          "xsltRunStylesheet : run failed\n");
         return (-1);
     }
index 181590f..61f5d3e 100644 (file)
@@ -53,8 +53,7 @@ xsltNewStackElem(void) {
 
     cur = (xsltStackElemPtr) xmlMalloc(sizeof(xsltStackElem));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewStackElem : malloc failed\n");
        return(NULL);
     }
@@ -82,8 +81,7 @@ xsltCopyStackElem(xsltStackElemPtr elem) {
 
     cur = (xsltStackElemPtr) xmlMalloc(sizeof(xsltStackElem));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltCopyStackElem : malloc failed\n");
        return(NULL);
     }
@@ -335,8 +333,7 @@ xsltEvalVariable(xsltTransformContextPtr ctxt, xsltStackElemPtr elem,
        if ((precomp == NULL) || (precomp->comp == NULL))
            xmlXPathFreeCompExpr(comp);
        if (result == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, precomp->inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, precomp->inst,
                "Evaluating variable %s failed\n", elem->name);
            ctxt->state = XSLT_STATE_STOPPED;
 #ifdef WITH_XSLT_DEBUG_VARIABLE
@@ -466,8 +463,7 @@ xsltEvalGlobalVariable(xsltStackElemPtr elem, xsltTransformContextPtr ctxt) {
        if ((precomp == NULL) || (precomp->comp == NULL))
            xmlXPathFreeCompExpr(comp);
        if (result == NULL) {
-           xsltPrintErrorContext(ctxt, NULL, precomp->inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, precomp->inst,
                "Evaluating global variable %s failed\n", elem->name);
            ctxt->state = XSLT_STATE_STOPPED;
 #ifdef WITH_XSLT_DEBUG_VARIABLE
@@ -595,8 +591,7 @@ xsltEvalGlobalVariables(xsltTransformContextPtr ctxt) {
                if ((elem->comp->inst != NULL) &&
                    (def->comp != NULL) && (def->comp->inst != NULL) &&
                    (elem->comp->inst->doc == def->comp->inst->doc)) {
-                   xsltPrintErrorContext(ctxt, style, elem->comp->inst);
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(ctxt, style, elem->comp->inst,
                        "Global variable %s already defined\n", elem->name);
                }
            }
@@ -759,8 +754,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
            ns = xmlSearchNs(style->doc, xmlDocGetRootElement(style->doc),
                             prefix);
            if (ns == NULL) {
-               xsltPrintErrorContext(ctxt, style, NULL);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(ctxt, style, NULL,
                "user param : no namespace bound to prefix %s\n", prefix);
                href = NULL;
            } else {
@@ -810,8 +804,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
            xmlXPathFreeCompExpr(comp);
        }
        if (result == NULL) {
-           xsltPrintErrorContext(ctxt, style, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, style, NULL,
                "Evaluating user parameter %s failed\n", name);
            ctxt->state = XSLT_STATE_STOPPED;
            xmlFree(ncname);
@@ -865,8 +858,7 @@ xsltProcessUserParamInternal(xsltTransformContextPtr ctxt,
     res = xmlHashAddEntry2(ctxt->globalVars, ncname, href, elem);
     if (res != 0) {
        xsltFreeStackElem(elem);
-       xsltPrintErrorContext(ctxt, style, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, style, NULL,
            "Global parameter %s already defined\n", ncname);
     }
     xmlFree(ncname);
@@ -1046,8 +1038,7 @@ xsltRegisterVariable(xsltTransformContextPtr ctxt, xsltStylePreCompPtr comp,
 
     if (xsltCheckStackElem(ctxt, comp->name, comp->ns) != 0) {
        if (!param) {
-           xsltPrintErrorContext(ctxt, NULL, comp->inst);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(ctxt, NULL, comp->inst,
            "xsl:variable : redefining %s\n", comp->name);
        }
 #ifdef WITH_XSLT_DEBUG_VARIABLE
@@ -1161,15 +1152,13 @@ xsltParseStylesheetCallerParam(xsltTransformContextPtr ctxt, xmlNodePtr cur) {
        return(NULL);
     comp = (xsltStylePreCompPtr) cur->_private;
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
            "xsl:param : compilation error\n");
        return(NULL);
     }
 
     if (comp->name == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
            "xsl:param : missing name attribute\n");
        return(NULL);
     }
@@ -1213,15 +1202,13 @@ xsltParseGlobalVariable(xsltStylesheetPtr style, xmlNodePtr cur) {
     xsltStylePreCompute(style, cur);
     comp = (xsltStylePreCompPtr) cur->_private;
     if (comp == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
             "xsl:variable : compilation failed\n");
        return;
     }
 
     if (comp->name == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:variable : missing name attribute\n");
        return;
     }
@@ -1254,15 +1241,13 @@ xsltParseGlobalParam(xsltStylesheetPtr style, xmlNodePtr cur) {
     xsltStylePreCompute(style, cur);
     comp = (xsltStylePreCompPtr) cur->_private;
     if (comp == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
             "xsl:param : compilation failed\n");
        return;
     }
 
     if (comp->name == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsl:param : missing name attribute\n");
        return;
     }
@@ -1294,15 +1279,13 @@ xsltParseStylesheetVariable(xsltTransformContextPtr ctxt, xmlNodePtr cur) {
 
     comp = (xsltStylePreCompPtr) cur->_private;
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
             "xsl:variable : compilation failed\n");
        return;
     }
 
     if (comp->name == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
            "xsl:variable : missing name attribute\n");
        return;
     }
@@ -1333,15 +1316,13 @@ xsltParseStylesheetParam(xsltTransformContextPtr ctxt, xmlNodePtr cur) {
 
     comp = (xsltStylePreCompPtr) cur->_private;
     if (comp == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
             "xsl:param : compilation failed\n");
        return;
     }
 
     if (comp->name == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, cur,
            "xsl:param : missing name attribute\n");
        return;
     }
@@ -1394,8 +1375,7 @@ xsltXPathVariableLookup(void *ctxt, const xmlChar *name,
     context = (xsltTransformContextPtr) ctxt;
     ret = xsltVariableLookup(context, name, ns_uri);
     if (ret == NULL) {
-       xsltPrintErrorContext(ctxt, NULL, NULL);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(ctxt, NULL, NULL,
            "unregistered variable %s\n", name);
     }
 #ifdef WITH_XSLT_DEBUG_VARIABLE
index 0411b33..a296c94 100644 (file)
@@ -272,8 +272,7 @@ xsltNewTemplate(void) {
 
     cur = (xsltTemplatePtr) xmlMalloc(sizeof(xsltTemplate));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewTemplate : malloc failed\n");
        return(NULL);
     }
@@ -332,8 +331,7 @@ xsltNewStylesheet(void) {
 
     cur = (xsltStylesheetPtr) xmlMalloc(sizeof(xsltStylesheet));
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltNewStylesheet : malloc failed\n");
        return(NULL);
     }
@@ -645,8 +643,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur)
                 (xmlStrEqual(prop, (const xmlChar *) "text"))) {
                 style->method = prop;
             } else {
-               xsltPrintErrorContext(NULL, style, cur);
-                xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, style, cur,
                                  "invalid value for method: %s\n", prop);
                 style->warnings++;
             }
@@ -682,8 +679,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur)
         } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
             style->standalone = 0;
         } else {
-           xsltPrintErrorContext(NULL, style, cur);
-            xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                              "invalid value for standalone: %s\n", prop);
             style->warnings++;
         }
@@ -697,8 +693,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur)
         } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
             style->indent = 0;
         } else {
-           xsltPrintErrorContext(NULL, style, cur);
-            xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                              "invalid value for indent: %s\n", prop);
             style->warnings++;
         }
@@ -713,8 +708,7 @@ xsltParseStylesheetOutput(xsltStylesheetPtr style, xmlNodePtr cur)
         } else if (xmlStrEqual(prop, (const xmlChar *) "no")) {
             style->omitXmlDeclaration = 0;
         } else {
-           xsltPrintErrorContext(NULL, style, cur);
-            xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                              "invalid value for omit-xml-declaration: %s\n",
                              prop);
             style->warnings++;
@@ -795,16 +789,14 @@ xsltParseStylesheetDecimalFormat(xsltStylesheetPtr style, xmlNodePtr cur)
     if (prop != NULL) {
        format = xsltDecimalFormatGetByName(style, prop);
        if (format != NULL) {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
         "xsltParseStylestyleDecimalFormat: %s already exists\n", prop);
            style->warnings++;
            return;
        }
        format = xsltNewDecimalFormat(prop);
        if (format == NULL) {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
      "xsltParseStylestyleDecimalFormat: failed creating new decimal-format\n");
            style->errors++;
            return;
@@ -899,8 +891,7 @@ xsltParseStylesheetPreserveSpace(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     elements = xsltGetNsProp(cur, (const xmlChar *)"elements", XSLT_NAMESPACE);
     if (elements == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsltParseStylesheetPreserveSpace: missing elements attribute\n");
        style->warnings++;
        return;
@@ -980,8 +971,7 @@ xsltParseStylesheetExtPrefix(xsltStylesheetPtr style, xmlNodePtr cur) {
            else
                ns = xmlSearchNs(style->doc, cur, prefix);
            if (ns == NULL) {
-               xsltPrintErrorContext(NULL, style, cur);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, style, cur,
            "xsl:extension-element-prefix : undefined namespace %s\n",
                                 prefix);
                style->warnings++;
@@ -1018,8 +1008,7 @@ xsltParseStylesheetStripSpace(xsltStylesheetPtr style, xmlNodePtr cur) {
 
     elements = xsltGetNsProp(cur, (const xmlChar *)"elements", XSLT_NAMESPACE);
     if (elements == NULL) {
-       xsltPrintErrorContext(NULL, style, cur);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, cur,
            "xsltParseStylesheetStripSpace: missing elements attribute\n");
        style->warnings++;
        return;
@@ -1102,8 +1091,7 @@ xsltParseStylesheetExcludePrefix(xsltStylesheetPtr style, xmlNodePtr cur) {
            else
                ns = xmlSearchNs(style->doc, cur, prefix);
            if (ns == NULL) {
-               xsltPrintErrorContext(NULL, style, cur);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, style, cur,
            "xsl:exclude-result-prefixes : undefined namespace %s\n",
                                 prefix);
                style->warnings++;
@@ -1296,8 +1284,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) {
                    if (style->nsHash == NULL) {
                        style->nsHash = xmlHashCreate(10);
                        if (style->nsHash == NULL) {
-                           xsltPrintErrorContext(NULL, style, cur);
-                           xsltGenericError(xsltGenericErrorContext,
+                           xsltTransformError(NULL, style, cur,
                 "xsltGatherNamespaces: failed to create hash table\n");
                            style->errors++;
                            return;
@@ -1305,8 +1292,7 @@ xsltGatherNamespaces(xsltStylesheetPtr style) {
                    }
                    URI = xmlHashLookup(style->nsHash, ns->prefix);
                    if ((URI != NULL) && (!xmlStrEqual(URI, ns->href))) {
-                       xsltPrintErrorContext(NULL, style, cur);
-                       xsltGenericError(xsltGenericErrorContext,
+                       xsltTransformError(NULL, style, cur,
             "Namespaces prefix %s used for multiple namespaces\n");
                        style->warnings++;
                    } else if (URI == NULL) {
@@ -1402,8 +1388,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) {
                            noesc = 1;
                        } else if (!xmlStrEqual(prop,
                                                (const xmlChar *)"no")){
-                           xsltPrintErrorContext(NULL, style, cur);
-                           xsltGenericError(xsltGenericErrorContext,
+                           xsltTransformError(NULL, style, cur,
             "xsl:text: disable-output-escaping allows only yes or no\n");
                            style->warnings++;
 
@@ -1414,8 +1399,7 @@ xsltParseTemplateContent(xsltStylesheetPtr style, xmlNodePtr templ) {
                    while (text != NULL) {
                        if ((text->type != XML_TEXT_NODE) &&
                             (text->type != XML_CDATA_SECTION_NODE)) {
-                           xsltPrintErrorContext(NULL, style, cur);
-                           xsltGenericError(xsltGenericErrorContext,
+                           xsltTransformError(NULL, style, cur,
                 "xsltParseTemplateContent: xslt:text content problem\n");
                            style->errors++;
                            break;
@@ -1507,8 +1491,7 @@ skip_children:
            xmlNodePtr param = cur;
 
             cur = cur->next;
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                "xsltParseTemplateContent: ignoring misplaced param element\n");
            style->warnings++;
            xmlUnlinkNode(param);
@@ -1560,8 +1543,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) {
             "xsltParseStylesheetKey: name %s\n", name);
 #endif
     } else {
-       xsltPrintErrorContext(NULL, style, key);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, key,
            "xsl:key : error missing name\n");
        style->errors++;
        goto error;
@@ -1569,8 +1551,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) {
 
     match = xsltGetNsProp(key, (const xmlChar *)"match", XSLT_NAMESPACE);
     if (match == NULL) {
-       xsltPrintErrorContext(NULL, style, key);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, key,
            "xsl:key : error missing match\n");
        style->errors++;
        goto error;
@@ -1578,8 +1559,7 @@ xsltParseStylesheetKey(xsltStylesheetPtr style, xmlNodePtr key) {
 
     use = xsltGetNsProp(key, (const xmlChar *)"use", XSLT_NAMESPACE);
     if (use == NULL) {
-       xsltPrintErrorContext(NULL, style, key);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, key,
            "xsl:key : error missing use\n");
        style->errors++;
        goto error;
@@ -1737,15 +1717,13 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
 
     prop = xsltGetNsProp(top, (const xmlChar *)"version", XSLT_NAMESPACE);
     if (prop == NULL) {
-       xsltPrintErrorContext(NULL, style, top);
-       xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, style, top,
            "xsl:version is missing: document may not be a stylesheet\n");
        style->warnings++;
     } else {
        if ((!xmlStrEqual(prop, (const xmlChar *)"1.0")) &&
             (!xmlStrEqual(prop, (const xmlChar *)"1.1"))) {
-           xsltPrintErrorContext(NULL, style, top);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, top,
                "xsl:version: only 1.0 features are supported\n");
             /* TODO set up compatibility when not XSLT 1.0 */
            style->warnings++;
@@ -1783,8 +1761,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
        }
        if (cur->type == XML_TEXT_NODE) {
            if (cur->content != NULL) {
-               xsltPrintErrorContext(NULL, style, cur);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, style, cur,
                    "misplaced text element: '%s'\n", cur->content);
            }
            style->errors++;
@@ -1816,8 +1793,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
            continue;
        }
        if (IS_XSLT_NAME(cur, "import")) {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                        "xsltParseStylesheetTop: ignoring misplaced import element\n");
            style->errors++;
     } else if (IS_XSLT_NAME(cur, "include")) {
@@ -1847,8 +1823,7 @@ xsltParseStylesheetTop(xsltStylesheetPtr style, xmlNodePtr top) {
     } else if (IS_XSLT_NAME(cur, "namespace-alias")) {
            xsltNamespaceAlias(style, cur);
        } else {
-           xsltPrintErrorContext(NULL, style, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, style, cur,
                        "xsltParseStylesheetTop: ignoring unknown %s element\n",
                        cur->name);
            style->warnings++;
@@ -1888,8 +1863,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) {
      */
     cur = xmlDocGetRootElement(doc);
     if (cur == NULL) {
-       xsltPrintErrorContext(NULL, ret, (xmlNodePtr) doc);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, ret, (xmlNodePtr) doc,
                "xsltParseStylesheetProcess : empty stylesheet\n");
        return(NULL);
     }
@@ -1914,8 +1888,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) {
         */
        prop = xsltGetNsProp(cur, (const xmlChar *)"version", XSLT_NAMESPACE);
        if (prop == NULL) {
-           xsltPrintErrorContext(NULL, ret, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, ret, cur,
                "xsltParseStylesheetProcess : document is not a stylesheet\n");
            return(NULL);
        }
@@ -1926,8 +1899,7 @@ xsltParseStylesheetProcess(xsltStylesheetPtr ret, xmlDocPtr doc) {
 #endif
        
        if (!xmlStrEqual(prop, (const xmlChar *)"1.0")) {
-           xsltPrintErrorContext(NULL, ret, cur);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, ret, cur,
                "xsl:version: only 1.0 features are supported\n");
             /* TODO set up compatibility when not XSLT 1.0 */
            ret->warnings++;
@@ -2022,8 +1994,7 @@ xsltParseStylesheetFile(const xmlChar* filename) {
 
        res = xsltCheckRead(sec, NULL, filename);
        if (res == 0) {
-           xsltPrintErrorContext(NULL, NULL, NULL);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, NULL,
                 "xsltParseStylesheetFile: read rights for %s denied\n",
                             filename);
            return(NULL);
@@ -2032,8 +2003,7 @@ xsltParseStylesheetFile(const xmlChar* filename) {
 
     doc = xmlParseFile((const char *) filename);
     if (doc == NULL) {
-       xsltPrintErrorContext(NULL, NULL, NULL);
-        xsltGenericError(xsltGenericErrorContext,
+       xsltTransformError(NULL, NULL, NULL,
                "xsltParseStylesheetFile : cannot parse %s\n", filename);
        return(NULL);
     }
@@ -2193,8 +2163,7 @@ xsltLoadStylesheetPI(xmlDocPtr doc) {
 #endif
        URI = xmlParseURI((const char *) href);
        if (URI == NULL) {
-           xsltPrintErrorContext(NULL, NULL, child);
-           xsltGenericError(xsltGenericErrorContext,
+           xsltTransformError(NULL, NULL, child,
                    "xml-stylesheet : href %s is not valid\n", href);
            xmlFree(href);
            return(NULL);
@@ -2214,8 +2183,7 @@ xsltLoadStylesheetPI(xmlDocPtr doc) {
            else
                ID = xmlGetID(doc, (const xmlChar *) URI->fragment);
            if (ID == NULL) {
-               xsltPrintErrorContext(NULL, NULL, child);
-               xsltGenericError(xsltGenericErrorContext,
+               xsltTransformError(NULL, NULL, child,
                    "xml-stylesheet : no ID %s found\n", URI->fragment);
            } else {
                xmlDocPtr fake;
index 54af872..2b0c89d 100644 (file)
@@ -456,6 +456,9 @@ struct _xsltTransformContext {
 
     xsltDocumentPtr  styleList;                /* the stylesheet docs list */
     void                 * sec;                /* the security preferences if any */
+
+    xmlGenericErrorFunc  error;                /* a specific error handler */
+    void              * errctx;                /* context for the error handler */
 };
 
 /**
index d694780..7732d39 100644 (file)
@@ -185,6 +185,35 @@ xsltMessage(xsltTransformContextPtr ctxt, xmlNodePtr node, xmlNodePtr inst) {
  *                                                                     *
  ************************************************************************/
 
+#define XSLT_GET_VAR_STR(msg, str) {                           \
+    int       size;                                            \
+    int       chars;                                           \
+    char      *larger;                                         \
+    va_list   ap;                                              \
+                                                               \
+    str = (char *) xmlMalloc(150);                             \
+    if (str == NULL)                                           \
+       return;                                                 \
+                                                               \
+    size = 150;                                                        \
+                                                               \
+    while (1) {                                                        \
+       va_start(ap, msg);                                      \
+       chars = vsnprintf(str, size, msg, ap);                  \
+       va_end(ap);                                             \
+       if ((chars > -1) && (chars < size))                     \
+           break;                                              \
+       if (chars > -1)                                         \
+           size += chars + 1;                                  \
+       else                                                    \
+           size += 100;                                        \
+       if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
+           xmlFree(str);                                       \
+           return;                                             \
+       }                                                       \
+       str = larger;                                           \
+    }                                                          \
+}
 /**
  * xsltGenericErrorDefaultFunc:
  * @ctx:  an error context
@@ -292,9 +321,16 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt,
     const xmlChar *file = NULL;
     const xmlChar *name = NULL;
     const char *type = "error";
+    xmlGenericErrorFunc error = xsltGenericError;
+    void *errctx = xsltGenericErrorContext;
 
-    if (ctxt != NULL)
+    if (ctxt != NULL) {
        ctxt->state = XSLT_STATE_ERROR;
+       if (ctxt->error != NULL) {
+           error = ctxt->error;
+           errctx = ctxt->errctx;
+       }
+    }
     if ((node == NULL) && (ctxt != NULL))
        node = ctxt->inst;
 
@@ -330,29 +366,72 @@ xsltPrintErrorContext(xsltTransformContextPtr ctxt,
        type = "compilation error";
 
     if ((file != NULL) && (line != 0) && (name != NULL))
-       xsltGenericError(xsltGenericErrorContext,
-               "%s: file %s line %d element %s\n",
-               type, file, line, name);
+       error(errctx, "%s: file %s line %d element %s\n",
+             type, file, line, name);
     else if ((file != NULL) && (name != NULL))
-       xsltGenericError(xsltGenericErrorContext,
-               "%s: file %s element %s\n",
-               type, file, name);
+       error(errctx, "%s: file %s element %s\n", type, file, name);
     else if ((file != NULL) && (line != 0))
-       xsltGenericError(xsltGenericErrorContext,
-               "%s: file %s line %d\n",
-               type, file, line);
+       error(errctx, "%s: file %s line %d\n", type, file, line);
     else if (file != NULL)
-       xsltGenericError(xsltGenericErrorContext,
-               "%s: file %s\n",
-               type, file);
+       error(errctx, "%s: file %s\n", type, file);
     else if (name != NULL)
-       xsltGenericError(xsltGenericErrorContext,
-               "%s: element %s\n",
-               type, name);
+       error(errctx, "%s: element %s\n", type, name);
     else
-       xsltGenericError(xsltGenericErrorContext,
-               "%s\n",
-               type);
+       error(errctx, "%s\n", type);
+}
+
+/**
+ * xsltSetTransformErrorFunc:
+ * @ctxt:  the XSLT transformation context
+ * @ctx:  the new error handling context
+ * @handler:  the new handler function
+ *
+ * Function to reset the handler and the error context for out of
+ * context error messages specific to a given XSLT transromation.
+ *
+ * This simply means that @handler will be called for subsequent
+ * error messages while running the transformation.
+ */
+void
+xsltSetTransformErrorFunc(xsltTransformContextPtr ctxt,
+                          void *ctx, xmlGenericErrorFunc handler)
+{
+    ctxt->error = handler;
+    ctxt->errctx = ctx;
+}
+
+/**
+ * xsltTransformError:
+ * @ctxt:  an XSLT transformation context
+ * @msg:  the message to display/transmit
+ * @...:  extra parameters for the message display
+ *
+ * Display and format an error messages, gives file, line, position and
+ * extra parameters, will use the specific transformation context if available
+ */
+void
+xsltTransformError(xsltTransformContextPtr ctxt,
+                  xsltStylesheetPtr style,
+                  xmlNodePtr node,
+                  const char *msg, ...) {
+    xmlGenericErrorFunc error = xsltGenericError;
+    void *errctx = xsltGenericErrorContext;
+    char * str;
+
+    if (ctxt != NULL) {
+       ctxt->state = XSLT_STATE_ERROR;
+       if (ctxt->error != NULL) {
+           error = ctxt->error;
+           errctx = ctxt->errctx;
+       }
+    }
+    if ((node == NULL) && (ctxt != NULL))
+       node = ctxt->inst;
+    xsltPrintErrorContext(ctxt, style, node);
+    XSLT_GET_VAR_STR(msg, str);
+    error(errctx, "%s", str);
+    if (str != NULL)
+       xmlFree(str);
 }
 
 /************************************************************************
@@ -635,8 +714,7 @@ xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                else if (xmlStrEqual(comp->stype, (const xmlChar *) "number"))
                    comp->number = 1;
                else {
-                   xsltPrintErrorContext(ctxt, NULL, sorts[j]);
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(ctxt, NULL, sorts[j],
                          "xsltDoSortFunction: no support for data-type = %s\n",
                                     comp->stype);
                    comp->number = 0; /* use default */
@@ -656,8 +734,7 @@ xsltDoSortFunction(xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
                                     (const xmlChar *) "descending"))
                    comp->descending = 1;
                else {
-                   xsltPrintErrorContext(ctxt, NULL, sorts[j]);
-                   xsltGenericError(xsltGenericErrorContext,
+                   xsltTransformError(ctxt, NULL, sorts[j],
                             "xsltDoSortFunction: invalid value %s for order\n",
                                     comp->order);
                    comp->descending = 0; /* use default */
index f6fda10..d2cebb3 100644 (file)
@@ -109,6 +109,14 @@ void               xsltSetGenericErrorFunc         (void *ctx,
                                                 xmlGenericErrorFunc handler);
 void           xsltSetGenericDebugFunc         (void *ctx,
                                                 xmlGenericErrorFunc handler);
+void           xsltSetTransformErrorFunc       (xsltTransformContextPtr ctxt,
+                                                void *ctx,
+                                                xmlGenericErrorFunc handler);
+void           xsltTransformError              (xsltTransformContextPtr ctxt,
+                                                xsltStylesheetPtr style,
+                                                xmlNodePtr node,
+                                                const char *msg,
+                                                ...);
 
 /*
  * Sorting.