git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: avoid reparsing at the top level
fe5fd12Alexander Krotov
src/Text/Pandoc/Readers/Muse.hs+14−2
@@ -130,8 +130,7 @@ instance HasLogMessages MuseState where
130parseMuse :: PandocMonad m => MuseParser m Pandoc
130parseMuse :: PandocMonad m => MuseParser m Pandoc
131parseMuse = do
131parseMuse = do
132 many directive
132 many directive
133− blocks <- mconcat <$> many parseBlock
133+ blocks <- parseBlocks
134− eof
135 st <- getState
134 st <- getState
136 let doc = runF (do Pandoc _ bs <- B.doc <$> blocks
135 let doc = runF (do Pandoc _ bs <- B.doc <$> blocks
137 meta <- museMeta st
136 meta <- museMeta st
@@ -250,6 +249,19 @@ directive = do
250-- block parsers
249-- block parsers
251--
250--
252
251
252+parseBlocks :: PandocMonad m
253+ => MuseParser m (F Blocks)
254+parseBlocks =
255+ try (mempty <$ eof) <|>
256+ try blockStart <|>
257+ try paraStart
258+ where
259+ blockStart = do first <- blockElements
260+ rest <- parseBlocks
261+ return $ first B.<> rest
262+ paraStart = do (first, rest) <- paraUntil ((mempty <$ eof) <|> (blankline >> blockStart))
263+ return $ first B.<> rest
264+
253parseBlock :: PandocMonad m => MuseParser m (F Blocks)
265parseBlock :: PandocMonad m => MuseParser m (F Blocks)
254parseBlock = do
266parseBlock = do
255 res <- blockElements <|> para
267 res <- blockElements <|> para