git.iko.soy/typeable/pandoc
on master help sign in
Docx writer: keep raw openxml strings verbatim.

Closes: #6933

commit00031fc809117cb436397aba83a41ca1d4056f61 authorAlbert Krewinkel <albert@zeitkraut.de> dateSun 13 Dec 2020, 14:09 (6 years ago) parent8cf58d9
6 files changed+24−2
src/Text/Pandoc/Writers/Docx.hs+5−2 test/Tests/Writers/Docx.hs+10 test/docx/golden/raw-blocks.docx test/docx/golden/raw-bookmarks.docx test/docx/raw-blocks.native+6 test/docx/raw-bookmarks.native+3
src/Text/Pandoc/Writers/Docx.hs+5−2
@@ -978,7 +978,9 @@ blockToOpenXML' opts (Para lst)
978978 return [Elem $ mknode "w:p" [] (map Elem paraProps' ++ contents)]
979979blockToOpenXML' opts (LineBlock lns) = blockToOpenXML opts $ linesToPara lns
980980blockToOpenXML' _ b@(RawBlock format str)
981− | format == Format "openxml" = return (parseXML str)
981+ | format == Format "openxml" = return [
982+ Text (CData CDataRaw (T.unpack str) Nothing)
983+ ]
982984 | otherwise = do
983985 report $ BlockNotRendered b
984986 return []
@@ -1312,7 +1314,8 @@ inlineToOpenXML' opts (Strikeout lst) =
13121314 $ inlinesToOpenXML opts lst
13131315inlineToOpenXML' _ LineBreak = return [Elem br]
13141316inlineToOpenXML' _ il@(RawInline f str)
1315− | f == Format "openxml" = return (parseXML str)
1317+ | f == Format "openxml" = return
1318+ [Text (CData CDataRaw (T.unpack str) Nothing)]
13161319 | otherwise = do
13171320 report $ InlineNotRendered il
13181321 return []
test/Tests/Writers/Docx.hs+10
@@ -128,6 +128,16 @@ tests = [ testGroup "inlines"
128128 def
129129 "docx/codeblock.native"
130130 "docx/golden/codeblock.docx"
131+ , docxTest
132+ "raw OOXML blocks"
133+ def
134+ "docx/raw-blocks.native"
135+ "docx/golden/raw-blocks.docx"
136+ , docxTest
137+ "raw bookmark markers"
138+ def
139+ "docx/raw-bookmarks.native"
140+ "docx/golden/raw-bookmarks.docx"
131141 ]
132142 , testGroup "track changes"
133143 [ docxTest
test/docx/golden/raw-blocks.docxnew file

Binary file not shown.

test/docx/golden/raw-bookmarks.docxnew file

Binary file not shown.

test/docx/raw-blocks.nativenew file+6
@@ -0,0 +1,6 @@
1+[Para [Str "Cell",Space,Str "compartments"]
2+,RawBlock (Format "openxml") "<w:tbl>\n<w:tblPr>\n<w:tblW w:w=\"2000\" w:type=\"pct\"/>\n<w:tblBorders>\n<w:top w:val=\"single\" w:sz=\"4\" w:color=\"198200\"/>\n<w:start w:val=\"single\" w:sz=\"4\" w:color=\"198200\"/>\n<w:bottom w:val=\"single\" w:sz=\"4\" w:color=\"198200\"/>\n<w:end w:val=\"single\" w:sz=\"4\" w:color=\"198200\"/>\n</w:tblBorders>\n</w:tblPr>\n<w:tblGrid>\n<w:gridCol w:w=\"1871\" />\n<w:gridCol w:w=\"1872\" />\n</w:tblGrid>\n<w:tr>\n<w:tc>"
3+,Para [Str "Ribosome"]
4+,RawBlock (Format "openxml") "</w:tc>\n<w:tc>"
5+,Para [Str "Lysosome"]
6+,RawBlock (Format "openxml") "</w:tc>\n</w:tr>\n</w:tbl>"]
test/docx/raw-bookmarks.nativenew file+3
@@ -0,0 +1,3 @@
1+[Para [Str "Manual",Space,Str "endnotes."]
2+,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") "<w:bookmarkStart w:id=\"0\" w:name=\"Aliquam\"/>",Str "Aliquam",Space,Str "posuere."]
3+,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") "<w:bookmarkEnd w:id=\"0\"/>",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."]]