aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-03-02 16:48:53 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2017-03-02 16:48:53 +0100
commit4d25bba5f7a620ee6fe43c43d1a14cce4c357858 (patch)
tree53c918d0b13825af2374d9742855fa66d9392efe /src/Text/Pandoc
parent46135ac8758c4fbb9dfe676b1462463f5476bbff (diff)
downloadpandoc-4d25bba5f7a620ee6fe43c43d1a14cce4c357858.tar.gz
RST reader: Handle multiline cells in simple tables.
Closes #1166.
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r--src/Text/Pandoc/Readers/RST.hs24
1 files changed, 16 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]