From 00031fc809117cb436397aba83a41ca1d4056f61 Mon Sep 17 00:00:00 2001 From: Albert Krewinkel Date: Sun, 13 Dec 2020 14:09:59 +0100 Subject: [PATCH] Docx writer: keep raw openxml strings verbatim. Closes: #6933 --- src/Text/Pandoc/Writers/Docx.hs | 7 +++++-- test/Tests/Writers/Docx.hs | 10 ++++++++++ test/docx/golden/raw-blocks.docx | Bin 0 -> 9888 bytes test/docx/golden/raw-bookmarks.docx | Bin 0 -> 10023 bytes test/docx/raw-blocks.native | 6 ++++++ test/docx/raw-bookmarks.native | 3 +++ 6 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/docx/golden/raw-blocks.docx create mode 100644 test/docx/golden/raw-bookmarks.docx create mode 100644 test/docx/raw-blocks.native create mode 100644 test/docx/raw-bookmarks.native diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs index 97048e980..0174a8501 100644 --- a/src/Text/Pandoc/Writers/Docx.hs +++ b/src/Text/Pandoc/Writers/Docx.hs @@ -978,7 +978,9 @@ blockToOpenXML' opts (Para lst) return [Elem $ mknode "w:p" [] (map Elem paraProps' ++ contents)] blockToOpenXML' opts (LineBlock lns) = blockToOpenXML opts $ linesToPara lns blockToOpenXML' _ b@(RawBlock format str) - | format == Format "openxml" = return (parseXML str) + | format == Format "openxml" = return [ + Text (CData CDataRaw (T.unpack str) Nothing) + ] | otherwise = do report $ BlockNotRendered b return [] @@ -1312,7 +1314,8 @@ inlineToOpenXML' opts (Strikeout lst) = $ inlinesToOpenXML opts lst inlineToOpenXML' _ LineBreak = return [Elem br] inlineToOpenXML' _ il@(RawInline f str) - | f == Format "openxml" = return (parseXML str) + | f == Format "openxml" = return + [Text (CData CDataRaw (T.unpack str) Nothing)] | otherwise = do report $ InlineNotRendered il return [] diff --git a/test/Tests/Writers/Docx.hs b/test/Tests/Writers/Docx.hs index 8f051b4b7..66a5c3d36 100644 --- a/test/Tests/Writers/Docx.hs +++ b/test/Tests/Writers/Docx.hs @@ -128,6 +128,16 @@ tests = [ testGroup "inlines" def "docx/codeblock.native" "docx/golden/codeblock.docx" + , docxTest + "raw OOXML blocks" + def + "docx/raw-blocks.native" + "docx/golden/raw-blocks.docx" + , docxTest + "raw bookmark markers" + def + "docx/raw-bookmarks.native" + "docx/golden/raw-bookmarks.docx" ] , testGroup "track changes" [ docxTest diff --git a/test/docx/golden/raw-blocks.docx b/test/docx/golden/raw-blocks.docx new file mode 100644 index 0000000000000000000000000000000000000000..ae7f8f1f0ef0265d80a28ffe7db37ed7e17c7058 GIT binary patch literal 9888 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 RUm_D4013Ql{3w1s{SQAF1=#=q literal 0 HcmV?d00001 diff --git a/test/docx/golden/raw-bookmarks.docx b/test/docx/golden/raw-bookmarks.docx new file mode 100644 index 0000000000000000000000000000000000000000..5e433b7367852055a8ac7c912b0679ebe33b1cff GIT binary patch literal 10023 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�*i$^F`(u{T9vA5m;K5{HEj01l95!>If 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 x`8W9w{wK*l_\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" +,Para [Str "Ribosome"] +,RawBlock (Format "openxml") "\n" +,Para [Str "Lysosome"] +,RawBlock (Format "openxml") "\n\n"] diff --git a/test/docx/raw-bookmarks.native b/test/docx/raw-bookmarks.native new file mode 100644 index 000000000..1e76655d6 --- /dev/null +++ b/test/docx/raw-bookmarks.native @@ -0,0 +1,3 @@ +[Para [Str "Manual",Space,Str "endnotes."] +,Para [Str "Nullam",Space,Str "eu",Space,Str "ante",Space,Str "vel",Space,Str "est",Space,Str "convallis",Space,Str "dignissim.",Space,Str "Nunc",Space,Str "porta",Space,Str "vulputate",Space,Str "tellus.",Space,Str "Nunc",Space,Str "rutrum",Space,Str "turpis",Space,Str "sed",Space,Str "pede.",Space,Str "Sed",Space,Str "bibendum.",RawInline (Format "openxml") "",Str "Aliquam",Space,Str "posuere."] +,Para [Str "Nunc",Space,Str "aliquet,",Space,Str "augue",Space,Str "nec",Space,Str "adipiscing",Space,Str "interdum,",Space,Str "lacus",Space,Str "tellus",Space,Str "malesuada",Space,Str "massa,",Space,Str "quis",Space,Str "varius",Space,Str "mi",Space,Str "purus",Space,Str "non",Space,Str "odio.",RawInline (Format "openxml") "",Str "Pellentesque",Space,Str "condimentum,",Space,Str "magna",Space,Str "ut",Space,Str "suscipit",Space,Str "hendrerit,",Space,Str "ipsum",Space,Str "augue",Space,Str "ornare",Space,Str "nulla,",Space,Str "non",Space,Str "luctus",Space,Str "diam",Space,Str "neque",Space,Str "sit",Space,Str "amet",Space,Str "urna.",Space,Str "Curabitur",Space,Str "vulputate",Space,Str "vestibulum",Space,Str "lorem."]]