git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: do not allow closing asterisks to be followed by "*"
a1977ddAlexander Krotov
src/Text/Pandoc/Readers/Muse.hs+7−2
@@ -736,6 +736,7 @@ inline' = whitespace
736 <|> br
736 <|> br
737 <|> anchor
737 <|> anchor
738 <|> footnote
738 <|> footnote
739+ <|> strongEmph
739 <|> strong
740 <|> strong
740 <|> strongTag
741 <|> strongTag
741 <|> emph
742 <|> emph
@@ -818,13 +819,17 @@ inlineTag tag = try $ mconcat
818 <$ openTag tag
819 <$ openTag tag
819 <*> manyTill inline (closeTag tag)
820 <*> manyTill inline (closeTag tag)
820
821
822+-- | Parse strong emphasis inline markup, indicated by @***@.
823+strongEmph :: PandocMonad m => MuseParser m (F Inlines)
824+strongEmph = fmap (B.strong . B.emph) <$> emphasisBetween (string "***" <* notFollowedBy (char '*'))
825+
821-- | Parse strong inline markup, indicated by @**@.
826-- | Parse strong inline markup, indicated by @**@.
822strong :: PandocMonad m => MuseParser m (F Inlines)
827strong :: PandocMonad m => MuseParser m (F Inlines)
823−strong = fmap B.strong <$> emphasisBetween (string "**")
828+strong = fmap B.strong <$> emphasisBetween (string "**" <* notFollowedBy (char '*'))
824
829
825-- | Parse emphasis inline markup, indicated by @*@.
830-- | Parse emphasis inline markup, indicated by @*@.
826emph :: PandocMonad m => MuseParser m (F Inlines)
831emph :: PandocMonad m => MuseParser m (F Inlines)
827−emph = fmap B.emph <$> emphasisBetween (char '*')
832+emph = fmap B.emph <$> emphasisBetween (char '*' <* notFollowedBy (char '*'))
828
833
829-- | Parse underline inline markup, indicated by @_@.
834-- | Parse underline inline markup, indicated by @_@.
830-- Supported only in Emacs Muse mode, not Text::Amuse.
835-- Supported only in Emacs Muse mode, not Text::Amuse.
test/Tests/Readers/Muse.hs+23−3
@@ -139,11 +139,31 @@ tests =
139
139
140 , "Asterisk between words does not terminate emphasis" =:
140 , "Asterisk between words does not terminate emphasis" =:
141 "*foo*bar*" =?>
141 "*foo*bar*" =?>
142− para (emph $ "foo*bar")
142+ para (emph "foo*bar")
143
143
144+ , "Two asterisks between words do not terminate emphasis" =:
145+ "*foo**bar*" =?>
146+ para (emph "foo**bar")
147+
148+ , "Three asterisks between words do not terminate emphasis" =:
149+ "*foo***bar*" =?>
150+ para (emph "foo***bar")
151+
144− , "Asterisks between words do not terminate strong" =:
152+ , "Two asterisks between words do not terminate strong" =:
145 "**foo**bar**" =?>
153 "**foo**bar**" =?>
146− para (strong $ "foo**bar")
154+ para (strong "foo**bar")
155+
156+ , "Three asterisks between words do not terminate strong" =:
157+ "**foo***bar**" =?>
158+ para (strong "foo***bar")
159+
160+ , "Three asterisks between words do not terminate strong emphasis" =:
161+ "***foo***bar***" =?>
162+ para (strong . emph $ "foo***bar")
163+
164+ , "Six asterisks between words do not terminate strong emphasis" =:
165+ "***foo******bar***" =?>
166+ para (strong . emph $ "foo******bar")
147
167
148 , test emacsMuse "Underline"
168 , test emacsMuse "Underline"
149 ("_Underline_" =?> para (underlineSpan "Underline"))
169 ("_Underline_" =?> para (underlineSpan "Underline"))