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
|
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]
|
||||||
|
Reference in New Issue
Block a user