aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/DocBook.hs14
-rw-r--r--test/command/6791.md32
2 files changed, 44 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/DocBook.hs b/src/Text/Pandoc/Readers/DocBook.hs
index 5ba48e704..b0846e345 100644
--- a/src/Text/Pandoc/Readers/DocBook.hs
+++ b/src/Text/Pandoc/Readers/DocBook.hs
@@ -960,12 +960,22 @@ parseBlock (Elem e) =
let aligns = case colspecs of
[] -> replicate numrows AlignDefault
cs -> map toAlignment cs
+ let parseWidth s = safeRead (T.filter (\x -> (x >= '0' && x <= '9')
+ || x == '.') s)
+ let textWidth = case filterChild (named "?dbfo") e of
+ Just d -> case attrValue "table-width" d of
+ "" -> 1.0
+ w -> fromMaybe 100.0 (parseWidth w) / 100.0
+ Nothing -> 1.0
let widths = case colspecs of
[] -> replicate numrows ColWidthDefault
cs -> let ws = map toWidth cs
in case sequence ws of
- Just ws' -> let tot = sum ws'
- in ColWidth . (/ tot) <$> ws'
+ Just ws' -> let colTot = sum ws'
+ scale
+ | textWidth == 1.0 = (/ colTot)
+ | otherwise = (* (textWidth / colTot) )
+ in ColWidth . scale <$> ws'
Nothing -> replicate numrows ColWidthDefault
let toRow = Row nullAttr
toHeaderRow l = [toRow l | not (null l)]
diff --git a/test/command/6791.md b/test/command/6791.md
new file mode 100644
index 000000000..478647721
--- /dev/null
+++ b/test/command/6791.md
@@ -0,0 +1,32 @@
+```
+% pandoc -f docbook -t native --quiet
+<informaltable frame="all" rowsep="1" colsep="1">
+<?dbfo table-width="50%"?>
+<tgroup cols="2">
+<colspec colname="col_1" colwidth="6.25*"/>
+<colspec colname="col_2" colwidth="6.25*"/>
+<tbody>
+<row>
+<entry align="center" valign="top"><simpara>2</simpara></entry>
+<entry align="center" valign="top"><simpara>1</simpara></entry>
+</row>
+</tbody>
+</tgroup>
+</informaltable>
+^D
+[Table ("",[],[]) (Caption Nothing
+ [])
+ [(AlignDefault,ColWidth 0.25)
+ ,(AlignDefault,ColWidth 0.25)]
+ (TableHead ("",[],[])
+ [])
+ [(TableBody ("",[],[]) (RowHeadColumns 0)
+ []
+ [Row ("",[],[])
+ [Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
+ [Para [Str "2"]]
+ ,Cell ("",[],[]) AlignCenter (RowSpan 1) (ColSpan 1)
+ [Para [Str "1"]]]])]
+ (TableFoot ("",[],[])
+ [])]
+```