From 657aa83a5ca24dc35572c040df64a0abb85e8612 Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Mon, 15 Jun 2026 14:35:36 +0200 Subject: Initial extraction from Norganize --- Sources/NorgUI/Helpers/Ordinals.swift | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Sources/NorgUI/Helpers/Ordinals.swift (limited to 'Sources/NorgUI/Helpers/Ordinals.swift') diff --git a/Sources/NorgUI/Helpers/Ordinals.swift b/Sources/NorgUI/Helpers/Ordinals.swift new file mode 100644 index 0000000..649c3e0 --- /dev/null +++ b/Sources/NorgUI/Helpers/Ordinals.swift @@ -0,0 +1,32 @@ +import NorgKit + +/// Assigns sequential numbers to ordered list items. +func orderedOrdinals(_ blocks: [NorgBlock]) -> [Int?] { + var counters: [Int: Int] = [:] + return blocks.map { block in + switch block { + case .orderedListItem(let level, _, _, _): + counters = counters.filter { $0.key <= level } + counters[level, default: 0] += 1 + return counters[level] + case .unorderedListItem(let level, _, _, _): + counters = counters.filter { $0.key < level } + return nil + default: + counters.removeAll() + return nil + } + } +} + +/// Numbers the ordered list items within a single tree branch. +func ordinals(forSiblings nodes: [NorgNode]) -> [Int?] { + var counter = 0 + return nodes.map { node in + if case .orderedListItem = node.block { + counter += 1 + return counter + } + return nil + } +} -- cgit