LaTeX reader: Small refactoring of table parsing code.
This makes room for doing something with widths.
This commit is contained in:
parent
1e7ba5ccd7
commit
58cfac84f0
1 changed files with 18 additions and 16 deletions
|
@ -1434,7 +1434,7 @@ complexNatbibCitation mode = try $ do
|
|||
|
||||
-- tables
|
||||
|
||||
parseAligns :: PandocMonad m => LP m [(String, Alignment, String)]
|
||||
parseAligns :: PandocMonad m => LP m [(Alignment, (String, String))]
|
||||
parseAligns = try $ do
|
||||
bgroup
|
||||
let maybeBar = skipMany $ sp <|> () <$ char '|' <|> () <$ (char '@' >> braced)
|
||||
|
@ -1442,12 +1442,13 @@ parseAligns = try $ do
|
|||
let cAlign = AlignCenter <$ char 'c'
|
||||
let lAlign = AlignLeft <$ char 'l'
|
||||
let rAlign = AlignRight <$ char 'r'
|
||||
let parAlign = AlignLeft <$ (char 'p' >> braced)
|
||||
let parAlign = AlignLeft <$ char 'p'
|
||||
-- algins from tabularx
|
||||
let xAlign = AlignLeft <$ char 'X'
|
||||
let mAlign = AlignLeft <$ (char 'm' >> braced)
|
||||
let bAlign = AlignLeft <$ (char 'b' >> braced)
|
||||
let alignChar = cAlign <|> lAlign <|> rAlign <|> parAlign <|> xAlign <|> mAlign <|> bAlign
|
||||
let mAlign = AlignLeft <$ char 'm'
|
||||
let bAlign = AlignLeft <$ char 'b'
|
||||
let alignChar = cAlign <|> lAlign <|> rAlign <|> parAlign
|
||||
<|> xAlign <|> mAlign <|> bAlign
|
||||
let alignPrefix = char '>' >> braced
|
||||
let alignSuffix = char '<' >> braced
|
||||
let alignSpec = do
|
||||
|
@ -1455,9 +1456,10 @@ parseAligns = try $ do
|
|||
pref <- option "" alignPrefix
|
||||
spaces
|
||||
ch <- alignChar
|
||||
_width <- option "" braced -- TODO parse this
|
||||
spaces
|
||||
suff <- option "" alignSuffix
|
||||
return (pref, ch, suff)
|
||||
return (ch, (pref, suff))
|
||||
aligns' <- sepEndBy alignSpec maybeBar
|
||||
spaces
|
||||
egroup
|
||||
|
@ -1488,11 +1490,11 @@ amp = () <$ try (spaces' *> char '&' <* spaces')
|
|||
|
||||
parseTableRow :: PandocMonad m
|
||||
=> String -- ^ table environment name
|
||||
-> Int -- ^ number of columns
|
||||
-> [String] -- ^ prefixes
|
||||
-> [String] -- ^ suffixes
|
||||
-> [(Alignment, (String, String))] -- ^ colspecs
|
||||
-> LP m [Blocks]
|
||||
parseTableRow envname cols prefixes suffixes = try $ do
|
||||
parseTableRow envname colspecs = try $ do
|
||||
let prefsufs = map snd colspecs
|
||||
let cols = length colspecs
|
||||
let tableCellRaw = concat <$> many
|
||||
(do notFollowedBy amp
|
||||
notFollowedBy lbreak
|
||||
|
@ -1505,8 +1507,7 @@ parseTableRow envname cols prefixes suffixes = try $ do
|
|||
_ -> bs
|
||||
rawcells <- sepBy1 tableCellRaw amp
|
||||
guard $ length rawcells == cols
|
||||
let rawcells' = zipWith3 (\c p s -> p ++ trim c ++ s)
|
||||
rawcells prefixes suffixes
|
||||
let rawcells' = zipWith (\c (p, s) -> p ++ trim c ++ s) rawcells prefsufs
|
||||
let tableCell = plainify <$> blocks
|
||||
cells' <- mapM (parseFromString' tableCell) rawcells'
|
||||
let numcells = length cells'
|
||||
|
@ -1524,17 +1525,17 @@ simpTable :: PandocMonad m => String -> Bool -> LP m Blocks
|
|||
simpTable envname hasWidthParameter = try $ do
|
||||
when hasWidthParameter $ () <$ (spaces' >> tok)
|
||||
skipopts
|
||||
(prefixes, aligns, suffixes) <- unzip3 <$> parseAligns
|
||||
let cols = length aligns
|
||||
colspecs <- parseAligns
|
||||
let cols = length colspecs
|
||||
optional $ controlSeq "caption" *> skipopts *> setCaption
|
||||
optional lbreak
|
||||
spaces'
|
||||
skipMany hline
|
||||
spaces'
|
||||
header' <- option [] $ try (parseTableRow envname cols prefixes suffixes <*
|
||||
header' <- option [] $ try (parseTableRow envname colspecs <*
|
||||
lbreak <* many1 hline)
|
||||
spaces'
|
||||
rows <- sepEndBy (parseTableRow envname cols prefixes suffixes)
|
||||
rows <- sepEndBy (parseTableRow envname colspecs)
|
||||
(lbreak <* optional (skipMany hline))
|
||||
spaces'
|
||||
optional $ controlSeq "caption" *> skipopts *> setCaption
|
||||
|
@ -1544,6 +1545,7 @@ simpTable envname hasWidthParameter = try $ do
|
|||
then replicate cols mempty
|
||||
else header'
|
||||
lookAhead $ controlSeq "end" -- make sure we're at end
|
||||
let (aligns, _) = unzip colspecs
|
||||
return $ table mempty (zip aligns (repeat 0)) header'' rows
|
||||
|
||||
removeDoubleQuotes :: String -> String
|
||||
|
|
Loading…
Add table
Reference in a new issue