Initial implementation of tables in dokuwiki writer (#386)
Todo: alignment, and headings
This commit is contained in:
parent
e5004bcff0
commit
48645a4755
2 changed files with 43 additions and 213 deletions
|
@ -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
|
||||
|
|
|
@ -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. |
|
||||
|
||||
|
|
Loading…
Reference in a new issue