def ttf.coverage.array

gralha-truetype@0.1.0.1 · font.bend:573

import gralha-truetype@0.1.0.1/font.bend as Font
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-bytes@0.1.0.1/bytes.bend as Bin

573# Coverage index plus one (0 when absent), by binary search over sorted glyphs or ranges.
574def ttf.coverage.array(+b: Bin.Bytes, fuel: Nat, +base: U32, +lo: U32, +hi: U32, +gid: U32) -> U32:
575  match fuel:
576    case 0n: 0
577    case 1n+d:
578      +dd = d
579      +mid = U32.div((lo + hi : U32), 2)
580      +g = ttf.u16(b, (base + mid * 2 : U32))
581      U.branch(U32, U32.is_ge(lo, hi), _ => 0,
582        _ => U.branch(U32, U32.is_eq(g, gid), _ => (mid + 1 : U32),
583          _ => U.branch(U32, U32.is_lt(g, gid), _ => ttf.coverage.array(b, dd, base, (mid + 1 : U32), hi, gid), _ => ttf.coverage.array(b, dd, base, lo, mid, gid))))

Uses (11)

Used by (1)