From 4f96d6e49fb1a630a5394014933c359db57c5a2f Mon Sep 17 00:00:00 2001 From: David Lichteblau Date: Sun, 27 Apr 2008 13:41:22 +0200 Subject: [PATCH] xsl:extension-element-prefixes also applies to the element itself --- TEST | 34 ++++++++++++------------- parser.lisp | 84 +++++++++++++++++++++++++++++++++---------------------------- test.lisp | 2 ++ 3 files changed, 64 insertions(+), 56 deletions(-) diff --git a/TEST b/TEST index 259e16e..c7154de 100644 --- a/TEST +++ b/TEST @@ -16988,7 +16988,7 @@ WARNING: Context: Line 1, column 5 in file://+...MSFT_Conformance_Tests/REF_OUT/Sorting/77977.txt -FAIL Sorting__77977 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__77977 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/xslt18304.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/multilingualsort.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__77977.saxon @@ -17282,67 +17282,67 @@ PASS Sorting__89763 [XSLT-Data-Manipulation] Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__89763.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__89763.xuriella -FAIL Sorting__91689 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91689 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91689.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91689.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91689.xuriella -FAIL Sorting__91691 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91691 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91691.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91691.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91691.xuriella -FAIL Sorting__91693 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91693 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91693.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91693.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91693.xuriella -FAIL Sorting__91694 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91694 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91694.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91694.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91694.xuriella -FAIL Sorting__91695 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91695 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91695.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91695.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91695.xuriella -FAIL Sorting__91696 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91696 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91696.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91696.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91696.xuriella -FAIL Sorting__91697 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91697 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91697.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91697.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91697.xuriella -FAIL Sorting__91698 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91698 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91698.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91698.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91698.xuriella -FAIL Sorting__91699 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91699 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91699.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91699.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91699.xuriella -FAIL Sorting__91700 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91700 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91700.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91700.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91700.xuriella -FAIL Sorting__91701 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91701 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91701.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91701.saxon @@ -17372,13 +17372,13 @@ PASS Sorting__91751 [XSLT-Data-Manipulation]: raised an xslt-error as expected Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91751.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91751.xuriella -FAIL Sorting__91752 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91752 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91752.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91752.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting__91752.xuriella -FAIL Sorting__91753 [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting__91753 [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/91753.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/sortlang.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting__91753.saxon @@ -17523,7 +17523,7 @@ PASS Sorting_SortExprWithCurrentInApplyTemplates [XSLT-Data-Manipulation] Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting_SortExprWithCurrentInApplyTemplates.saxon Actual output: MSFT_Conformance_Tests/Sorting/Sorting_SortExprWithCurrentInApplyTemplates.xuriella -FAIL Sorting_TurkishISortingTest [XSLT-Data-Manipulation]: output doesn't match +KNOWNFAIL Sorting_TurkishISortingTest [XSLT-Data-Manipulation]: output doesn't match Stylesheet: MSFT_Conformance_Tests/Sorting/turkish.noindent-xsl Data: MSFT_Conformance_Tests/Sorting/turkish.xml Expected output (1): MSFT_Conformance_Tests/Sorting/Sorting_TurkishISortingTest.saxon @@ -17541,7 +17541,7 @@ PASS Stylesheet__91803 [XSLT-Structure] Expected output (1): MSFT_Conformance_Tests/Stylesheet/Stylesheet__91803.saxon Actual output: MSFT_Conformance_Tests/Stylesheet/Stylesheet__91803.xuriella -FAIL Stylesheet__91804 [XSLT-Structure]: output doesn't match +PASS Stylesheet__91804 [XSLT-Structure] Stylesheet: MSFT_Conformance_Tests/Stylesheet/91804.noindent-xsl Data: MSFT_Conformance_Tests/Stylesheet/books.xml Expected output (1): MSFT_Conformance_Tests/Stylesheet/Stylesheet__91804.saxon @@ -19294,4 +19294,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 2979/3070 tests (11 expected failures, 80 unexpected failures). +Passed 2980/3070 tests (26 expected failures, 64 unexpected failures). diff --git a/parser.lisp b/parser.lisp index 1076be4..c04184a 100644 --- a/parser.lisp +++ b/parser.lisp @@ -128,35 +128,7 @@ `(xsl:text ,(stp:data node))))) (defun parse-instruction/literal-element (node) - (let ((le - `(xsl:literal-element - (,(stp:local-name node) - ,(stp:namespace-uri node) - ,(stp:namespace-prefix node)) - (xsl:use-attribute-sets - ,(stp:attribute-value node "use-attribute-sets" *xsl*)) - ,@(loop - for a in (stp:list-attributes node) - for xslp = (equal (stp:namespace-uri a) *xsl*) - when xslp - do (unless (find (stp:local-name a) - '("version" - "extension-element-prefixes" - "exclude-result-prefixes" - "use-attribute-sets") - :test #'equal) - (xslt-error - "unknown attribute on literal result element: ~A" - (stp:local-name a))) - else - collect `(xsl:literal-attribute - (,(stp:local-name a) - ,(stp:namespace-uri a) - ,(stp:namespace-prefix a)) - ,(stp:value a))) - ,@(parse-body node))) - (version (stp:attribute-value node "version" *xsl*)) - (extensions '())) + (let ((extensions '())) (stp:with-attributes ((eep "extension-element-prefixes" *xsl*)) node (dolist (prefix (words (or eep ""))) @@ -165,21 +137,55 @@ (push (or (stp:find-namespace prefix node) (xslt-error "namespace not found: ~A" prefix)) extensions))) - (when extensions - (setf le - `(xsl:with-extension-namespaces ,extensions - (xsl:with-excluded-namespaces ,extensions - ,le)))) - (when version - (setf le - `(xsl:with-version ,version - ,le))) - le)) + (if (find (stp:namespace-uri node) extensions :test #'equal) + ;; oops, this isn't a literal result element after all + (parse-fallback-children node) + (let ((le + `(xsl:literal-element + (,(stp:local-name node) + ,(stp:namespace-uri node) + ,(stp:namespace-prefix node)) + (xsl:use-attribute-sets + ,(stp:attribute-value node "use-attribute-sets" *xsl*)) + ,@(loop + for a in (stp:list-attributes node) + for xslp = (equal (stp:namespace-uri a) *xsl*) + when xslp + do (unless (find (stp:local-name a) + '("version" + "extension-element-prefixes" + "exclude-result-prefixes" + "use-attribute-sets") + :test #'equal) + (xslt-error + "unknown attribute on literal result element: ~A" + (stp:local-name a))) + else + collect `(xsl:literal-attribute + (,(stp:local-name a) + ,(stp:namespace-uri a) + ,(stp:namespace-prefix a)) + ,(stp:value a))) + ,@ (let ((*extension-namespaces* + (append extensions *extension-namespaces*))) + (parse-body node)))) + (version (stp:attribute-value node "version" *xsl*))) + (when extensions + (setf le + `(xsl:with-extension-namespaces ,extensions + (xsl:with-excluded-namespaces ,extensions + ,le)))) + (when version + (setf le + `(xsl:with-version ,version + ,le))) + le)))) (defun parse-fallback-children (node) (let ((fallbacks (loop for fallback in (stp:filter-children (of-name "fallback") node) + do (only-with-attributes () fallback) append (parse-body fallback)))) (if fallbacks `(progn ,@fallbacks) diff --git a/test.lisp b/test.lisp index f993380..974b7e7 100644 --- a/test.lisp +++ b/test.lisp @@ -387,6 +387,7 @@ |Include__ |Output__77931$ |Output_EmptyElement1$ + |BVTs_bvt020$ )")) (defparameter *known-failures* @@ -427,6 +428,7 @@ "Sorting__91701" "Sorting__91752" "Sorting__91753" + "Sorting_TurkishISortingTest" ;; FIXME? ;; -- 2.11.4.GIT