diff options
author | John MacFarlane <jgm@berkeley.edu> | 2011-07-24 23:24:03 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2011-07-24 23:24:03 -0700 |
commit | 07c7cd19459da37372fc888e3e34e7feee284aec (patch) | |
tree | 0cd38b5b2138269d700609adc0b757a24e83b5be /src/Text | |
parent | 3162adbd9b045b0ae67c8902b76c726363eabdf4 (diff) | |
download | pandoc-07c7cd19459da37372fc888e3e34e7feee284aec.tar.gz |
Docbook writer: Use CALS tables (instead of XHTML tables).
Reason: Some older docbook software does not work with XHTML
tables.
Closes #77.
Diffstat (limited to 'src/Text')
-rw-r--r-- | src/Text/Pandoc/Writers/Docbook.hs | 36 |
1 files changed, 15 insertions, 21 deletions
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 |