diff --git a/src/MdToHTML.hs b/src/MdToHTML.hs
index 57c58c3..18cd2a9 100644
--- a/src/MdToHTML.hs
+++ b/src/MdToHTML.hs
@@ -166,32 +166,31 @@ parseHeader = do
-- Parse bold text
parseBold :: ReadP MdToken
-parseBold = do
- text <-
- choice
- [ between (string "__") (string "__") (many1 (lookaheadParse (/= "__"))),
- between (string "**") (string "**") (many1 (lookaheadParse (/= "**")))
- ]
- let parsedText = fst $ leftmostLongestParse parseLine text
- return (Bold parsedText)
+parseBold = parseBoldWith "**" <|> parseBoldWith "__"
+ where
+ parseBoldWith delim = do
+ string delim
+ inside <- greedyParse1 parseLineToken
+ string delim
+ return (Bold (Line inside))
-- Parse italic text
parseItalic :: ReadP MdToken
-parseItalic = do
- text <-
- choice
- [ between (string "_") (string "_") (munch1 (/= '_')),
- between (string "*") (string "*") (munch1 (/= '*'))
- ]
- let parsedText = fst $ leftmostLongestParse parseLine text
- return (Italic parsedText)
+parseItalic = parseBoldWith "*" <|> parseBoldWith "_"
+ where
+ parseBoldWith delim = do
+ string delim
+ inside <- greedyParse1 parseLineToken
+ string delim
+ return (Italic (Line inside))
-- Parse strikethrough text
parseStrikethrough :: ReadP MdToken
parseStrikethrough = do
- text <- between (string "~~") (string "~~") (many1 (lookaheadParse (/= "~~")))
- let parsedText = fst $ leftmostLongestParse parseLine text
- return (Strikethrough parsedText)
+ string "~~"
+ inside <- many1 parseLineToken
+ string "~~"
+ return (Strikethrough (Line inside))
-- Parse a link
parseLink :: ReadP MdToken