Link tect can be empty; inline code cannot be empty and can have nested

backticks; created a unit parser for all characters except newline
usingMegaparsec
Aadhavan Srinivasan 3 weeks ago
parent ade3768e29
commit b1b99189c9

@ -185,15 +185,16 @@ parseStrikethrough = do
-- Parse code -- Parse code
parseCode :: Parser MdToken parseCode :: Parser MdToken
parseCode = do parseCode = do
char '`' opening <- some $ char '`'
inside <- manyTill (satisfy (/= '\n')) (char '`') inside <- someTill (satisfy (/= '\n')) (char '`')
closing <- count (length opening - 1) (char '`')
return (Code (Unit (concatMap escapeChar inside))) return (Code (Unit (concatMap escapeChar inside)))
-- Parse a link -- Parse a link
parseLink :: Parser MdToken parseLink :: Parser MdToken
parseLink = do parseLink = do
char '[' char '['
linkText <- someTill parseLineToken (char ']') linkText <- manyTill parseLineToken (char ']')
char '(' char '('
linkURL <- manyTill anySingle (char ')') linkURL <- manyTill anySingle (char ')')
return $ Link (Line linkText) (URL linkURL) return $ Link (Line linkText) (URL linkURL)
@ -259,6 +260,13 @@ parseUnit = do
text <- anySingle text <- anySingle
return (Unit [text]) 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 :: [Parser MdToken]
lineParsers = lineParsers =
[ parseLinebreak, [ parseLinebreak,

Loading…
Cancel
Save