git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: more table refactoring.
af6e841John MacFarlane
src/Text/Pandoc/Readers/LaTeX.hs+13−12
@@ -1434,7 +1434,7 @@ complexNatbibCitation mode = try $ do
1434
1434
1435-- tables
1435-- tables
1436
1436
1437−parseAligns :: PandocMonad m => LP m [(Alignment, (String, String))]
1437+parseAligns :: PandocMonad m => LP m [(Alignment, Double, (String, String))]
1438parseAligns = try $ do
1438parseAligns = try $ do
1439 bgroup
1439 bgroup
1440 let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ (char '@' >> braced)
1440 let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ (char '@' >> braced)
@@ -1455,11 +1455,13 @@ parseAligns = try $ do
1455 spaces
1455 spaces
1456 pref <- option "" alignPrefix
1456 pref <- option "" alignPrefix
1457 spaces
1457 spaces
1458− ch <- alignChar
1458+ al <- alignChar
1459− _width <- option "" braced -- TODO parse this
1459+ let parseWidth :: String -> Double
1460+ parseWidth _ = 0.00 -- TODO actually parse the width
1461+ width <- parseWidth <$> option "" braced
1460 spaces
1462 spaces
1461 suff <- option "" alignSuffix
1463 suff <- option "" alignSuffix
1462− return (ch, (pref, suff))
1464+ return (al, width, (pref, suff))
1463 aligns' <- sepEndBy alignSpec maybeBar
1465 aligns' <- sepEndBy alignSpec maybeBar
1464 spaces
1466 spaces
1465 egroup
1467 egroup
@@ -1490,11 +1492,10 @@ amp = () <$ try (spaces' *> char '&' <* spaces')
1490
1492
1491parseTableRow :: PandocMonad m
1493parseTableRow :: PandocMonad m
1492 => String -- ^ table environment name
1494 => String -- ^ table environment name
1493− -> [(Alignment, (String, String))] -- ^ colspecs
1495+ -> [(String, String)] -- ^ pref/suffixes
1494 -> LP m [Blocks]
1496 -> LP m [Blocks]
1495−parseTableRow envname colspecs = try $ do
1497+parseTableRow envname prefsufs = try $ do
1496− let prefsufs = map snd colspecs
1497− let cols = length colspecs
1498+ let cols = length prefsufs
1498 let tableCellRaw = concat <$> many
1499 let tableCellRaw = concat <$> many
1499 (do notFollowedBy amp
1500 (do notFollowedBy amp
1500 notFollowedBy lbreak
1501 notFollowedBy lbreak
@@ -1526,16 +1527,17 @@ simpTable envname hasWidthParameter = try $ do
1526 when hasWidthParameter $ () <$ (spaces' >> tok)
1527 when hasWidthParameter $ () <$ (spaces' >> tok)
1527 skipopts
1528 skipopts
1528 colspecs <- parseAligns
1529 colspecs <- parseAligns
1530+ let (aligns, widths, prefsufs) = unzip3 colspecs
1529 let cols = length colspecs
1531 let cols = length colspecs
1530 optional $ controlSeq "caption" *> skipopts *> setCaption
1532 optional $ controlSeq "caption" *> skipopts *> setCaption
1531 optional lbreak
1533 optional lbreak
1532 spaces'
1534 spaces'
1533 skipMany hline
1535 skipMany hline
1534 spaces'
1536 spaces'
1535− header' <- option [] $ try (parseTableRow envname colspecs <*
1537+ header' <- option [] $ try (parseTableRow envname prefsufs <*
1536 lbreak <* many1 hline)
1538 lbreak <* many1 hline)
1537 spaces'
1539 spaces'
1538− rows <- sepEndBy (parseTableRow envname colspecs)
1540+ rows <- sepEndBy (parseTableRow envname prefsufs)
1539 (lbreak <* optional (skipMany hline))
1541 (lbreak <* optional (skipMany hline))
1540 spaces'
1542 spaces'
1541 optional $ controlSeq "caption" *> skipopts *> setCaption
1543 optional $ controlSeq "caption" *> skipopts *> setCaption
@@ -1545,8 +1547,7 @@ simpTable envname hasWidthParameter = try $ do
1545 then replicate cols mempty
1547 then replicate cols mempty
1546 else header'
1548 else header'
1547 lookAhead $ controlSeq "end" -- make sure we're at end
1549 lookAhead $ controlSeq "end" -- make sure we're at end
1548− let (aligns, _) = unzip colspecs
1549− return $ table mempty (zip aligns (repeat 0)) header'' rows
1550+ return $ table mempty (zip aligns widths) header'' rows
1550
1551
1551removeDoubleQuotes :: String -> String
1552removeDoubleQuotes :: String -> String
1552removeDoubleQuotes ('"':xs) =
1553removeDoubleQuotes ('"':xs) =