git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: allow newline after opening "*" or "**"
23ed97fAlexander Krotov
src/Text/Pandoc/Readers/Muse.hs+9−1
@@ -58,7 +58,7 @@ import Text.Pandoc.Class (PandocMonad (..))
58import Text.Pandoc.Definition
58import Text.Pandoc.Definition
59import Text.Pandoc.Logging
59import Text.Pandoc.Logging
60import Text.Pandoc.Options
60import Text.Pandoc.Options
61−import Text.Pandoc.Parsing hiding (F)
61+import Text.Pandoc.Parsing hiding (F, enclosed)
62import Text.Pandoc.Readers.HTML (htmlTag)
62import Text.Pandoc.Readers.HTML (htmlTag)
63import Text.Pandoc.Shared (crFilter, underlineSpan)
63import Text.Pandoc.Shared (crFilter, underlineSpan)
64
64
@@ -839,6 +839,14 @@ br = try $ do
839emphasisBetween :: (PandocMonad m, Show a) => MuseParser m a -> MuseParser m (F Inlines)
839emphasisBetween :: (PandocMonad m, Show a) => MuseParser m a -> MuseParser m (F Inlines)
840emphasisBetween c = try $ enclosedInlines c c
840emphasisBetween c = try $ enclosedInlines c c
841
841
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+
842enclosedInlines :: (PandocMonad m, Show a, Show b)
850enclosedInlines :: (PandocMonad m, Show a, Show b)
843 => MuseParser m a
851 => MuseParser m a
844 -> MuseParser m b
852 -> MuseParser m b
test/Tests/Readers/Muse.hs+8
@@ -62,6 +62,14 @@ tests =
62 "*Foo bar*" =?>
62 "*Foo bar*" =?>
63 para (emph . spcSep $ ["Foo", "bar"])
63 para (emph . spcSep $ ["Foo", "bar"])
64
64
65+ -- Emacs Muse allows this
66+ , "Newline in the beginning of emphasis" =:
67+ "*\nFoo bar*" =?>
68+ para (emph ("Foo" <> space <> "bar"))
69+ , "Newline in the end of emphasis" =:
70+ "*Foo bar\n*" =?>
71+ para (emph ("Foo" <> space <> "bar"))
72+
65 , "Comma after closing *" =:
73 , "Comma after closing *" =:
66 "Foo *bar*, baz" =?>
74 "Foo *bar*, baz" =?>
67 para ("Foo " <> emph "bar" <> ", baz")
75 para ("Foo " <> emph "bar" <> ", baz")