@@ -58,7 +58,7 @@ import Text.Pandoc.Class (PandocMonad (..))
5858import Text.Pandoc.Definition
5959import Text.Pandoc.Logging
6060import Text.Pandoc.Options
61−import Text.Pandoc.Parsing hiding (F)
61+import Text.Pandoc.Parsing hiding (F, enclosed)
6262import Text.Pandoc.Readers.HTML (htmlTag)
6363import Text.Pandoc.Shared (crFilter, underlineSpan)
6464
@@ -839,6 +839,14 @@ br = try $ do
839839emphasisBetween :: (PandocMonad m, Show a) => MuseParser m a -> MuseParser m (F Inlines)
840840emphasisBetween c = try $ enclosedInlines c c
841841
842+-- | Parses material enclosed between start and end parsers.
843+enclosed :: (Show end, Stream s m Char) => ParserT s st m t -- ^ start parser
844+ -> ParserT s st m end -- ^ end parser
845+ -> ParserT s st m a -- ^ content parser (to be used repeatedly)
846+ -> ParserT s st m [a]
847+enclosed start end parser = try $
848+ start >> notFollowedBy spaceChar >> many1Till parser end
849+
842850enclosedInlines :: (PandocMonad m, Show a, Show b)
843851 => MuseParser m a
844852 -> MuseParser m b