From a7805e078630acad17b92b12c21d09f838482ba6 Mon Sep 17 00:00:00 2001 From: David Lichteblau Date: Sat, 26 Apr 2008 22:09:41 +0200 Subject: [PATCH] Dubious namespace alias workarounds: Sometimes the tests want excluded namespace URIs in the output. All cases of this issue that I can find involve the target URIs of namespace aliases. XSLT 1.0 is silent about this, XSLT 2.0 more explicit (but they rename prefixes, so their behaviour doesn't match the test suite either). We need to fix this, because the usual case of stylesheet-generating stylesheets is affected by it. This kludge can't really be the answer though, and actually breaks one other test case. Sigh. I'm still checking it in because it improves our overall test score. --- TEST | 30 +++++++++++++++--------------- instructions.lisp | 35 ++++++++++++++++++++++++++++++++--- xslt.lisp | 5 ++++- 3 files changed, 51 insertions(+), 19 deletions(-) diff --git a/TEST b/TEST index 1f08362..26840ca 100644 --- a/TEST +++ b/TEST @@ -11325,7 +11325,7 @@ WARNING: Context: Line 2, column 153 in NIL -PASS BVTs_bvt058 [Mixed] +FAIL BVTs_bvt058 [Mixed]: output doesn't match Stylesheet: MSFT_Conformance_Tests/BVTs/nsalias.noindent-xsl Data: MSFT_Conformance_Tests/BVTs/data.xml Expected output (1): MSFT_Conformance_Tests/BVTs/BVTs_bvt058.saxon @@ -14979,13 +14979,13 @@ PASS Namespace-alias__91786 [XSLT-Structure] Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91786.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91786.xuriella -FAIL Namespace-alias__91788 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91788 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91788.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91788.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91788.xuriella -FAIL Namespace-alias__91789 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91789 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91789.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91789.saxon @@ -15003,61 +15003,61 @@ PASS Namespace-alias__91791 [XSLT-Structure]: raised an xslt-error as expected Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91791.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91791.xuriella -FAIL Namespace-alias__91792 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91792 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91792.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91792.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91792.xuriella -FAIL Namespace-alias__91793 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91793 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91793.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91793.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91793.xuriella -FAIL Namespace-alias__91794 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91794 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91794.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91794.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91794.xuriella -FAIL Namespace-alias__91795 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91795 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91795.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91795.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91795.xuriella -FAIL Namespace-alias__91796 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91796 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91796.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91796.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91796.xuriella -FAIL Namespace-alias__91797 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91797 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91797.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91797.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91797.xuriella -FAIL Namespace-alias__91798 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91798 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91798.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91798.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91798.xuriella -FAIL Namespace-alias__91799 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91799 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91799.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91799.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91799.xuriella -FAIL Namespace-alias__91800 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91800 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91800.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91800.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91800.xuriella -FAIL Namespace-alias__91801 [XSLT-Structure]: output doesn't match +PASS Namespace-alias__91801 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/91801.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/nsalias.xml Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias__91801.saxon @@ -15093,7 +15093,7 @@ PASS Namespace-alias_Namespace-Alias_WithinRTF [XSLT-Structure] Expected output (1): MSFT_Conformance_Tests/Namespace-alias/Namespace-alias_Namespace-Alias_WithinRTF.saxon Actual output: MSFT_Conformance_Tests/Namespace-alias/Namespace-alias_Namespace-Alias_WithinRTF.xuriella -FAIL Namespace-alias_NSAlias_In_Import [XSLT-Structure]: output doesn't match +PASS Namespace-alias_NSAlias_In_Import [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Namespace-alias/xslt_test_ns_alias_in_import.noindent-xsl Data: MSFT_Conformance_Tests/Namespace-alias/foo.xml Supplemental stylesheet: MSFT_Conformance_Tests/Namespace-alias/xslt_test_ns_alias_in_import.inc @@ -19291,4 +19291,4 @@ PASS XSLTFunctions_DocumentFuncWithEmptyArg [Mixed] Expected output (1): MSFT_Conformance_Tests/XSLTFunctions/XSLTFunctions_DocumentFuncWithEmptyArg.saxon Actual output: MSFT_Conformance_Tests/XSLTFunctions/XSLTFunctions_DocumentFuncWithEmptyArg.xuriella -Passed 2947/3070 tests (4 expected failures, 119 unexpected failures). +Passed 2959/3070 tests (4 expected failures, 107 unexpected failures). diff --git a/instructions.lisp b/instructions.lisp index c82ca23..a41d2e8 100644 --- a/instructions.lisp +++ b/instructions.lisp @@ -206,8 +206,12 @@ ;; zzz Also elides (later) namespaces hidden by (earlier) ones. ;; zzz Reverses order. +;; +;; zzz fix the huge kludge that included-after-all-for-weird-reason-uris is +;; (defun remove-excluded-namespaces - (namespaces &optional (excluded-uris *excluded-namespaces*)) + (namespaces &optional (excluded-uris *excluded-namespaces*) + included-after-all-for-weird-reason-uris) (let ((koerbchen '()) (kroepfchen '())) (loop @@ -218,18 +222,43 @@ (cond ((find prefix kroepfchen :test #'equal)) ((find prefix koerbchen :test #'equal :key #'car)) - ((find uri excluded-uris :test #'equal) + ((and (find uri excluded-uris :test #'equal) + (not (find uri included-after-all-for-weird-reason-uris + :test #'equal))) (push prefix kroepfchen)) (t (push cons koerbchen)))) koerbchen)) +;; FIXME! +(defun collect-literal-attribute-namespaces-KLUDGE (body) + (loop + for frob in body + when (and (consp frob) (eq (car frob) 'xsl:literal-attribute)) + collect (second (second frob)))) + +;; FIXME! +(defun not-actually-excluded-namespaces-KLUDGE (element-uri body) + (mapcan (lambda (uri) + (multiple-value-bind (unaliased-uri matchp) + (gethash uri (stylesheet-namespace-aliases *stylesheet*)) + (if matchp + (list unaliased-uri) + nil))) + (cons element-uri + (remove-if + (lambda (x) (zerop (length x))) + (collect-literal-attribute-namespaces-KLUDGE body))))) + (define-instruction xsl:literal-element (args env) (destructuring-bind ((local-name &optional (uri "") suggested-prefix) &body body) args (let ((body-thunk (compile-instruction `(progn ,@body) env)) - (namespaces (remove-excluded-namespaces *namespaces*))) + (namespaces (remove-excluded-namespaces + *namespaces* + *excluded-namespaces* + (not-actually-excluded-namespaces-KLUDGE uri body)))) (lambda (ctx) (with-element (local-name (or uri "") :suggested-prefix suggested-prefix diff --git a/xslt.lisp b/xslt.lisp index ea48864..f6f49e1 100644 --- a/xslt.lisp +++ b/xslt.lisp @@ -662,6 +662,7 @@ (let ((import-priority (incf *import-priority*)) (var-cont (prepare-global-variables stylesheet ))) + (parse-namespace-aliases! stylesheet env) ;; delay the rest of compilation until we've seen all global ;; variables: (lambda () @@ -674,7 +675,6 @@ (parse-output! stylesheet env) (parse-strip/preserve-space! stylesheet env) (parse-attribute-sets! stylesheet env) - (parse-namespace-aliases! stylesheet env) (parse-decimal-formats! stylesheet env)))))))) (defvar *xsl-import-stack* nil) @@ -711,6 +711,9 @@ (xpath:*allow-variables-in-patterns* nil) (puri:*strict-parse* nil) (stylesheet (make-stylesheet)) + (*stylesheet* + ;; zzz this is for remove-excluded-namespaces only + stylesheet) (env (make-instance 'lexical-xslt-environment)) (*excluded-namespaces* *excluded-namespaces*) (*global-variable-declarations* (make-empty-declaration-array)) -- 2.11.4.GIT