fixed issues with lists

This commit is contained in:
Pagwin 2025-11-27 18:51:26 -05:00
parent 10ea8c2177
commit 499811fed0
No known key found for this signature in database
GPG key ID: 81137023740CA260

View file

@ -162,13 +162,15 @@ horizontalRuleBlock = do
unorderedListBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element unorderedListBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element
unorderedListBlock = do unorderedListBlock = do
items <- some unorderedListItem items <- some unorderedListItem
lineEnding'
pure $ List $ L Unordered items pure $ List $ L Unordered items
unorderedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m ListItem unorderedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m ListItem
unorderedListItem = do unorderedListItem = do
oneOf "*-+" oneOf "*-+"
char ' ' <|> char '\t' char ' ' <|> char '\t'
content <- manyTill inlineElement (try lineEnding') content <- many $ notFollowedBy lineEnding' *> inlineElement
lineEnding'
-- continuations <- many listContinuation -- continuations <- many listContinuation
children <- many (try indentedList) children <- many (try indentedList)
pure $ LI content children pure $ LI content children
@ -202,24 +204,25 @@ indentedOrderedList = do
indentedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m () -> ParserTG s m ListItem indentedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m () -> ParserTG s m ListItem
indentedListItem marker = do indentedListItem marker = do
marker marker
content <- manyTill inlineElement (try $ lineEnding <|> eof) content <- many $ notFollowedBy lineEnding' *> inlineElement
pure $ LI content [] pure $ LI content []
-- Ordered List Block -- Ordered List Block
orderedListBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element orderedListBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element
orderedListBlock = do orderedListBlock = do
items <- some orderedListItem items <- some orderedListItem
lineEnding'
pure $ List $ L Ordered items pure $ List $ L Ordered items
orderedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m ListItem orderedListItem :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m ListItem
orderedListItem = do orderedListItem = do
some digit some digit
char '.' char '.' <|> char ')'
char ' ' <|> char '\t' optional (char ' ' <|> char '\t')
content <- manyTill inlineElement (try lineEnding) content <- many $ notFollowedBy lineEnding' *> inlineElement
continuations <- many listContinuation -- continuations <- many listContinuation
children <- many (try indentedList) children <- many (try indentedList)
pure $ LI (content ++ concat continuations) children pure $ LI content children
-- HTML Block -- HTML Block
htmlBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element htmlBlock :: (Logger m, Token s ~ Char, Stream s, IsString (Tokens s)) => ParserTG s m Element
@ -343,7 +346,7 @@ plainTextNo' :: (HasCallStack, Logger m, Token s ~ Char, Stream s, IsString (Tok
plainTextNo' block_whitespace disallow = do plainTextNo' block_whitespace disallow = do
logDebug $ "base plain Text: " <> T.show block_whitespace <> " " <> T.show disallow logDebug $ "base plain Text: " <> T.show block_whitespace <> " " <> T.show disallow
firstChar <- noneOf (disallow <> if block_whitespace then " \t\r\n" else []) <?> "Plain Text Initial Disallow" firstChar <- noneOf (disallow <> if block_whitespace then " \t\r\n" else []) <?> "Plain Text Initial Disallow"
remChars <- many $ notFollowedBy lineEnding *> plainTextCharNo disallow remChars <- many $ notFollowedBy lineEnding' *> plainTextCharNo disallow
pure $ Text $ T.map wspHandler $ T.pack $ firstChar : remChars pure $ Text $ T.map wspHandler $ T.pack $ firstChar : remChars
where where
wspHandler '\n' = ' ' wspHandler '\n' = ' '