@@ -1434,7 +1434,7 @@ complexNatbibCitation mode = try $ do
1435-- tables
1435-- tables
1437−parseAligns :: PandocMonad m => LP m [(String, Alignment, String)]
1437+parseAligns :: PandocMonad m => LP m [(Alignment, (String, String))]
1438parseAligns = try $ do
1438parseAligns = try $ do
1440 let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ (char '@' >> braced)
1440 let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ (char '@' >> braced)
@@ -1442,12 +1442,13 @@ parseAligns = try $ do
1442 let cAlign = AlignCenter <$ char 'c'
1442 let cAlign = AlignCenter <$ char 'c'
1443 let lAlign = AlignLeft <$ char 'l'
1443 let lAlign = AlignLeft <$ char 'l'
1444 let rAlign = AlignRight <$ char 'r'
1444 let rAlign = AlignRight <$ char 'r'
1445− let parAlign = AlignLeft <$ (char 'p' >> braced)
1445+ let parAlign = AlignLeft <$ char 'p'
1446 -- algins from tabularx
1446 -- algins from tabularx
1447 let xAlign = AlignLeft <$ char 'X'
1447 let xAlign = AlignLeft <$ char 'X'
1448− let mAlign = AlignLeft <$ (char 'm' >> braced)
1448+ let mAlign = AlignLeft <$ char 'm'
1449− let bAlign = AlignLeft <$ (char 'b' >> braced)
1449+ let bAlign = AlignLeft <$ char 'b'
1450− let alignChar = cAlign <|> lAlign <|> rAlign <|> parAlign <|> xAlign <|> mAlign <|> bAlign
1450+ let alignChar = cAlign <|> lAlign <|> rAlign <|> parAlign
1451+ <|> xAlign <|> mAlign <|> bAlign
1451 let alignPrefix = char '>' >> braced
1452 let alignPrefix = char '>' >> braced
1452 let alignSuffix = char '<' >> braced
1453 let alignSuffix = char '<' >> braced
1453 let alignSpec = do
1454 let alignSpec = do
@@ -1455,9 +1456,10 @@ parseAligns = try $ do
1455 pref <- option "" alignPrefix
1456 pref <- option "" alignPrefix
1457 ch <- alignChar
1458 ch <- alignChar
1459+ _width <- option "" braced -- TODO parse this
1459 suff <- option "" alignSuffix
1461 suff <- option "" alignSuffix
1460− return (pref, ch, suff)
1462+ return (ch, (pref, suff))
1461 aligns' <- sepEndBy alignSpec maybeBar
1463 aligns' <- sepEndBy alignSpec maybeBar
@@ -1488,11 +1490,11 @@ amp = () <$ try (spaces' *> char '&' <* spaces')
1489parseTableRow :: PandocMonad m
1491parseTableRow :: PandocMonad m
1490 => String -- ^ table environment name
1492 => String -- ^ table environment name
1491− -> Int -- ^ number of columns
1493+ -> [(Alignment, (String, String))] -- ^ colspecs
1492− -> [String] -- ^ prefixes
1493− -> [String] -- ^ suffixes
1494 -> LP m [Blocks]
1494 -> LP m [Blocks]
1495−parseTableRow envname cols prefixes suffixes = try $ do
1495+parseTableRow envname colspecs = try $ do
1496+ let prefsufs = map snd colspecs
1497+ let cols = length colspecs
1496 let tableCellRaw = concat <$> many
1498 let tableCellRaw = concat <$> many
1497 (do notFollowedBy amp
1499 (do notFollowedBy amp
1498 notFollowedBy lbreak
1500 notFollowedBy lbreak
@@ -1505,8 +1507,7 @@ parseTableRow envname cols prefixes suffixes = try $ do
1506 rawcells <- sepBy1 tableCellRaw amp
1508 rawcells <- sepBy1 tableCellRaw amp
1507 guard $ length rawcells == cols
1509 guard $ length rawcells == cols
1508− let rawcells' = zipWith3 (\c p s -> p ++ trim c ++ s)
1510+ let rawcells' = zipWith (\c (p, s) -> p ++ trim c ++ s) rawcells prefsufs
1509− rawcells prefixes suffixes
1510 let tableCell = plainify <$> blocks
1511 let tableCell = plainify <$> blocks
1511 cells' <- mapM (parseFromString' tableCell) rawcells'
1512 cells' <- mapM (parseFromString' tableCell) rawcells'
1512 let numcells = length cells'
1513 let numcells = length cells'
@@ -1524,17 +1525,17 @@ simpTable :: PandocMonad m => String -> Bool -> LP m Blocks
1524simpTable envname hasWidthParameter = try $ do
1525simpTable envname hasWidthParameter = try $ do
1525 when hasWidthParameter $ () <$ (spaces' >> tok)
1526 when hasWidthParameter $ () <$ (spaces' >> tok)
1526 skipopts
1527 skipopts
1527− (prefixes, aligns, suffixes) <- unzip3 <$> parseAligns
1528+ colspecs <- parseAligns
1528− let cols = length aligns
1529+ let cols = length colspecs
1529 optional $ controlSeq "caption" *> skipopts *> setCaption
1530 optional $ controlSeq "caption" *> skipopts *> setCaption
1530 optional lbreak
1531 optional lbreak
1532 skipMany hline
1533 skipMany hline
1534− header' <- option [] $ try (parseTableRow envname cols prefixes suffixes <*
1535+ header' <- option [] $ try (parseTableRow envname colspecs <*
1535 lbreak <* many1 hline)
1536 lbreak <* many1 hline)
1537− rows <- sepEndBy (parseTableRow envname cols prefixes suffixes)
1538+ rows <- sepEndBy (parseTableRow envname colspecs)
1538 (lbreak <* optional (skipMany hline))
1539 (lbreak <* optional (skipMany hline))
1540 optional $ controlSeq "caption" *> skipopts *> setCaption
1541 optional $ controlSeq "caption" *> skipopts *> setCaption
@@ -1544,6 +1545,7 @@ simpTable envname hasWidthParameter = try $ do
1544 then replicate cols mempty
1545 then replicate cols mempty
1545 else header'
1546 else header'
1546 lookAhead $ controlSeq "end" -- make sure we're at end
1547 lookAhead $ controlSeq "end" -- make sure we're at end
1548+ let (aligns, _) = unzip colspecs
1547 return $ table mempty (zip aligns (repeat 0)) header'' rows
1549 return $ table mempty (zip aligns (repeat 0)) header'' rows
1549removeDoubleQuotes :: String -> String
1551removeDoubleQuotes :: String -> String