diff options
-rw-r--r-- | src/Text/Pandoc/Writers/Textile.hs | 17 | ||||
-rw-r--r-- | tests/tables.textile | 59 |
2 files changed, 20 insertions, 56 deletions
diff --git a/src/Text/Pandoc/Writers/Textile.hs b/src/Text/Pandoc/Writers/Textile.hs index 20cb5f6f7..05eb50349 100644 --- a/src/Text/Pandoc/Writers/Textile.hs +++ b/src/Text/Pandoc/Writers/Textile.hs @@ -39,6 +39,7 @@ import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.XML ( escapeStringForXML ) import Data.List ( intercalate ) import Control.Monad.State +import Control.Applicative ((<$>)) import Data.Char ( isSpace ) data WriterState = WriterState { @@ -164,14 +165,22 @@ blockToTextile opts (BlockQuote blocks) = do return $ "<blockquote>\n\n" ++ contents ++ "\n</blockquote>\n" blockToTextile opts (Table [] aligns widths headers rows') | - all (==0) widths && all (`elem` [AlignLeft,AlignDefault]) aligns = do + all (==0) widths = do hs <- mapM (liftM (("_. " ++) . stripTrailingNewlines) . blockListToTextile opts) headers let cellsToRow cells = "|" ++ intercalate "|" cells ++ "|" - let header = if all null headers then "" else cellsToRow hs - let rowToCells = mapM (liftM stripTrailingNewlines . blockListToTextile opts) + let header = if all null headers then "" else cellsToRow hs ++ "\n" + let blocksToCell (align, bs) = do + contents <- stripTrailingNewlines <$> blockListToTextile opts bs + let alignMarker = case align of + AlignLeft -> "<. " + AlignRight -> ">. " + AlignCenter -> "=. " + AlignDefault -> "" + return $ alignMarker ++ contents + let rowToCells = mapM blocksToCell . zip aligns bs <- mapM rowToCells rows' let body = unlines $ map cellsToRow bs - return $ header ++ "\n" ++ body ++ "\n" + return $ header ++ body blockToTextile opts (Table capt aligns widths headers rows') = do let alignStrings = map alignmentToString aligns diff --git a/tests/tables.textile b/tests/tables.textile index 4836ecd79..6c6b234e6 100644 --- a/tests/tables.textile +++ b/tests/tables.textile @@ -34,36 +34,10 @@ Simple table with caption: Simple table without caption: -<table> -<thead> -<tr class="header"> -<th align="right">Right</th> -<th align="left">Left</th> -<th align="center">Center</th> -<th align="left">Default</th> -</tr> -</thead> -<tbody> -<tr class="odd"> -<td align="right">12</td> -<td align="left">12</td> -<td align="center">12</td> -<td align="left">12</td> -</tr> -<tr class="even"> -<td align="right">123</td> -<td align="left">123</td> -<td align="center">123</td> -<td align="left">123</td> -</tr> -<tr class="odd"> -<td align="right">1</td> -<td align="left">1</td> -<td align="center">1</td> -<td align="left">1</td> -</tr> -</tbody> -</table> +|_. Right|_. Left|_. Center|_. Default| +|>. 12|<. 12|=. 12|12| +|>. 123|<. 123|=. 123|123| +|>. 1|<. 1|=. 1|1| Simple table indented two spaces: @@ -164,28 +138,9 @@ Multiline table without caption: Table without column headers: -<table> -<tbody> -<tr class="odd"> -<td align="right">12</td> -<td align="left">12</td> -<td align="center">12</td> -<td align="right">12</td> -</tr> -<tr class="even"> -<td align="right">123</td> -<td align="left">123</td> -<td align="center">123</td> -<td align="right">123</td> -</tr> -<tr class="odd"> -<td align="right">1</td> -<td align="left">1</td> -<td align="center">1</td> -<td align="right">1</td> -</tr> -</tbody> -</table> +|>. 12|<. 12|=. 12|>. 12| +|>. 123|<. 123|=. 123|>. 123| +|>. 1|<. 1|=. 1|>. 1| Multiline table without column headers: |