From 81eba062f2e447fb1c266bc3f08b3b1ce2aeabc4 Mon Sep 17 00:00:00 2001 From: fiddlosopher Date: Sun, 19 Aug 2007 00:18:46 +0000 Subject: Refactor RST and Markdown readers using parseFromString. git-svn-id: https://pandoc.googlecode.com/svn/trunk@864 788f1e2b-df1e-0410-8736-df70ead52e1b --- src/Text/Pandoc/Readers/Markdown.hs | 20 ++++---------------- src/Text/Pandoc/Readers/RST.hs | 15 +++------------ 2 files changed, 7 insertions(+), 28 deletions(-) (limited to 'src/Text') diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index abf8061e0..f4b97527f 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -195,10 +195,7 @@ noteBlock = try $ do raw <- sepBy rawLines (try (blankline >> indentSpaces)) optional blanklines -- parse the extracted text, which may contain various block elements: - rest <- getInput - setInput $ (joinWithSep "\n" raw) ++ "\n\n" - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks $ (joinWithSep "\n" raw) ++ "\n\n" return $ NoteBlock ref contents -- @@ -307,10 +304,7 @@ emailBlockQuote = try $ do blockQuote = do raw <- emailBlockQuote <|> emacsBoxQuote -- parse the extracted block, which may contain various block elements: - rest <- getInput - setInput $ (joinWithSep "\n" raw) ++ "\n\n" - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks $ (joinWithSep "\n" raw) ++ "\n\n" return $ BlockQuote contents -- @@ -393,11 +387,8 @@ listItem start = try $ do let oldContext = stateParserContext state setState $ state {stateParserContext = ListItemState} -- parse the extracted block, which may contain various block elements: - rest <- getInput let raw = concat (first:continuations) - setInput raw - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks raw updateState (\st -> st {stateParserContext = oldContext}) return contents @@ -419,10 +410,7 @@ definitionListItem = try $ do state <- getState let oldContext = stateParserContext state -- parse the extracted block, which may contain various block elements: - rest <- getInput - setInput (concat raw) - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks $ concat raw updateState (\st -> st {stateParserContext = oldContext}) return ((normalizeSpaces term), contents) diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs index 878c1355c..abbf502a1 100644 --- a/src/Text/Pandoc/Readers/RST.hs +++ b/src/Text/Pandoc/Readers/RST.hs @@ -328,10 +328,7 @@ rawLaTeXBlock = try $ do blockQuote = try $ do raw <- indentedBlock True -- parse the extracted block, which may contain various block elements: - rest <- getInput - setInput $ raw ++ "\n\n" - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks $ raw ++ "\n\n" return $ BlockQuote contents -- @@ -344,10 +341,7 @@ definitionListItem = try $ do term <- many1Till inline endline raw <- indentedBlock True -- parse the extracted block, which may contain various block elements: - rest <- getInput - setInput $ raw ++ "\n\n" - contents <- parseBlocks - setInput rest + contents <- parseFromString parseBlocks $ raw ++ "\n\n" return (normalizeSpaces term, contents) definitionList = try $ do @@ -408,12 +402,9 @@ listItem start = try $ do -- see definition of "endline" state <- getState let oldContext = stateParserContext state - remaining <- getInput setState $ state {stateParserContext = ListItemState} -- parse the extracted block, which may itself contain block elements - setInput $ concat (first:rest) ++ blanks - parsed <- parseBlocks - setInput remaining + parsed <- parseFromString parseBlocks $ concat (first:rest) ++ blanks updateState (\st -> st {stateParserContext = oldContext}) return parsed -- cgit v1.2.3