diff options
| -rw-r--r-- | src/Text/Pandoc/Parsing.hs | 6 | ||||
| -rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 22 | 
2 files changed, 24 insertions, 4 deletions
| diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs index 19338661d..3678fc22a 100644 --- a/src/Text/Pandoc/Parsing.hs +++ b/src/Text/Pandoc/Parsing.hs @@ -601,7 +601,8 @@ data ParserState = ParserState        stateHeaderTable     :: [HeaderType],  -- ^ Ordered list of header types used        stateIndentedCodeClasses :: [String],  -- ^ Classes to use for indented code blocks        stateNextExample     :: Int,           -- ^ Number of next example -      stateExamples        :: M.Map String Int -- ^ Map from example labels to numbers  +      stateExamples        :: M.Map String Int, -- ^ Map from example labels to numbers  +      stateHasChapters     :: Bool           -- ^ True if \chapter encountered      }      deriving Show @@ -628,7 +629,8 @@ defaultParserState =                    stateHeaderTable     = [],                    stateIndentedCodeClasses = [],                    stateNextExample     = 1, -                  stateExamples        = M.empty } +                  stateExamples        = M.empty, +                  stateHasChapters     = False }  data HeaderType       = SingleHeader Char  -- ^ Single line of characters underneath 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 | 
