Added more parsers for escaped characters and links.
This commit is contained in:
@@ -123,6 +123,14 @@ parseItalic = do
|
||||
let parsedText = fst $ leftmostLongestParse parseLine text
|
||||
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
|
||||
parseLinebreak :: ReadP MdToken
|
||||
parseLinebreak = do
|
||||
@@ -136,6 +144,13 @@ parseSingleNewline = do
|
||||
char '\n'
|
||||
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.
|
||||
parseString :: ReadP MdToken
|
||||
parseString = do
|
||||
@@ -144,7 +159,15 @@ parseString = do
|
||||
return (Unit (firstChar : text))
|
||||
|
||||
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
|
||||
allParsers :: [ReadP MdToken]
|
||||
|
Reference in New Issue
Block a user