aboutsummaryrefslogtreecommitdiff
path: root/Sources/NorgUI/Helpers/Ordinals.swift
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
  }
}