blob: 649c3e067b8e972dae29a751d28e357cfcd36672 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
}
}
|