From c931be24e1ec05bb668925963ce2f1ff58e98086 Mon Sep 17 00:00:00 2001 From: Jesse Rosenthal Date: Thu, 28 Aug 2014 14:08:23 -0400 Subject: Docx Reader: Read single para in table cell as plain This makes to docx reader's native output fit with the way the markdown reader understands its markdown output. Ie, as far as table cells go: docx -> native == docx -> native -> markdown -> native (This identity isn't true for other things outside of table cells, of course). --- src/Text/Pandoc/Readers/Docx.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Readers/Docx.hs b/src/Text/Pandoc/Readers/Docx.hs index 188fa4a42..8ebe59569 100644 --- a/src/Text/Pandoc/Readers/Docx.hs +++ b/src/Text/Pandoc/Readers/Docx.hs @@ -95,6 +95,7 @@ import Control.Monad.Reader import Control.Monad.State import Control.Applicative ((<$>)) import Data.Sequence (ViewL(..), viewl) +import qualified Data.Sequence as Seq (null) readDocx :: ReaderOptions -> B.ByteString @@ -391,11 +392,21 @@ makeHeaderAnchor' (Header n (_, classes, kvs) ils) = return $ Header n (newIdent, classes, kvs) ils makeHeaderAnchor' blk = return blk +-- Rewrite a standalone paragraph block as a plain +singleParaToPlain :: Blocks -> Blocks +singleParaToPlain blks + | (Para (ils) :< seeq) <- viewl $ unMany blks + , Seq.null seeq = + singleton $ Plain ils +singleParaToPlain blks = blks + cellToBlocks :: Cell -> DocxContext Blocks cellToBlocks (Cell bps) = concatReduce <$> mapM bodyPartToBlocks bps rowToBlocksList :: Row -> DocxContext [Blocks] -rowToBlocksList (Row cells) = mapM cellToBlocks cells +rowToBlocksList (Row cells) = do + blksList <- mapM cellToBlocks cells + return $ map singleParaToPlain blksList trimLineBreaks :: [Inline] -> [Inline] trimLineBreaks [] = [] -- cgit v1.2.3 From 3b5a868533c7a0c0884c511e2f8a5e830e7fede2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenthal Date: Thu, 28 Aug 2014 14:10:47 -0400 Subject: Docx reader: update tests for new table behavior. --- tests/docx/tables.docx | Bin 42792 -> 49780 bytes tests/docx/tables.native | 50 ++++++++++++++++++++++++++++------------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/tests/docx/tables.docx b/tests/docx/tables.docx index 7dcff8d35..28087ead5 100644 Binary files a/tests/docx/tables.docx and b/tests/docx/tables.docx differ diff --git a/tests/docx/tables.native b/tests/docx/tables.native index 2564afcec..cf23cf404 100644 --- a/tests/docx/tables.native +++ b/tests/docx/tables.native @@ -1,24 +1,34 @@ [Header 2 ("a-table-with-and-without-a-header-row",[],[]) [Str "A",Space,Str "table,",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "a",Space,Str "header",Space,Str "row"] ,Table [] [AlignDefault,AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0,0.0] - [[Para [Str "Name"]] - ,[Para [Str "Game"]] - ,[Para [Str "Fame"]] - ,[Para [Str "Blame"]]] - [[[Para [Str "Lebron",Space,Str "James"]] - ,[Para [Str "Basketball"]] - ,[Para [Str "Very",Space,Str "High"]] - ,[Para [Str "Leaving",Space,Str "Cleveland"]]] - ,[[Para [Str "Ryan",Space,Str "Braun"]] - ,[Para [Str "Baseball"]] - ,[Para [Str "Moderate"]] - ,[Para [Str "Steroids"]]] - ,[[Para [Str "Russell",Space,Str "Wilson"]] - ,[Para [Str "Football"]] - ,[Para [Str "High"]] - ,[Para [Str "Tacky",Space,Str "uniform"]]]] + [[Plain [Str "Name"]] + ,[Plain [Str "Game"]] + ,[Plain [Str "Fame"]] + ,[Plain [Str "Blame"]]] + [[[Plain [Str "Lebron",Space,Str "James"]] + ,[Plain [Str "Basketball"]] + ,[Plain [Str "Very",Space,Str "High"]] + ,[Plain [Str "Leaving",Space,Str "Cleveland"]]] + ,[[Plain [Str "Ryan",Space,Str "Braun"]] + ,[Plain [Str "Baseball"]] + ,[Plain [Str "Moderate"]] + ,[Plain [Str "Steroids"]]] + ,[[Plain [Str "Russell",Space,Str "Wilson"]] + ,[Plain [Str "Football"]] + ,[Plain [Str "High"]] + ,[Plain [Str "Tacky",Space,Str "uniform"]]]] ,Table [] [AlignDefault,AlignDefault] [0.0,0.0] [] - [[[Para [Str "Sinple"]] - ,[Para [Str "Table"]]] - ,[[Para [Str "Without"]] - ,[Para [Str "Header"]]]]] + [[[Plain [Str "Sinple"]] + ,[Plain [Str "Table"]]] + ,[[Plain [Str "Without"]] + ,[Plain [Str "Header"]]]] +,Table [] [AlignDefault,AlignDefault] [0.0,0.0] + [] + [[[Para [Str "Simple"] + ,Para [Str "Multiparagraph"]] + ,[Para [Str "Table"] + ,Para [Str "Full"]]] + ,[[Para [Str "Of"] + ,Para [Str "Paragraphs"]] + ,[Para [Str "In",Space,Str "each"] + ,Para [Str "Cell."]]]]] -- cgit v1.2.3