From 1db909e49bca332800bd6de38c22722ea559d40f Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Mon, 19 Mar 2012 08:18:32 -0700
Subject: Fixed bug parsing LaTeX tables with one column.

Thanks to Steven Solie for finding the bug.
---
 src/Text/Pandoc/Readers/LaTeX.hs | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs
index 2367f258e..fbd0d464b 100644
--- a/src/Text/Pandoc/Readers/LaTeX.hs
+++ b/src/Text/Pandoc/Readers/LaTeX.hs
@@ -919,9 +919,9 @@ parseAligns :: LP [Alignment]
 parseAligns = try $ do
   char '{'
   optional $ char '|'
-  let cAlign = char 'c' >> return AlignCenter
-  let lAlign = char 'l' >> return AlignLeft
-  let rAlign = char 'r' >> return AlignRight
+  let cAlign = AlignCenter <$ char 'c'
+  let lAlign = AlignLeft <$ char 'l'
+  let rAlign = AlignRight <$ char 'r'
   let alignChar = optional sp *> (cAlign <|> lAlign <|> rAlign)
   aligns' <- sepEndBy alignChar (optional $ char '|')
   spaces
@@ -932,16 +932,20 @@ parseAligns = try $ do
 hline :: LP ()
 hline = () <$ (try $ spaces >> controlSeq "hline")
 
+lbreak :: LP ()
+lbreak = () <$ (try $ spaces *> controlSeq "\\")
+
+amp :: LP ()
+amp = () <$ (try $ spaces *> char '&')
+
 parseTableRow :: Int  -- ^ number of columns
               -> LP [Blocks]
 parseTableRow cols = try $ do
-  let amp = try $ spaces *> string "&"
-  let tableCellInline = notFollowedBy (amp <|> controlSeq "\\") >> inline
-  cells' <- sepBy ((plain . trimInlines . mconcat) <$> many tableCellInline) amp
+  let tableCellInline = notFollowedBy (amp <|> lbreak) >> inline
+  let tableCell = (plain . trimInlines . mconcat) <$> many tableCellInline
+  cells' <- sepBy tableCell amp
   guard $ length cells' == cols
   spaces
-  optional $ controlSeq "\\"
-  spaces
   return cells'
 
 simpTable :: LP Blocks
@@ -950,8 +954,8 @@ simpTable = try $ do
   aligns <- parseAligns
   let cols = length aligns
   optional hline
-  header' <- option [] $ try (parseTableRow cols <* hline)
-  rows <- many (parseTableRow cols <* optional hline)
+  header' <- option [] $ try (parseTableRow cols <* lbreak <* hline)
+  rows <- sepEndBy (parseTableRow cols) (lbreak <* optional hline)
   spaces
   let header'' = if null header'
                     then replicate cols mempty
-- 
cgit v1.2.3