git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: don't allow emphasis to be preceded by letter
3ae3597Alexander Krotov
src/Text/Pandoc/Readers/Muse.hs+12−2
@@ -136,6 +136,13 @@ commonPrefix (x:xs) (y:ys)
136 | x == y = x : commonPrefix xs ys
136 | x == y = x : commonPrefix xs ys
137 | otherwise = []
137 | otherwise = []
138
138
139+atStart :: PandocMonad m => MuseParser m a -> MuseParser m a
140+atStart p = do
141+ pos <- getPosition
142+ st <- getState
143+ guard $ stateLastStrPos st /= Just pos
144+ p
145+
139--
146--
140-- directive parsers
147-- directive parsers
141--
148--
@@ -668,7 +675,7 @@ enclosedInlines :: (PandocMonad m, Show a, Show b)
668 -> MuseParser m b
675 -> MuseParser m b
669 -> MuseParser m (F Inlines)
676 -> MuseParser m (F Inlines)
670enclosedInlines start end = try $
677enclosedInlines start end = try $
671− trimInlinesF . mconcat <$> (enclosed start end inline <* notFollowedBy (satisfy isLetter))
678+ trimInlinesF . mconcat <$> (enclosed (atStart start) end inline <* notFollowedBy (satisfy isLetter))
672
679
673inlineTag :: PandocMonad m
680inlineTag :: PandocMonad m
674 => (Inlines -> Inlines)
681 => (Inlines -> Inlines)
@@ -745,7 +752,10 @@ inlineLiteralTag = do
745 rawInline (attrs, content) = B.rawInline (format attrs) content
752 rawInline (attrs, content) = B.rawInline (format attrs) content
746
753
747str :: PandocMonad m => MuseParser m (F Inlines)
754str :: PandocMonad m => MuseParser m (F Inlines)
755+str = do
748−str = return . B.str <$> many1 alphaNum
756+ result <- many1 alphaNum
757+ updateLastStrPos
758+ return $ return $ B.str result
749
759
750symbol :: PandocMonad m => MuseParser m (F Inlines)
760symbol :: PandocMonad m => MuseParser m (F Inlines)
751symbol = return . B.str <$> count 1 nonspaceChar
761symbol = return . B.str <$> count 1 nonspaceChar
test/Tests/Readers/Muse.hs+4
@@ -70,6 +70,10 @@ tests =
70 "Foo *bar*x baz" =?>
70 "Foo *bar*x baz" =?>
71 para "Foo *bar*x baz"
71 para "Foo *bar*x baz"
72
72
73+ , "Letter before opening *" =:
74+ "Foo x*bar* baz" =?>
75+ para "Foo x*bar* baz"
76+
73 , "Emphasis tag" =:
77 , "Emphasis tag" =:
74 "<em>Foo bar</em>" =?>
78 "<em>Foo bar</em>" =?>
75 para (emph . spcSep $ ["Foo", "bar"])
79 para (emph . spcSep $ ["Foo", "bar"])