diff options
-rw-r--r-- | src/Text/Pandoc/Readers/RST.hs | 24 | ||||
-rw-r--r-- | test/command/1166.md | 48 |
2 files changed, 64 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index fbba022fa..d3e253da8 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -1029,22 +1029,29 @@ simpleTableFooter = try $ simpleTableSep '=' >> blanklines -- Parse a raw line and split it into chunks by indices. simpleTableRawLine :: Monad m => [Int] -> RSTParser m [String] -simpleTableRawLine indices = do - line <- many1Till anyChar newline - return (simpleTableSplitLine indices line) +simpleTableRawLine indices = simpleTableSplitLine indices <$> anyLine + +simpleTableRawLineWithEmptyCell :: Monad m => [Int] -> RSTParser m [String] +simpleTableRawLineWithEmptyCell indices = try $ do + cs <- simpleTableRawLine indices + let isEmptyCell = all (\c -> c == ' ' || c == '\t') + guard $ any isEmptyCell cs + return cs -- Parse a table row and return a list of blocks (columns). simpleTableRow :: PandocMonad m => [Int] -> RSTParser m [Blocks] simpleTableRow indices = do notFollowedBy' simpleTableFooter firstLine <- simpleTableRawLine indices - colLines <- return [] -- TODO - let cols = map unlines . transpose $ firstLine : colLines - mapM (parseFromString (mconcat <$> many plain)) cols + conLines <- many $ simpleTableRawLineWithEmptyCell indices + let cols = map unlines . transpose $ firstLine : conLines ++ + [replicate (length indices) "" + | not (null conLines)] + mapM (parseFromString parseBlocks) cols simpleTableSplitLine :: [Int] -> String -> [String] simpleTableSplitLine indices line = - map trim + map trimr $ tail $ splitByIndices (init indices) line simpleTableHeader :: PandocMonad m @@ -1125,7 +1132,8 @@ hyphens = do escapedChar :: Monad m => ParserT [Char] st m Inlines escapedChar = do c <- escaped anyChar - return $ if c == ' ' -- '\ ' is null in RST + return $ if c == ' ' || c == '\n' || c == '\r' + -- '\ ' is null in RST then mempty else B.str [c] diff --git a/test/command/1166.md b/test/command/1166.md new file mode 100644 index 000000000..756a065db --- /dev/null +++ b/test/command/1166.md @@ -0,0 +1,48 @@ +See #1166 and <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#simple-tables>. + +``` +% pandoc -f rst -t html5 +===== ===== +col 1 col 2 +===== ===== +1 Second column of row 1. +2 Second column of row 2. + Second line of paragraph. +3 - Second column of row 3. + + - Second item in bullet + list (row 3, column 2). +\ Row 4; column 1 will be empty. +===== ===== +^D +<table> +<thead> +<tr class="header"> +<th>col 1</th> +<th>col 2</th> +</tr> +</thead> +<tbody> +<tr class="odd"> +<td>1</td> +<td>Second column of row 1.</td> +</tr> +<tr class="even"> +<td><p>2</p></td> +<td><p>Second column of row 2. Second line of paragraph.</p></td> +</tr> +<tr class="odd"> +<td><p>3</p></td> +<td><ul> +<li>Second column of row 3.</li> +<li>Second item in bullet list (row 3, column 2).</li> +</ul></td> +</tr> +<tr class="even"> +<td></td> +<td>Row 4; column 1 will be empty.</td> +</tr> +</tbody> +</table> +``` + |