diff --git a/src/Text/Pandoc/Writers/Docbook.hs b/src/Text/Pandoc/Writers/Docbook.hs
index 9d09d46e3..1ca76bfd6 100644
--- a/src/Text/Pandoc/Writers/Docbook.hs
+++ b/src/Text/Pandoc/Writers/Docbook.hs
@@ -185,24 +185,24 @@ blockToDocbook _ (RawBlock "html" str) = text str -- raw XML block
blockToDocbook _ (RawBlock _ _) = empty
blockToDocbook _ HorizontalRule = empty -- not semantic
blockToDocbook opts (Table caption aligns widths headers rows) =
- let alignStrings = map alignmentToString aligns
- captionDoc = if null caption
+ let captionDoc = if null caption
then empty
- else inTagsIndented "caption"
+ else inTagsIndented "title"
(inlinesToDocbook opts caption)
tableType = if isEmpty captionDoc then "informaltable" else "table"
- percent w = show (truncate (100*w) :: Integer) ++ "%"
- coltags = if all (== 0.0) widths
- then empty
- else vcat $ map (\w ->
- selfClosingTag "col" [("width", percent w)]) widths
+ percent w = show (truncate (100*w) :: Integer) ++ "*"
+ coltags = vcat $ zipWith (\w al -> selfClosingTag "colspec"
+ ([("colwidth", percent w) | w > 0] ++
+ [("align", alignmentToString al)])) widths aligns
head' = if all null headers
then empty
else inTagsIndented "thead" $
- tableRowToDocbook opts alignStrings "th" headers
+ tableRowToDocbook opts headers
body' = inTagsIndented "tbody" $
- vcat $ map (tableRowToDocbook opts alignStrings "td") rows
- in inTagsIndented tableType $ captionDoc $$ coltags $$ head' $$ body'
+ vcat $ map (tableRowToDocbook opts) rows
+ in inTagsIndented tableType $ captionDoc $$
+ (inTags True "tgroup" [("cols", show (length headers))] $
+ coltags $$ head' $$ body')
alignmentToString :: Alignment -> [Char]
alignmentToString alignment = case alignment of
@@ -212,22 +212,16 @@ alignmentToString alignment = case alignment of
AlignDefault -> "left"
tableRowToDocbook :: WriterOptions
- -> [String]
- -> String
-> [[Block]]
-> Doc
-tableRowToDocbook opts aligns celltype cols =
- inTagsIndented "tr" $ vcat $
- zipWith (tableItemToDocbook opts celltype) aligns cols
+tableRowToDocbook opts cols =
+ inTagsIndented "row" $ vcat $ map (tableItemToDocbook opts) cols
tableItemToDocbook :: WriterOptions
- -> [Char]
- -> [Char]
-> [Block]
-> Doc
-tableItemToDocbook opts tag align item =
- let attrib = [("align", align)]
- in inTags True tag attrib $ vcat $ map (blockToDocbook opts) item
+tableItemToDocbook opts item =
+ inTags True "entry" [] $ vcat $ map (blockToDocbook opts) item
-- | Convert a list of inline elements to Docbook.
inlinesToDocbook :: WriterOptions -> [Inline] -> Doc
diff --git a/tests/tables.docbook b/tests/tables.docbook
index 6483a97c0..6224cf222 100644
--- a/tests/tables.docbook
+++ b/tests/tables.docbook
@@ -2,401 +2,431 @@
Simple table with caption:
-
+
Demonstration of simple table syntax.
-
-
-
- |
- Right
- |
-
- Left
- |
-
- Center
- |
-
- Default
- |
-
-
-
-
- |
- 12
- |
-
- 12
- |
-
- 12
- |
-
- 12
- |
-
-
- |
- 123
- |
-
- 123
- |
-
- 123
- |
-
- 123
- |
-
-
- |
- 1
- |
-
- 1
- |
-
- 1
- |
-
- 1
- |
-
-
+
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
Simple table without caption:
-
-
- |
- Right
- |
-
- Left
- |
-
- Center
- |
-
- Default
- |
-
-
-
-
- |
- 12
- |
-
- 12
- |
-
- 12
- |
-
- 12
- |
-
-
- |
- 123
- |
-
- 123
- |
-
- 123
- |
-
- 123
- |
-
-
- |
- 1
- |
-
- 1
- |
-
- 1
- |
-
- 1
- |
-
-
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
Simple table indented two spaces:
-
+
Demonstration of simple table syntax.
-
-
-
- |
- Right
- |
-
- Left
- |
-
- Center
- |
-
- Default
- |
-
-
-
-
- |
- 12
- |
-
- 12
- |
-
- 12
- |
-
- 12
- |
-
-
- |
- 123
- |
-
- 123
- |
-
- 123
- |
-
- 123
- |
-
-
- |
- 1
- |
-
- 1
- |
-
- 1
- |
-
- 1
- |
-
-
+
+
+
+
+
+
+
+
+
+ Right
+
+
+ Left
+
+
+ Center
+
+
+ Default
+
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
Multiline table with caption:
-
+
Here's the caption. It may span multiple lines.
-
-
-
-
-
-
-
- |
- Centered Header
- |
-
- Left Aligned
- |
-
- Right Aligned
- |
-
- Default aligned
- |
-
-
-
-
- |
- First
- |
-
- row
- |
-
- 12.0
- |
-
- Example of a row that spans multiple lines.
- |
-
-
- |
- Second
- |
-
- row
- |
-
- 5.0
- |
-
- Here's another one. Note the blank line between rows.
- |
-
-
+
+
+
+
+
+
+
+
+
+ Centered Header
+
+
+ Left Aligned
+
+
+ Right Aligned
+
+
+ Default aligned
+
+
+
+
+
+
+ First
+
+
+ row
+
+
+ 12.0
+
+
+ Example of a row that spans multiple lines.
+
+
+
+
+ Second
+
+
+ row
+
+
+ 5.0
+
+
+ Here's another one. Note the blank line between rows.
+
+
+
+
Multiline table without caption:
-
-
-
-
-
-
- |
- Centered Header
- |
-
- Left Aligned
- |
-
- Right Aligned
- |
-
- Default aligned
- |
-
-
-
-
- |
- First
- |
-
- row
- |
-
- 12.0
- |
-
- Example of a row that spans multiple lines.
- |
-
-
- |
- Second
- |
-
- row
- |
-
- 5.0
- |
-
- Here's another one. Note the blank line between rows.
- |
-
-
+
+
+
+
+
+
+
+
+ Centered Header
+
+
+ Left Aligned
+
+
+ Right Aligned
+
+
+ Default aligned
+
+
+
+
+
+
+ First
+
+
+ row
+
+
+ 12.0
+
+
+ Example of a row that spans multiple lines.
+
+
+
+
+ Second
+
+
+ row
+
+
+ 5.0
+
+
+ Here's another one. Note the blank line between rows.
+
+
+
+
Table without column headers:
-
-
- |
- 12
- |
-
- 12
- |
-
- 12
- |
-
- 12
- |
-
-
- |
- 123
- |
-
- 123
- |
-
- 123
- |
-
- 123
- |
-
-
- |
- 1
- |
-
- 1
- |
-
- 1
- |
-
- 1
- |
-
-
+
+
+
+
+
+
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+ 12
+
+
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+ 123
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+ 1
+
+
+
+
Multiline table without column headers:
-
-
-
-
-
-
- |
- First
- |
-
- row
- |
-
- 12.0
- |
-
- Example of a row that spans multiple lines.
- |
-
-
- |
- Second
- |
-
- row
- |
-
- 5.0
- |
-
- Here's another one. Note the blank line between rows.
- |
-
-
+
+
+
+
+
+
+
+
+ First
+
+
+ row
+
+
+ 12.0
+
+
+ Example of a row that spans multiple lines.
+
+
+
+
+ Second
+
+
+ row
+
+
+ 5.0
+
+
+ Here's another one. Note the blank line between rows.
+
+
+
+