|
|
|
@ -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]
|
|
|
|
|