summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclaremacrae <github@cfmacrae.fastmail.co.uk>2013-08-11 22:22:07 +0100
committerclaremacrae <github@cfmacrae.fastmail.co.uk>2013-08-11 22:22:07 +0100
commit48645a47555dd5c243f5d28f9c8274b368917856 (patch)
tree4ce5c32d24a193252b67854647d39f1e64809941
parente5004bcff040a2bc85d7ed6acb42425d265f1bd2 (diff)
Initial implementation of tables in dokuwiki writer (#386)
Todo: alignment, and headings
-rw-r--r--src/Text/Pandoc/Writers/DokuWiki.hs39
-rw-r--r--tests/tables.dokuwiki217
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. |