diff options
-rw-r--r-- | src/Text/Pandoc/Writers/DokuWiki.hs | 39 | ||||
-rw-r--r-- | tests/tables.dokuwiki | 217 |
2 files changed, 43 insertions, 213 deletions
diff --git a/src/Text/Pandoc/Writers/DokuWiki.hs b/src/Text/Pandoc/Writers/DokuWiki.hs index db02bde89..87145d723 100644 --- a/src/Text/Pandoc/Writers/DokuWiki.hs +++ b/src/Text/Pandoc/Writers/DokuWiki.hs @@ -150,26 +150,21 @@ blockToDokuWiki opts (BlockQuote blocks) = do contents <- blockListToDokuWiki opts blocks return $ "<blockquote>" ++ contents ++ "</blockquote>" -blockToDokuWiki opts (Table capt aligns widths headers rows') = do +blockToDokuWiki opts (Table capt aligns _ headers rows') = do let alignStrings = map alignmentToString aligns captionDoc <- if null capt then return "" else do c <- inlineListToDokuWiki opts capt - return $ "<caption>" ++ c ++ "</caption>\n" - let percent w = show (truncate (100*w) :: Integer) ++ "%" - let coltags = if all (== 0.0) widths - then "" - else unlines $ map - (\w -> "<col width=\"" ++ percent w ++ "\" />") widths + return $ "" ++ c ++ "\n" head' <- if all null headers then return "" else do hs <- tableRowToDokuWiki opts alignStrings 0 headers - return $ "<thead>\n" ++ hs ++ "\n</thead>\n" + return $ hs ++ "\n" body' <- zipWithM (tableRowToDokuWiki opts alignStrings) [1..] rows' - return $ "<table>\n" ++ captionDoc ++ coltags ++ head' ++ - "<tbody>\n" ++ unlines body' ++ "</tbody>\n</table>\n" + return $ captionDoc ++ head' ++ + unlines body' blockToDokuWiki opts x@(BulletList items) = do oldUseTags <- get >>= return . stUseTags @@ -325,34 +320,34 @@ tableRowToDokuWiki :: WriterOptions -> [[Block]] -> State WriterState String tableRowToDokuWiki opts alignStrings rownum cols' = do - let celltype = if rownum == 0 then "th" else "td" - let rowclass = case rownum of - 0 -> "header" - x | x `rem` 2 == 1 -> "odd" - _ -> "even" + let celltype = if rownum == 0 then "" else "" cols'' <- sequence $ zipWith (\alignment item -> tableItemToDokuWiki opts celltype alignment item) alignStrings cols' - return $ "<tr class=\"" ++ rowclass ++ "\">\n" ++ unlines cols'' ++ "</tr>" + return $ "| " ++ "" ++ joinColumns cols'' ++ " |" alignmentToString :: Alignment -> [Char] alignmentToString alignment = case alignment of - AlignLeft -> "left" - AlignRight -> "right" - AlignCenter -> "center" - AlignDefault -> "left" + AlignLeft -> "" + AlignRight -> "" + AlignCenter -> "" + AlignDefault -> "" tableItemToDokuWiki :: WriterOptions -> String -> String -> [Block] -> State WriterState String +-- TODO Fix celltype and align' defined but not used tableItemToDokuWiki opts celltype align' item = do - let mkcell x = "<" ++ celltype ++ " align=\"" ++ align' ++ "\">" ++ - x ++ "</" ++ celltype ++ ">" + let mkcell x = "" ++ x ++ "" contents <- blockListToDokuWiki opts item return $ mkcell contents +-- | Concatenates columns together. +joinColumns :: [String] -> String +joinColumns = intercalate " | " + -- | Convert list of Pandoc block elements to DokuWiki. blockListToDokuWiki :: WriterOptions -- ^ Options -> [Block] -- ^ List of block elements diff --git a/tests/tables.dokuwiki b/tests/tables.dokuwiki index 4836ecd79..0a1b0a4ff 100644 --- a/tests/tables.dokuwiki +++ b/tests/tables.dokuwiki @@ -1,212 +1,47 @@ Simple table with caption: -<table> -<caption>Demonstration of simple table syntax.</caption> -<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> +Demonstration of simple table syntax. +| Right | Left | Center | Default | +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | 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: -<table> -<caption>Demonstration of simple table syntax.</caption> -<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> +Demonstration of simple table syntax. +| Right | Left | Center | Default | +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | Multiline table with caption: -<table> -<caption>Here's the caption. It may span multiple lines.</caption> -<col width="15%" /> -<col width="13%" /> -<col width="16%" /> -<col width="33%" /> -<thead> -<tr class="header"> -<th align="center">Centered Header</th> -<th align="left">Left Aligned</th> -<th align="right">Right Aligned</th> -<th align="left">Default aligned</th> -</tr> -</thead> -<tbody> -<tr class="odd"> -<td align="center">First</td> -<td align="left">row</td> -<td align="right">12.0</td> -<td align="left">Example of a row that spans multiple lines.</td> -</tr> -<tr class="even"> -<td align="center">Second</td> -<td align="left">row</td> -<td align="right">5.0</td> -<td align="left">Here's another one. Note the blank line between rows.</td> -</tr> -</tbody> -</table> +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. | Multiline table without caption: -<table> -<col width="15%" /> -<col width="13%" /> -<col width="16%" /> -<col width="33%" /> -<thead> -<tr class="header"> -<th align="center">Centered Header</th> -<th align="left">Left Aligned</th> -<th align="right">Right Aligned</th> -<th align="left">Default aligned</th> -</tr> -</thead> -<tbody> -<tr class="odd"> -<td align="center">First</td> -<td align="left">row</td> -<td align="right">12.0</td> -<td align="left">Example of a row that spans multiple lines.</td> -</tr> -<tr class="even"> -<td align="center">Second</td> -<td align="left">row</td> -<td align="right">5.0</td> -<td align="left">Here's another one. Note the blank line between rows.</td> -</tr> -</tbody> -</table> +| 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: -<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: -<table> -<col width="15%" /> -<col width="13%" /> -<col width="16%" /> -<col width="33%" /> -<tbody> -<tr class="odd"> -<td align="center">First</td> -<td align="left">row</td> -<td align="right">12.0</td> -<td align="left">Example of a row that spans multiple lines.</td> -</tr> -<tr class="even"> -<td align="center">Second</td> -<td align="left">row</td> -<td align="right">5.0</td> -<td align="left">Here's another one. Note the blank line between rows.</td> -</tr> -</tbody> -</table> +| 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. | |