diff --git a/src/MdToHTML.hs b/src/MdToHTML.hs
index 5b5deb5..8798db9 100644
--- a/src/MdToHTML.hs
+++ b/src/MdToHTML.hs
@@ -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]