git.iko.soy/typeable/pandoc
on master help sign in
Docx writer: keep raw openxml strings verbatim.
00031fcAlbert Krewinkel
src/Text/Pandoc/Writers/Docx.hs+5−2
@@ -978,7 +978,9 @@ blockToOpenXML' opts (Para lst)
978 return [Elem $ mknode "w:p" [] (map Elem paraProps' ++ contents)]
978 return [Elem $ mknode "w:p" [] (map Elem paraProps' ++ contents)]
979blockToOpenXML' opts (LineBlock lns) = blockToOpenXML opts $ linesToPara lns
979blockToOpenXML' opts (LineBlock lns) = blockToOpenXML opts $ linesToPara lns
980blockToOpenXML' _ b@(RawBlock format str)
980blockToOpenXML' _ 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+ ]
982 | otherwise = do
984 | otherwise = do
983 report $ BlockNotRendered b
985 report $ BlockNotRendered b
984 return []
986 return []
@@ -1312,7 +1314,8 @@ inlineToOpenXML' opts (Strikeout lst) =
1312 $ inlinesToOpenXML opts lst
1314 $ inlinesToOpenXML opts lst
1313inlineToOpenXML' _ LineBreak = return [Elem br]
1315inlineToOpenXML' _ LineBreak = return [Elem br]
1314inlineToOpenXML' _ il@(RawInline f str)
1316inlineToOpenXML' _ il@(RawInline f str)
1315− | f == Format "openxml" = return (parseXML str)
1317+ | f == Format "openxml" = return
1318+ [Text (CData CDataRaw (T.unpack str) Nothing)]
1316 | otherwise = do
1319 | otherwise = do
1317 report $ InlineNotRendered il
1320 report $ InlineNotRendered il
1318 return []
1321 return []
test/Tests/Writers/Docx.hs+10
@@ -128,6 +128,16 @@ tests = [ testGroup "inlines"
128 def
128 def
129 "docx/codeblock.native"
129 "docx/codeblock.native"
130 "docx/golden/codeblock.docx"
130 "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"
131 ]
141 ]
132 , testGroup "track changes"
142 , testGroup "track changes"
133 [ docxTest
143 [ 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."]]