diff --git a/src/HTML.hs b/src/HTML.hs index d5777be..f253a67 100644 --- a/src/HTML.hs +++ b/src/HTML.hs @@ -64,7 +64,7 @@ generateLiElems (element : remainder) = -- We assume child lists are stricly after our contents -- if they aren't this is fucked serializeInlineToHTML element.content, - T.concat $ map (elementToHTML . List) element.children, + fromMaybe "" $ fmap (elementToHTML . List) element.child, "", generateLiElems remainder ] diff --git a/src/IR.hs b/src/IR.hs index 3aa30b0..4f2ad2e 100644 --- a/src/IR.hs +++ b/src/IR.hs @@ -33,7 +33,7 @@ data BlockQuote = Q [InlineText] deriving (Show) data ListItem = LI { content :: [InlineText], -- Flatten continuations into here - children :: [List] + child :: Maybe List } deriving (Show) diff --git a/src/Markdown.hs b/src/Markdown.hs index 8ccb1b4..f7d1e85 100644 --- a/src/Markdown.hs +++ b/src/Markdown.hs @@ -125,17 +125,21 @@ listBlock list_type prefix child_parser_factory nest_level = do items <- some $ (try (listItem <* notFollowedBy blockEnding)) <|> (listItem <* lineEnding) pure $ List $ L {list_type, items} where - listItem = error "listItem" + listItem = do + prefix + content <- many inlineText + child <- optional $ child_parser_factory $ nest_level + 1 + pure $ LI {content, child} unorderedListBlock :: (Logger m, Characters s) => Int -> Parser s m Element -unorderedListBlock = listBlock Unordered unordered_prefix (\level -> unwrap <$> unorderedListBlock level) +unorderedListBlock = listBlock Unordered unordered_prefix (\level -> unwrap <$> ((try $ unorderedListBlock level) <|> orderedListBlock level)) where unordered_prefix = (choice $ map char "*-+") *> optional spaceChar -- not exhaustive but we know listBlock is returning a List unwrap (List l) = l orderedListBlock :: (Logger m, Characters s) => Int -> Parser s m Element -orderedListBlock = listBlock Ordered ordered_prefix (\level -> unwrap <$> orderedListBlock level) +orderedListBlock = listBlock Ordered ordered_prefix (\level -> unwrap <$> ((try $ unorderedListBlock level) <|> orderedListBlock level)) where ordered_prefix = error "ordered_prefix" -- not exhaustive but we know listBlock is returning a List