@@ -35,6 +35,7 @@ import Text.Pandoc.Builder ( Inlines, Blocks, HasMeta(..),
35 trimInlines )
35 trimInlines )
36import Text.Pandoc.Definition
36import Text.Pandoc.Definition
37import Text.Pandoc.Compat.Monoid ((<>))
37import Text.Pandoc.Compat.Monoid ((<>))
38+import Text.Pandoc.Error
38import Text.Pandoc.Options
39import Text.Pandoc.Options
39import qualified Text.Pandoc.Parsing as P
40import qualified Text.Pandoc.Parsing as P
40import Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF
41import Text.Pandoc.Parsing hiding ( F, unF, askF, asksF, runF
@@ -57,8 +58,6 @@ import qualified Data.Set as Set
57import Data.Maybe (fromMaybe, isJust)
58import Data.Maybe (fromMaybe, isJust)
58import Network.HTTP (urlEncode)
59import Network.HTTP (urlEncode)
60−import Text.Pandoc.Error
62-- | Parse org-mode string and return a Pandoc document.
61-- | Parse org-mode string and return a Pandoc document.
63readOrg :: ReaderOptions -- ^ Reader options
62readOrg :: ReaderOptions -- ^ Reader options
64 -> String -- ^ String to parse (assuming @'\n'@ line endings)
63 -> String -- ^ String to parse (assuming @'\n'@ line endings)
@@ -807,18 +806,19 @@ tableRows = try $ many (tableAlignRow <|> tableHline <|> tableContentRow)
808tableContentRow :: OrgParser OrgTableRow
807tableContentRow :: OrgParser OrgTableRow
809tableContentRow = try $
808tableContentRow = try $
810− OrgContentRow . sequence <$> (tableStart *> manyTill tableContentCell newline)
809+ OrgContentRow . sequence <$> (tableStart *> many1Till tableContentCell newline)
812tableContentCell :: OrgParser (F Blocks)
811tableContentCell :: OrgParser (F Blocks)
813tableContentCell = try $
812tableContentCell = try $
814− fmap B.plain . trimInlinesF . mconcat <$> many1Till inline endOfCell
813+ fmap B.plain . trimInlinesF . mconcat <$> manyTill inline endOfCell
816−endOfCell :: OrgParser Char
817−endOfCell = try $ char '|' <|> lookAhead newline
819tableAlignRow :: OrgParser OrgTableRow
815tableAlignRow :: OrgParser OrgTableRow
820−tableAlignRow = try $
816+tableAlignRow = try $ do
821− OrgAlignRow <$> (tableStart *> manyTill tableAlignCell newline)
818+ cells <- many1Till tableAlignCell newline
819+ -- Empty rows are regular (i.e. content) rows, not alignment rows.
820+ guard $ any (/= AlignDefault) cells
821+ return $ OrgAlignRow cells
823tableAlignCell :: OrgParser Alignment
823tableAlignCell :: OrgParser Alignment
824tableAlignCell =
824tableAlignCell =
@@ -833,15 +833,19 @@ tableAlignCell =
833 where emptyCell = try $ skipSpaces *> endOfCell
833 where emptyCell = try $ skipSpaces *> endOfCell
835tableAlignFromChar :: OrgParser Alignment
835tableAlignFromChar :: OrgParser Alignment
836+tableAlignFromChar = try $
836−tableAlignFromChar = try $ choice [ char 'l' *> return AlignLeft
837+ choice [ char 'l' *> return AlignLeft
837− , char 'c' *> return AlignCenter
838+ , char 'c' *> return AlignCenter
838− , char 'r' *> return AlignRight
839+ , char 'r' *> return AlignRight
841tableHline :: OrgParser OrgTableRow
842tableHline :: OrgParser OrgTableRow
842tableHline = try $
843tableHline = try $
843 OrgHlineRow <$ (tableStart *> char '-' *> anyLine)
844 OrgHlineRow <$ (tableStart *> char '-' *> anyLine)
846+endOfCell :: OrgParser Char
847+endOfCell = try $ char '|' <|> lookAhead newline
845rowsToTable :: [OrgTableRow]
849rowsToTable :: [OrgTableRow]
846 -> F OrgTable
850 -> F OrgTable
847rowsToTable = foldM rowToContent emptyTable
851rowsToTable = foldM rowToContent emptyTable