Added more parsers for escaped characters and links.

master
Aadhavan Srinivasan 2 days ago
parent 1b821c4315
commit 81671727b2

@ -123,6 +123,14 @@ parseItalic = do
let parsedText = fst $ leftmostLongestParse parseLine text let parsedText = fst $ leftmostLongestParse parseLine text
return (Italic parsedText) return (Italic parsedText)
-- Parse a link
parseLink :: ReadP MdToken
parseLink = do
linkText <- between (string "[") (string "]") (many1 get)
linkURL <- between (string "(") (string ")") (many1 get)
let parsedLinkText = fst $ leftmostLongestParse parseLine linkText
return $ Link parsedLinkText (URL linkURL)
-- Parse a linebreak character -- Parse a linebreak character
parseLinebreak :: ReadP MdToken parseLinebreak :: ReadP MdToken
parseLinebreak = do parseLinebreak = do
@ -136,6 +144,13 @@ parseSingleNewline = do
char '\n' char '\n'
return SingleNewline return SingleNewline
-- Parse an escaped character
parseEscapedChar :: ReadP MdToken
parseEscapedChar = do
char '\\'
escapedChar <- choice (map char specialChars)
return (Unit [escapedChar])
-- Parse a regular string as a Unit. -- Parse a regular string as a Unit.
parseString :: ReadP MdToken parseString :: ReadP MdToken
parseString = do parseString = do
@ -144,7 +159,15 @@ parseString = do
return (Unit (firstChar : text)) return (Unit (firstChar : text))
lineParsers :: [ReadP MdToken] lineParsers :: [ReadP MdToken]
lineParsers = [parseLinebreak, parseSingleNewline, parseBold, parseItalic, parseString] -- A 'line' doesn't include a 'header' lineParsers =
[ parseLinebreak,
parseSingleNewline,
parseEscapedChar,
parseBold,
parseItalic,
parseLink,
parseString
] -- A 'line' doesn't include a 'header'
-- List of all parsers -- List of all parsers
allParsers :: [ReadP MdToken] allParsers :: [ReadP MdToken]

Loading…
Cancel
Save