Skip to content

Commit

Permalink
Docx reader: Pick table width from the longest row or header
Browse files Browse the repository at this point in the history
This change is intended to preserve as much of the table content as
possible

Closes #4360
  • Loading branch information
danse authored and jkr committed Feb 15, 2018
1 parent 82a0cea commit e6ff7f7
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/Text/Pandoc/Readers/Docx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -642,7 +642,7 @@ bodyPartToBlocks (ListItem pPr _ _ _ parparts) =
bodyPartToBlocks $ Paragraph pPr' parparts
bodyPartToBlocks (Tbl _ _ _ []) =
return $ para mempty
bodyPartToBlocks (Tbl cap _ look (r:rs)) = do
bodyPartToBlocks (Tbl cap _ look parts@(r:rs)) = do
let caption = text cap
(hdr, rows) = case firstRowFormatting look of
True | null rs -> (Nothing, [r])
Expand All @@ -651,10 +651,14 @@ bodyPartToBlocks (Tbl cap _ look (r:rs)) = do

cells <- mapM rowToBlocksList rows

let width = case cells of
r':_ -> length r'
-- shouldn't happen
[] -> 0
let width = maybe 0 maximum $ nonEmpty $ map rowLength parts
-- Data.List.NonEmpty is not available with ghc 7.10 so we roll out
-- our own, see
-- https://github.com/jgm/pandoc/pull/4361#issuecomment-365416155
nonEmpty [] = Nothing
nonEmpty l = Just l
rowLength :: Row -> Int
rowLength (Row c) = length c

hdrCells <- case hdr of
Just r' -> rowToBlocksList r'
Expand Down
4 changes: 4 additions & 0 deletions test/Tests/Readers/Docx.hs
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,10 @@ tests = [ testGroup "inlines"
"tables with one row"
"docx/table_one_row.docx"
"docx/table_one_row.native"
, testCompare
"tables with variable width"
"docx/table_variable_width.docx"
"docx/table_variable_width.native"
, testCompare
"code block"
"docx/codeblock.docx"
Expand Down
Binary file added test/docx/table_variable_width.docx
Binary file not shown.
13 changes: 13 additions & 0 deletions test/docx/table_variable_width.native
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[Table [] [AlignDefault,AlignDefault,AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0,0.0,0.0]
[[]
,[]
,[Plain [Str "h3"]]
,[Plain [Str "h4"]]
,[Plain [Str "h5"]]]
[[[Plain [Str "c11"]]
,[]
,[]]
,[[]
,[Plain [Str "c22"]]
,[Plain [Str "c23"]]
,[]]]]

0 comments on commit e6ff7f7

Please sign in to comment.