From 160cb0edebc613b5cf634cc89b61938cedffaddd Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Tue, 3 Jun 2025 15:30:35 -0400 Subject: [PATCH] Trying to get nested bold and italic to work --- src/MdToHTML.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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