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}