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{})