aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2015-02-02 10:38:30 +0000
committerMatthew Pickering <matthewtpickering@gmail.com>2015-03-22 21:47:28 +0000
commit4ce6471c12d779699588deb30344aa2bfe62fd41 (patch)
tree10f4add9c7ae5dfae70c4daba9bde45d7969b43e /src/Text/Pandoc
parent9e150dd7cf7c358ddeff2fa6aae574a2a1bc953f (diff)
downloadpandoc-4ce6471c12d779699588deb30344aa2bfe62fd41.tar.gz
Factor out "returnState" into Parsing module
Diffstat (limited to 'src/Text/Pandoc')
-rw-r--r--src/Text/Pandoc/Parsing.hs5
-rw-r--r--src/Text/Pandoc/Readers/Markdown.hs9
-rw-r--r--src/Text/Pandoc/Readers/Org.hs9
3 files changed, 7 insertions, 16 deletions
diff --git a/src/Text/Pandoc/Parsing.hs b/src/Text/Pandoc/Parsing.hs
index 3e9d559dc..aebdcae4c 100644
--- a/src/Text/Pandoc/Parsing.hs
+++ b/src/Text/Pandoc/Parsing.hs
@@ -66,6 +66,7 @@ module Text.Pandoc.Parsing ( anyLine,
gridTableWith,
readWith,
returnWarnings,
+ returnState,
readWithM,
testStringWith,
guardEnabled,
@@ -873,6 +874,10 @@ returnWarnings p = do
warnings <- stateWarnings <$> getState
return (doc, warnings)
+-- | Return the final internal state with the result of a parser
+returnState :: (Stream s m c) => ParsecT s st m a -> ParsecT s st m (a, st)
+returnState p = (,) <$> p <*> getState
+
-- | Parse a string with @parser@ (for testing).
testStringWith :: (Show a, Stream [Char] Identity Char)
=> ParserT [Char] ParserState Identity a
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs
index 2d7b34607..e2f2c9268 100644
--- a/src/Text/Pandoc/Readers/Markdown.hs
+++ b/src/Text/Pandoc/Readers/Markdown.hs
@@ -81,17 +81,10 @@ readMarkdownWithWarnings :: ReaderOptions -- ^ Reader options
-> (Pandoc, [String])
readMarkdownWithWarnings opts s = runMarkdown opts s (returnWarnings parseMarkdown)
-
-retState :: MarkdownParser a -> MarkdownParser (a, ParserState)
-retState p = do
- r <- p
- s <- getState
- return (r, s)
-
runMarkdown :: ReaderOptions -> String -> MarkdownParser a -> a
runMarkdown opts inp p = fst res
where
- imd = readWithM (retState p) def{ stateOptions = opts } (inp ++ "\n\n")
+ imd = readWithM (returnState p) def{ stateOptions = opts } (inp ++ "\n\n")
res = runReader imd s
s :: ParserState
s = snd $ runReader imd s
diff --git a/src/Text/Pandoc/Readers/Org.hs b/src/Text/Pandoc/Readers/Org.hs
index b21d2cc11..457db200b 100644
--- a/src/Text/Pandoc/Readers/Org.hs
+++ b/src/Text/Pandoc/Readers/Org.hs
@@ -74,18 +74,11 @@ type OrgParser = ParserT [Char] OrgParserState (Reader OrgParserLocal)
runOrg :: ReaderOptions -> String -> OrgParser a -> a
runOrg opts inp p = fst res
where
- imd = readWithM (retState p) def{ orgStateOptions = opts } (inp ++ "\n\n")
+ imd = readWithM (returnState p) def{ orgStateOptions = opts } (inp ++ "\n\n")
res = runReader imd def { finalState = s }
s :: OrgParserState
s = snd $ runReader imd (def { finalState = s })
-retState :: OrgParser a -> OrgParser (a, OrgParserState)
-retState p = do
- r <- p
- s <- getState
- return (r, s)
-
-
parseOrg :: OrgParser Pandoc
parseOrg = do
blocks' <- parseBlocks