From bcb1459fbe31bcebf4639d15270a092749f1b317 Mon Sep 17 00:00:00 2001 From: "Steve Rich (srich)" Date: Wed, 12 Mar 2025 11:49:35 -0400 Subject: [PATCH] Mixed ordered and unordered list hierarchies should indent consistently MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Input like this (but starting in the first column; using CODE blocks here): - This is a top-level bulleted list - This is second-level bulleted list - Second of the second 1. This is ordered and second-order nested 1. Second entry of same should render like: * This is a top-level bulleted list * This is second-level bulleted list * Second of the second 1. This is ordered and second-order nested 2. Second entry of same (given formatting options "unorderedListMarker: .star", "orderedListNumerals:.incrementing(start: 1)", and "emphasisMarker: .underline"). However, before this change, they rendered like: * This is a top-level bulleted list * This is second-level bulleted list * Second of the second 1. This is ordered and second-order nested 2. Second entry of same in which the prefix is not generated for the ordered list. The dump of the tree is correct, however: Document └─ UnorderedList └─ ListItem ├─ Paragraph │ └─ Text "This is a top-level bulleted list" └─ UnorderedList ├─ ListItem │ └─ Paragraph │ └─ Text "This is second-level bulleted list" └─ ListItem ├─ Paragraph │ └─ Text "Second of the second" └─ OrderedList ├─ ListItem │ └─ Paragraph │ └─ Text "This is ordered and second-order nested" └─ ListItem └─ Paragraph └─ Text "Second entry of same" The AST shows that the OrderedList is a child of the ListItem and not of the UnorderedList. --- Sources/Markdown/Walker/Walkers/MarkupFormatter.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Sources/Markdown/Walker/Walkers/MarkupFormatter.swift b/Sources/Markdown/Walker/Walkers/MarkupFormatter.swift index bee884b3..2ed1f231 100644 --- a/Sources/Markdown/Walker/Walkers/MarkupFormatter.swift +++ b/Sources/Markdown/Walker/Walkers/MarkupFormatter.swift @@ -425,21 +425,20 @@ public struct MarkupFormatter: MarkupWalker { */ func linePrefix(for element: Markup) -> String { var prefix = formattingOptions.customLinePrefix - var unorderedListCount = 0 - var orderedListCount = 0 + var listCount = 0 for element in element.parentalChain { if element is BlockQuote { prefix += "> " } else if element is UnorderedList { - if unorderedListCount > 0 { + if listCount > 0 { prefix += " " } - unorderedListCount += 1 + listCount += 1 } else if element is OrderedList { - if orderedListCount > 0 { + if listCount > 0 { prefix += " " } - orderedListCount += 1 + listCount += 1 } else if !(element is ListItem), let parentListItem = element.parent as? ListItem { /*