From 00dfba81ebc85cae939844e2ddc9e1c64bec5d14 Mon Sep 17 00:00:00 2001 From: Aadhavan Srinivasan Date: Tue, 20 May 2025 16:45:37 -0400 Subject: [PATCH] Created a list of document parsers; implemented ordered list parsing. --- src/MdToHTML.hs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/MdToHTML.hs b/src/MdToHTML.hs index e168c6d..cf14a3f 100644 --- a/src/MdToHTML.hs +++ b/src/MdToHTML.hs @@ -350,6 +350,34 @@ parseUnorderedList = do void (char '\n') <++ eof -- A list must end in an extra newline or eof return $ UnordList lineItems +-- -------- + +parseOListItem :: ReadP MdToken +parseOListItem = parseOListParaItem <++ parseOListLineItem + +-- Parses the first element of an ordered list, which must start with '1.' +parseFirstOListItem :: ReadP MdToken +parseFirstOListItem = do + remaining <- look + when (take 2 remaining /= "1.") pfail + parseOListLineItem + +parseOrderedList :: ReadP MdToken +parseOrderedList = do + firstLine <- parseFirstOListItem + lineItems <- greedyParse1 parseOListItem + void (char '\n') <++ eof + return $ OrdList (firstLine : lineItems) + +documentParsers :: [ReadP MdToken] +documentParsers = + [ parseHeader, + parseBlockquote, + parseUnorderedList, + parseOrderedList, + parsePara + ] + -- Parse a document, which is multiple paragraphs. parseDocument :: ReadP MdToken parseDocument = do