From b1b99189c93fbea3dddb2d2082da0d6e27c77ded Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Tue, 10 Jun 2025 09:11:19 -0400 Subject: [PATCH] Link tect can be empty; inline code cannot be empty and can have nested backticks; created a unit parser for all characters except newline --- src/MdToHTML.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/MdToHTML.hs b/src/MdToHTML.hs index 715741d..4b3fa83 100644 --- a/src/MdToHTML.hs +++ b/src/MdToHTML.hs @@ -185,15 +185,16 @@ parseStrikethrough = do -- Parse code parseCode :: Parser MdToken parseCode = do - char '`' - inside <- manyTill (satisfy (/= '\n')) (char '`') + opening <- some $ char '`' + inside <- someTill (satisfy (/= '\n')) (char '`') + closing <- count (length opening - 1) (char '`') return (Code (Unit (concatMap escapeChar inside))) -- Parse a link parseLink :: Parser MdToken parseLink = do char '[' - linkText <- someTill parseLineToken (char ']') + linkText <- manyTill parseLineToken (char ']') char '(' linkURL <- manyTill anySingle (char ')') return $ Link (Line linkText) (URL linkURL) @@ -259,6 +260,13 @@ parseUnit = do text <- anySingle return (Unit [text]) +-- Parse any character except a newline +parseUnitExceptNewline :: Parser MdToken +parseUnitExceptNewline = do + -- text <- satisfy (`notElem` specialChars) + text <- satisfy (/= '\n') + return (Unit [text]) + lineParsers :: [Parser MdToken] lineParsers = [ parseLinebreak,