Docx reader: Read table column widths.
This commit is contained in:
parent
4842c5fb82
commit
44484d0dee
14 changed files with 128 additions and 30 deletions
|
@ -639,7 +639,7 @@ bodyPartToBlocks (ListItem pPr _ _ _ parparts) =
|
|||
bodyPartToBlocks $ Paragraph pPr' parparts
|
||||
bodyPartToBlocks (Tbl _ _ _ []) =
|
||||
return $ para mempty
|
||||
bodyPartToBlocks (Tbl cap _ look parts@(r:rs)) = do
|
||||
bodyPartToBlocks (Tbl cap grid look parts@(r:rs)) = do
|
||||
let cap' = simpleCaption $ plain $ text cap
|
||||
(hdr, rows) = case firstRowFormatting look of
|
||||
True | null rs -> (Nothing, [r])
|
||||
|
@ -669,7 +669,8 @@ bodyPartToBlocks (Tbl cap _ look parts@(r:rs)) = do
|
|||
-- so should be possible. Alignment might be more difficult,
|
||||
-- since there doesn't seem to be a column entity in docx.
|
||||
let alignments = replicate width AlignDefault
|
||||
widths = replicate width ColWidthDefault
|
||||
totalWidth = sum grid
|
||||
widths = (\w -> ColWidth (fromInteger w / fromInteger totalWidth)) <$> grid
|
||||
|
||||
return $ table cap'
|
||||
(zip alignments widths)
|
||||
|
|
|
@ -563,7 +563,7 @@ elemToTblGrid :: NameSpaces -> Element -> D TblGrid
|
|||
elemToTblGrid ns element | isElem ns "w" "tblGrid" element =
|
||||
let cols = findChildrenByName ns "w" "gridCol" element
|
||||
in
|
||||
mapD (\e -> maybeToD (findAttrByName ns "w" "val" e >>= stringToInteger))
|
||||
mapD (\e -> maybeToD (findAttrByName ns "w" "w" e >>= stringToInteger))
|
||||
cols
|
||||
elemToTblGrid _ _ = throwError WrongElem
|
||||
|
||||
|
|
|
@ -111,6 +111,11 @@ tests = [ testGroup "inlines"
|
|||
def
|
||||
"docx/tables.native"
|
||||
"docx/golden/tables.docx"
|
||||
, docxTest
|
||||
"tables without explicit column widths"
|
||||
def
|
||||
"docx/tables-default-widths.native"
|
||||
"docx/golden/tables-default-widths.docx"
|
||||
, docxTest
|
||||
"tables with lists in cells"
|
||||
def
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 1.0)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
|
@ -49,4 +49,4 @@
|
|||
,Para [Strong [Str "Table",Space,Str "Page"]]
|
||||
,Para [Strong [Str "No",Space,Str "table",Space,Str "of",Space,Str "figures",Space,Str "entries",Space,Str "found."]]
|
||||
,Header 1 ("introduction",[],[]) [Str "Introduction"]
|
||||
,Para [Str "Nothing",Space,Str "to",Space,Str "introduce,",Space,Str "yet."]]
|
||||
,Para [Str "Nothing",Space,Str "to",Space,Str "introduce,",Space,Str "yet."]]
|
||||
|
|
Binary file not shown.
Binary file not shown.
BIN
test/docx/golden/tables-default-widths.docx
Normal file
BIN
test/docx/golden/tables-default-widths.docx
Normal file
Binary file not shown.
Binary file not shown.
|
@ -1,8 +1,8 @@
|
|||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.22069570301081556)
|
||||
,(AlignDefault,ColWidth 0.22069570301081556)
|
||||
,(AlignDefault,ColWidth 0.5586085939783689)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.3333333333333333)
|
||||
,(AlignDefault,ColWidth 0.3333333333333333)
|
||||
,(AlignDefault,ColWidth 0.3333333333333333)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
|
@ -15,4 +15,4 @@
|
|||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Table"]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
[])]
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 2.0096205237840725e-2)
|
||||
,(AlignDefault,ColWidth 1.9882415820416888e-2)
|
||||
,(AlignDefault,ColWidth 0.22202030999465527)
|
||||
,(AlignDefault,ColWidth 0.4761090326028862)
|
||||
,(AlignDefault,ColWidth 1.0689470871191876e-4)]
|
||||
(TableHead ("",[],[])
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
|
@ -42,4 +42,4 @@
|
|||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
[])]
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.5)
|
||||
,(AlignDefault,ColWidth 0.5)]
|
||||
(TableHead ("",[],[])
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
|
@ -22,4 +22,4 @@
|
|||
,[Para [Str "A"]]
|
||||
,[Para [Str "Numbered",Space,Str "list."]]]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
[])]
|
||||
|
|
92
test/docx/tables-default-widths.native
Normal file
92
test/docx/tables-default-widths.native
Normal file
|
@ -0,0 +1,92 @@
|
|||
[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 ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
(TableHead ("",[],[])
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Name"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Game"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Fame"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Blame"]]]])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
[]
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Lebron",Space,Str "James"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Basketball"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Very",Space,Str "High"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Leaving",Space,Str "Cleveland"]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Ryan",Space,Str "Braun"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Baseball"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Moderate"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Steroids"]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Russell",Space,Str "Wilson"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Football"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "High"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Tacky",Space,Str "uniform"]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])
|
||||
,Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
[]
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Sinple"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Table"]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Without"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Plain [Str "Header"]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])
|
||||
,Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
[]
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "Simple"]
|
||||
,Para [Str "Multiparagraph"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "Table"]
|
||||
,Para [Str "Full"]]]
|
||||
,Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "Of"]
|
||||
,Para [Str "Paragraphs"]]
|
||||
,Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
[Para [Str "In",Space,Str "each"]
|
||||
,Para [Str "Cell."]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
|
@ -1,10 +1,10 @@
|
|||
[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 ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.25)
|
||||
,(AlignDefault,ColWidth 0.25)
|
||||
,(AlignDefault,ColWidth 0.25)
|
||||
,(AlignDefault,ColWidth 0.25)]
|
||||
(TableHead ("",[],[])
|
||||
[Row ("",[],[])
|
||||
[Cell ("",[],[]) AlignDefault (RowSpan 1) (ColSpan 1)
|
||||
|
@ -48,8 +48,8 @@
|
|||
[])
|
||||
,Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.5)
|
||||
,(AlignDefault,ColWidth 0.5)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
|
@ -68,8 +68,8 @@
|
|||
[])
|
||||
,Table ("",[],[]) (Caption Nothing
|
||||
[])
|
||||
[(AlignDefault,ColWidthDefault)
|
||||
,(AlignDefault,ColWidthDefault)]
|
||||
[(AlignDefault,ColWidth 0.5)
|
||||
,(AlignDefault,ColWidth 0.5)]
|
||||
(TableHead ("",[],[])
|
||||
[])
|
||||
[(TableBody ("",[],[]) (RowHeadColumns 0)
|
||||
|
@ -89,4 +89,4 @@
|
|||
[Para [Str "In",Space,Str "each"]
|
||||
,Para [Str "Cell."]]]])]
|
||||
(TableFoot ("",[],[])
|
||||
[])]
|
||||
[])]
|
||||
|
|
Loading…
Add table
Reference in a new issue