code wiki / _hdl_build / nx_inline_vec_measure_gate.nx

nx_inline_vec_measure_gate.nx source

↩ module page · 102 lines · 5258 B

1// nx_inline_vec_measure_gate.nx -- PROOF (re-runnable) of the S21 F3 root fix: when the renderer paints 2// with the proportional VECTOR font, layout must reserve the SAME widths (font_adv_em sums), not the wider 3// bitmap widths -- the drift put visible gaps around every styled inline span/link (Wikipedia links, the 4// /experiential intro labels). T1/T2 prove exactness in both modes; T3 proves inline CONTIGUITY (the next 5// run starts where the previous ended -- the gap is structurally gone); T4 is the can-fail control (vec 6// widths genuinely differ from bitmap for this text, so T1 isn't vacuous). license_tier: ORIGINAL 7// expect_exit: 0 8import "nx_syscalls.nx" 9import "nx_browser_render.nx" 10 11func gv_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 12func gv_n(v: i64) -> i64 { let t: *u8=sys_mmap(24); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} let b: *u8=sys_mmap(24); var j: i64=0; while j<k{b[j]=t[k-1-j];j=j+1} sys_write(1,b,k); return 0 } 13func gv_slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 14 15func gv_box(t: *LayoutTree, i: i64) -> *LayoutBox { 16 return (t.boxes as *u8 + (i as nx_size) * (NX_LAYOUT_BOX_BYTES as nx_size)) as *LayoutBox 17} 18func gv_has(src: *u8, off: i64, len: i64, m: *u8) -> i64 { 19 let ml: i64 = gv_slen(m) 20 if ml == 0 { return 0 } 21 var i: i64 = 0 22 while i + ml <= len { 23 var k: i64 = 0 24 var ok: i64 = 1 25 while k < ml { if (src[off+i+k]&0xff) != (m[k]&0xff) { ok = 0; k = ml } else { k = k + 1 } } 26 if ok == 1 { return 1 } 27 i = i + 1 28 } 29 return 0 30} 31// layout the fixture; find the text box containing `marker`; return ptr (0 if absent) 32func gv_find(page: *Page, marker: *u8) -> *LayoutBox { 33 let t: *LayoutTree = page.tree 34 var i: i64 = 0 35 while i < t.count { 36 let b: *LayoutBox = gv_box(t, i) 37 if b.text_len > 0 { if gv_has(page.buf, b.text_off, b.text_len, marker) == 1 { return b } } 38 i = i + 1 39 } 40 return 0 as *LayoutBox 41} 42func gv_layout(html: *u8, vec: i64) -> *Page { 43 let page: *Page = sys_mmap(NX_PAGE_BYTES) as *Page 44 page.raw = html 45 page.raw_len = gv_slen(html) 46 page.dark_mode = 0 47 nx_layout_set_vec_measure(vec) 48 br_layout(page, 1024) 49 return page 50} 51 52func main() -> i64 { 53 gv_w("=== nx_inline_vec_measure_gate -- layout reserves what the vector paint draws (S21 F3) ===\n" as *u8) 54 var fails: i64 = 0 55 // one line, three runs: "alpha " <b>beta</b> " gamma" -- the <b> span is the styled inline 56 let html: *u8 = "<html><body><p>alpha <b>beta</b> gamma</p></body></html>\x00" as *u8 57 58 // T1: vec mode -- the "beta" box width == the exact font_adv_em sum at the inherited fs (16) 59 let pv: *Page = gv_layout(html, 1) 60 let bv: *LayoutBox = gv_find(pv, "beta\x00" as *u8) 61 var want: i64 = 0 62 let bs: *u8 = "beta\x00" as *u8 63 var i: i64 = 0 64 while bs[i] != (0 as u8) { want = want + (font_adv_em((bs[i] as i64) & 255) * 16) / 1000; i = i + 1 } 65 gv_w(" T1 vec-measure beta w=" as *u8) 66 if (bv as i64) != 0 { gv_n(bv.w) } else { gv_w("(missing)" as *u8) } 67 gv_w(" want=" as *u8); gv_n(want) 68 var t1: i64 = 0 69 if (bv as i64) != 0 { if bv.w == want { t1 = 1 } } 70 if t1 == 1 { gv_w(" PASS (exact vector sum)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) } 71 72 // T2: bitmap mode (default OFF) -- width == font8x8 measured width x scale (byte-unchanged legacy) 73 let pb: *Page = gv_layout(html, 0) 74 let bb: *LayoutBox = gv_find(pb, "beta\x00" as *u8) 75 let ftab: *u8 = font8x8_table() 76 let wantb: i64 = font8x8_text_w(ftab, bs, 0, 4) * 1 77 gv_w(" T2 bitmap-measure beta w=" as *u8) 78 if (bb as i64) != 0 { gv_n(bb.w) } else { gv_w("(missing)" as *u8) } 79 gv_w(" want=" as *u8); gv_n(wantb) 80 var t2: i64 = 0 81 if (bb as i64) != 0 { if bb.w == wantb { t2 = 1 } } 82 if t2 == 1 { gv_w(" PASS (legacy bitmap unchanged when OFF)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) } 83 84 // T3: CONTIGUITY in vec mode -- " gamma" starts exactly at beta.x + beta.w (no phantom gap) 85 let gv2: *LayoutBox = gv_find(pv, "gamma\x00" as *u8) 86 gv_w(" T3 contiguity: beta.x+w=" as *u8) 87 var t3: i64 = 0 88 if (bv as i64) != 0 { if (gv2 as i64) != 0 { 89 gv_n(bv.x + bv.w); gv_w(" gamma.x=" as *u8); gv_n(gv2.x) 90 if gv2.x == bv.x + bv.w { t3 = 1 } 91 } } 92 if t3 == 1 { gv_w(" PASS (next run starts where the last ended -- gap structurally dead)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL\n" as *u8) } 93 94 // T4 CAN-FAIL control: vec and bitmap widths genuinely DIFFER for this run (else T1 proves nothing) 95 gv_w(" T4 modes differ: vec=" as *u8); gv_n(want); gv_w(" bitmap=" as *u8); gv_n(wantb) 96 if want != wantb { gv_w(" PASS (the fix is load-bearing)\n" as *u8) } else { fails=fails+1; gv_w(" FAIL (vacuous)\n" as *u8) } 97 98 nx_layout_set_vec_measure(0) 99 if fails == 0 { gv_w("NX-INLINE-VEC-MEASURE GREEN -- measure==paint for vector inline runs; legacy intact\n" as *u8); sys_exit(0); return 0 } 100 gv_w("NX-INLINE-VEC-MEASURE RED fails=" as *u8); gv_n(fails); gv_w("\n" as *u8) 101 sys_exit(1); return 1 102}