diff --git a/src/MdToHTML.hs b/src/MdToHTML.hs index e3dc86a..2af8e8b 100644 --- a/src/MdToHTML.hs +++ b/src/MdToHTML.hs @@ -157,8 +157,12 @@ parseBold = parseBoldWith asteriskBold <|> parseBoldWith underscoreBold where parseBoldWith delim = do string delim - inside <- someTill parseLineToken $ string delim + inside <- parseNestedThenLineToken delim return (Bold (Line inside)) + parseNestedThenLineToken delim = do + first <- fallthroughParser [parseItalic, parseLineToken] + rest <- fallthroughParser [singleton <$> parseItalic, singleton <$> string delim >> return mempty, liftA2 (:) parseLineToken $ parseNestedThenLineToken delim] + return (first : rest) -- Parse italic text parseItalic :: Parser MdToken @@ -166,8 +170,12 @@ parseItalic = parseItalicWith '*' <|> parseItalicWith '_' where parseItalicWith delim = do char delim - inside <- someTill parseLineToken (char delim) + inside <- parseNestedThenLineToken delim return (Italic (Line inside)) + parseNestedThenLineToken delim = do + first <- fallthroughParser [parseBold, parseLineToken] + rest <- fallthroughParser [singleton <$> parseBold, singleton <$> char delim >> return mempty, liftA2 (:) parseLineToken $ parseNestedThenLineToken delim] + return (first : rest) -- Parse strikethrough text parseStrikethrough :: Parser MdToken