diff options
Diffstat (limited to 'Sources/NorgKit/Parsers/BlockScanner.swift')
| -rw-r--r-- | Sources/NorgKit/Parsers/BlockScanner.swift | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Sources/NorgKit/Parsers/BlockScanner.swift b/Sources/NorgKit/Parsers/BlockScanner.swift new file mode 100644 index 0000000..7552255 --- /dev/null +++ b/Sources/NorgKit/Parsers/BlockScanner.swift @@ -0,0 +1,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 + } + } +} |