git.iko.soy/typeable/pandoc
on master help sign in
Factor out "returnState" into Parsing module
4ce6471Matthew Pickering
src/Text/Pandoc/Parsing.hs+5
@@ -66,6 +66,7 @@ module Text.Pandoc.Parsing ( anyLine,
66 gridTableWith,
66 gridTableWith,
67 readWith,
67 readWith,
68 returnWarnings,
68 returnWarnings,
69+ returnState,
69 readWithM,
70 readWithM,
70 testStringWith,
71 testStringWith,
71 guardEnabled,
72 guardEnabled,
@@ -873,6 +874,10 @@ returnWarnings p = do
873 warnings <- stateWarnings <$> getState
874 warnings <- stateWarnings <$> getState
874 return (doc, warnings)
875 return (doc, warnings)
875
876
877+-- | Return the final internal state with the result of a parser
878+returnState :: (Stream s m c) => ParsecT s st m a -> ParsecT s st m (a, st)
879+returnState p = (,) <$> p <*> getState
880+
876-- | Parse a string with @parser@ (for testing).
881-- | Parse a string with @parser@ (for testing).
877testStringWith :: (Show a, Stream [Char] Identity Char)
882testStringWith :: (Show a, Stream [Char] Identity Char)
878 => ParserT [Char] ParserState Identity a
883 => ParserT [Char] ParserState Identity a
src/Text/Pandoc/Readers/Markdown.hs+1−8
@@ -81,17 +81,10 @@ readMarkdownWithWarnings :: ReaderOptions -- ^ Reader options
81 -> (Pandoc, [String])
81 -> (Pandoc, [String])
82readMarkdownWithWarnings opts s = runMarkdown opts s (returnWarnings parseMarkdown)
82readMarkdownWithWarnings opts s = runMarkdown opts s (returnWarnings parseMarkdown)
83
83
84−
85−retState :: MarkdownParser a -> MarkdownParser (a, ParserState)
86−retState p = do
87− r <- p
88− s <- getState
89− return (r, s)
90−
91runMarkdown :: ReaderOptions -> String -> MarkdownParser a -> a
84runMarkdown :: ReaderOptions -> String -> MarkdownParser a -> a
92runMarkdown opts inp p = fst res
85runMarkdown opts inp p = fst res
93 where
86 where
94− imd = readWithM (retState p) def{ stateOptions = opts } (inp ++ "\n\n")
87+ imd = readWithM (returnState p) def{ stateOptions = opts } (inp ++ "\n\n")
95 res = runReader imd s
88 res = runReader imd s
96 s :: ParserState
89 s :: ParserState
97 s = snd $ runReader imd s
90 s = snd $ runReader imd s
src/Text/Pandoc/Readers/Org.hs+1−8
@@ -74,18 +74,11 @@ type OrgParser = ParserT [Char] OrgParserState (Reader OrgParserLocal)
74runOrg :: ReaderOptions -> String -> OrgParser a -> a
74runOrg :: ReaderOptions -> String -> OrgParser a -> a
75runOrg opts inp p = fst res
75runOrg opts inp p = fst res
76 where
76 where
77− imd = readWithM (retState p) def{ orgStateOptions = opts } (inp ++ "\n\n")
77+ imd = readWithM (returnState p) def{ orgStateOptions = opts } (inp ++ "\n\n")
78 res = runReader imd def { finalState = s }
78 res = runReader imd def { finalState = s }
79 s :: OrgParserState
79 s :: OrgParserState
80 s = snd $ runReader imd (def { finalState = s })
80 s = snd $ runReader imd (def { finalState = s })
81
81
82−retState :: OrgParser a -> OrgParser (a, OrgParserState)
83−retState p = do
84− r <- p
85− s <- getState
86− return (r, s)
87−
88−
89parseOrg :: OrgParser Pandoc
82parseOrg :: OrgParser Pandoc
90parseOrg = do
83parseOrg = do
91 blocks' <- parseBlocks
84 blocks' <- parseBlocks