diff options
-rw-r--r-- | src/Text/Pandoc/Readers/Docx.hs | 13 | ||||
-rw-r--r-- | tests/docx/tables.docx | bin | 42792 -> 49780 bytes | |||
-rw-r--r-- | tests/docx/tables.native | 50 |
3 files changed, 42 insertions, 21 deletions
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 [] = [] diff --git a/tests/docx/tables.docx b/tests/docx/tables.docx Binary files differindex 7dcff8d35..28087ead5 100644 --- a/tests/docx/tables.docx +++ b/tests/docx/tables.docx 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."]]]]] |