code wiki / _hdl_build / nx_cdata_gate.nx
nx_cdata_gate.nx source
↩ module page · 83 lines · 4871 B
1// nx_cdata_gate.nx -- VERDICT gate for <style><![CDATA[ ... ]]></style> handling (XHTML stylesheets).
2// A reftest: the SAME CSS wrapped in a CDATA section must render IDENTICALLY to the un-wrapped CSS (the
3// markers are stripped, not treated as CSS). TEST = CDATA-wrapped green 100px square; REF = plain green
4// 100px square -> diff==0. Teeth: (a) the REF must actually paint substantial green (so diff==0 can't be
5// "both blank"); (b) LIAR-KILL: the CDATA test vs a RED ref must differ. 100% sovereign. license_tier: ORIGINAL
6import "nx_syscalls.nx"
7import "nx_render_html.nx"
8
9func g_w(s: *u8) -> i64 { var k: i64=0; while s[k]!=(0 as u8){k=k+1} sys_write(1,s,k); return 0 }
10func pn(v0: i64) -> i64 { var v: i64=v0; if v<0 { let m: *u8=sys_mmap(8); m[0]=45 as u8; sys_write(1,m,1); v=0-v } let b: *u8=sys_mmap(24); var k: i64=0; if v==0 {b[0]=48;k=1} while v>0 {b[k]=(48+(v%10)) as u8; v=v/10; k=k+1} let o: *u8=sys_mmap(24); var j: i64=0; while j<k {o[j]=b[k-1-j];j=j+1} sys_write(1,o,k); return 0 }
11func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
12func u32le(d: *u8, p: i64) -> i64 { return (d[p]&0xff) + ((d[p+1]&0xff)<<8) + ((d[p+2]&0xff)<<16) + ((d[p+3]&0xff)<<24) }
13func bmp_diff(a: *u8, b: *u8) -> i64 {
14 let wa: i64=u32le(a,18); let ha: i64=u32le(a,22); let oa: i64=u32le(a,10)
15 let wb: i64=u32le(b,18); let hb: i64=u32le(b,22); let ob: i64=u32le(b,10)
16 if wa != wb { return 999999 }
17 if ha != hb { return 999999 }
18 let row3: i64 = wa*3
19 let pad: i64 = (4-(row3%4))%4
20 let rs: i64 = row3+pad
21 var diff: i64 = 0
22 var y: i64 = 0
23 while y < ha { var x: i64 = 0
24 while x < wa { let pa: i64 = oa+y*rs+x*3; let pb: i64 = ob+y*rs+x*3
25 var d: i64 = 0
26 if (a[pa]&0xff)!=(b[pb]&0xff){d=1}
27 if (a[pa+1]&0xff)!=(b[pb+1]&0xff){d=1}
28 if (a[pa+2]&0xff)!=(b[pb+2]&0xff){d=1}
29 if d==1 { diff=diff+1 }
30 x=x+1 }
31 y=y+1 }
32 return diff
33}
34// count GREEN-ish pixels (g high, r/b low) in a BMP buffer
35func green_px(a: *u8) -> i64 {
36 let w: i64=u32le(a,18); let h: i64=u32le(a,22); let o: i64=u32le(a,10)
37 let row3: i64 = w*3; let pad: i64=(4-(row3%4))%4; let rs: i64=row3+pad
38 var n: i64 = 0; var y: i64 = 0
39 while y < h { var x: i64=0
40 while x < w { let p: i64=o+y*rs+x*3
41 // BMP is BGR: byte0=B, byte1=G, byte2=R
42 if (a[p+1]&0xff) > 100 { if (a[p]&0xff) < 100 { if (a[p+2]&0xff) < 100 { n=n+1 } } }
43 x=x+1 }
44 y=y+1 }
45 return n
46}
47func render(html: *u8, outp: *u8) -> *u8 {
48 nx_render_html_to_bmp(html, slen(html), outp)
49 let lp: *i64 = sys_mmap(8) as *i64
50 let a: *u8 = sys_read_file(outp, lp)
51 if lp[0] < 54 { return 0 as *u8 }
52 return a
53}
54func chk(cond: i64, label: *u8, pass: *i64) -> i64 { g_w(" " as *u8); g_w(label); g_w(": " as *u8); if cond==1 { g_w("OK\n" as *u8); pass[0]=pass[0]+1 } else { g_w("FAIL\n" as *u8) } return 0 }
55
56func main() -> i64 {
57 let pass: *i64 = sys_mmap(8) as *i64; pass[0]=0
58 g_w("=== CDATA GATE (<style><![CDATA[...]]> stripped == plain CSS) ===\n" as *u8)
59 let cdata: *u8 = "<body><style><![CDATA[div{background-color:green;height:100px;width:100px}]]></style><div></div></body>\x00" as *u8
60 let plain: *u8 = "<body><style>div{background-color:green;height:100px;width:100px}</style><div></div></body>\x00" as *u8
61 let red: *u8 = "<body><style>div{background-color:red;height:100px;width:100px}</style><div></div></body>\x00" as *u8
62
63 let ac: *u8 = render(cdata, "knowledge/status/cdata_c.bmp\x00" as *u8)
64 let ap: *u8 = render(plain, "knowledge/status/cdata_p.bmp\x00" as *u8)
65 let ar: *u8 = render(red, "knowledge/status/cdata_r.bmp\x00" as *u8)
66 if ac == (0 as *u8) { g_w("render FAIL\n" as *u8); sys_exit(1); return 1 }
67 if ap == (0 as *u8) { g_w("render FAIL\n" as *u8); sys_exit(1); return 1 }
68 if ar == (0 as *u8) { g_w("render FAIL\n" as *u8); sys_exit(1); return 1 }
69
70 let dmatch: i64 = bmp_diff(ac, ap)
71 let gp: i64 = green_px(ap)
72 let gc: i64 = green_px(ac)
73 let dliar: i64 = bmp_diff(ac, ar)
74 g_w("CDATA-vs-plain diff=" as *u8); pn(dmatch); g_w(" plain green_px=" as *u8); pn(gp); g_w(" cdata green_px=" as *u8); pn(gc); g_w(" CDATA-vs-red diff=" as *u8); pn(dliar); g_w("\n" as *u8)
75 chk((dmatch == 0) as i64, "CDATA-wrapped renders IDENTICAL to plain CSS\x00" as *u8, pass)
76 chk((gp > 5000) as i64, "plain ref paints a real green square (not blank)\x00" as *u8, pass)
77 chk((gc > 5000) as i64, "CDATA test ALSO paints the green square (CSS applied)\x00" as *u8, pass)
78 chk((dliar > 1000) as i64, "LIAR-KILL: CDATA(green) vs red ref DIFFER\x00" as *u8, pass)
79
80 g_w("CDATA rows=4 pass=" as *u8); pn(pass[0])
81 if pass[0]==4 { g_w(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 }
82 g_w(" verdict=RED\n" as *u8); sys_exit(1); return 1
83}