diff options
author | John MacFarlane <jgm@berkeley.edu> | 2010-07-13 19:18:58 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2010-07-13 19:18:58 -0700 |
commit | 0b23956d48682e93afc016a60d9c04696bb7a69a (patch) | |
tree | 1b487389fcc04d3883caa3e63b720299ff948d1a /src/Text/Pandoc/Readers/LaTeX.hs | |
parent | be587685221a166fcbdd3a47871fc86978851ca1 (diff) | |
download | pandoc-0b23956d48682e93afc016a60d9c04696bb7a69a.tar.gz |
Parse \chapter{} in latex.
+ Added stateHasChapters to ParserState.
+ If a \chapter command is encountered, this is set to True
and subsequent \section commands (etc.) will be bumped up
one level.
Diffstat (limited to 'src/Text/Pandoc/Readers/LaTeX.hs')
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index bbc5bb872..8d4f67edc 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -168,16 +168,34 @@ block = choice [ hrule -- header :: GenParser Char ParserState Block -header = try $ do +header = section <|> chapter + +chapter :: GenParser Char ParserState Block +chapter = try $ do + string "\\chapter" + result <- headerWithLevel 1 + updateState $ \s -> s{ stateHasChapters = True } + return result + +section :: GenParser Char ParserState Block +section = try $ do char '\\' subs <- many (try (string "sub")) base <- try (string "section" >> return 1) <|> (string "paragraph" >> return 4) + st <- getState + let lev = if stateHasChapters st + then length subs + base + 1 + else length subs + base + headerWithLevel lev + +headerWithLevel :: Int -> GenParser Char ParserState Block +headerWithLevel lev = try $ do optional (char '*') optional $ bracketedText '[' ']' -- alt title char '{' title' <- manyTill inline (char '}') spaces - return $ Header (length subs + base) (normalizeSpaces title') + return $ Header lev (normalizeSpaces title') -- -- hrule block |