aboutsummaryrefslogtreecommitdiff
path: root/Sources/NorgKit/Parsers/BlockScanner.swift
blob: 7552255f5bd9ab7a7742c3301c12d4acd8669fc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// Shared block-level lexical primitives.
enum BlockScanner {

  static let blockMarkers = ASCIIByteSet("*-~>")
  static let rangeableMarkers = ASCIIByteSet("$^:")

  enum Delimiter {
    case weak, strong, rule
  }

  static func delimiter(_ s: Substring) -> Delimiter? {
    guard s.count >= 2, let first = s.first, "-=_".contains(first),
      s.allSatisfy({ $0 == first })
    else { return nil }
    switch first {
    case "-": return .weak
    case "=": return .strong
    default: return .rule
    }
  }
}