def utf.lead

bend-kit-router@0.2.0.0 · target.bend:16

import bend-kit-router@0.2.0.0/target.bend as Target
import Base

16def utf.lead(+c: U32, out: String, ascii: Bool) -> Maybe<&2, Utf>:
17  match ascii:
18    case True{}:
19      Some{Utf{0, 128, 191, 0, SCon{Chr{c}, out}}}
20    case False{}:
21      +valid = between(c, 194, 244)
22      +need = Bool.pick(U32, U32.is_lt(c, 224), 1, Bool.pick(U32, U32.is_lt(c, 240), 2, 3))
23      +lo = Bool.pick(U32, U32.is_eq(c, 224), 160, Bool.pick(U32, U32.is_eq(c, 240), 144, 128))
24      +hi = Bool.pick(U32, U32.is_eq(c, 237), 159, Bool.pick(U32, U32.is_eq(c, 244), 143, 191))
25      mask = Bool.pick(U32, U32.is_eq(need, 1), 31, Bool.pick(U32, U32.is_eq(need, 2), 15, 7))
26      Bool.pick(Maybe<&2, Utf>, valid, Some{Utf{need, lo, hi, (c .&. mask : U32), out}}, None{})

Uses (11)

Used by (1)