def scan_name
cli@0.2.0.0 · cli.bend:1260
import cli@0.2.0.0/cli.bend as Cli
import Base
1260def scan_name(s: String, +pos: Nat, rev: String,
1261 +first: Bool, dot_start: Nat) -> NameScan:
1262 match s:
1263 case SNil{}:
1264 finish_name(rev, SNil{}, pos, first, dot_start)
1265 case SCon{Chr{32}, tail}:
1266 finish_name(rev, SCon{Char.from_u32(32), tail}, pos, first, dot_start)
1267 case SCon{Chr{91}, tail}:
1268 finish_name(rev, SCon{Char.from_u32(91), tail}, pos, first, dot_start)
1269 case SCon{+h, tail}:
1270 valid = Bool.pick(Bool, first, name_start(h), name_char(h))
1271 next_dot = Bool.pick(Nat, Char.is_eq(h, '.'), dot_start, Nat.add(pos, 1n))
1272 Bool.pick(NameScan, valid,
1273 scan_name(tail, Nat.add(pos, 1n), SCon{h, rev}, False{}, next_dot),
1274 NameBad{pos})