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 } }