code wiki / _hdl_build / nx_flexgrow_probe.nx

nx_flexgrow_probe.nx source

↩ module page · 94 lines · 5471 B

1// nx_flexgrow_probe.nx -- DIAGNOSTIC (measure-first): dump every computed declaration (element_idx, 2// property text, value text, val_kind) for the flex-grow 1:2 fixture so we can SEE whether flex-grow 3// reaches `computed` and with what exact bytes. Not a gate -- a probe. 100% sovereign. 4import "nx_syscalls.nx" 5import "nx_css_tokenize.nx" 6import "nx_css_parse.nx" 7import "nx_css_apply.nx" 8import "nx_css_color_decode.nx" 9import "nx_css_dimension_to_px.nx" 10import "nx_css_selector_match.nx" 11import "nx_html_tokenizer.nx" 12import "nx_dom_query.nx" 13import "nx_layout_box.nx" 14import "nx_layout_default_display.nx" 15import "nx_layout_from_dom.nx" 16import "nx_layout_block.nx" 17import "nx_render_html.nx" 18const K_MAGIC_1024: i64 = 1024 19const K_MAGIC_4096: i64 = 4096 20 21func 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 } 22func 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 } 23// print src[off..off+len] 24func pspan(src: *u8, off: i64, len: i64) -> i64 { var i: i64=0; while i<len { sys_write(1, (src as *u8 + (off+i) as nx_size), 1); i=i+1 } return 0 } 25 26func main() -> i64 { 27 let html: *u8 = "<div id=\"c\"><div class=\"a\"></div><div class=\"b\"></div></div>\x00" as *u8 28 let css: *u8 = "#c{display:flex}.a{flex-grow:1}.b{flex-grow:2}\x00" as *u8 29 var hlen: i64 = 0 30 while html[hlen]!=(0 as u8) { hlen=hlen+1 } 31 var clen: i64 = 0 32 while css[clen]!=(0 as u8) { clen=clen+1 } 33 let total: i64 = hlen + clen 34 let buf: *u8 = sys_mmap(total + 16) 35 var i: i64 = 0 36 while i < hlen { buf[i]=html[i]; i=i+1 } 37 var j: i64 = 0 38 while j < clen { buf[hlen+j]=css[j]; j=j+1 } 39 let boxes: *LayoutBox = (sys_mmap(NX_LAYOUT_BOX_BYTES*K_MAGIC_1024+16)) as *LayoutBox 40 let tree: *LayoutTree = (sys_mmap(64)) as *LayoutTree 41 nx_layout_tree_init(tree, boxes, K_MAGIC_1024) 42 let stk: *LayoutFromDomStack = (sys_mmap(NX_LAYOUT_FROM_DOM_STACK_BYTES+8)) as *LayoutFromDomStack 43 let sidx: *i64 = (sys_mmap(8*64)) as *i64 44 nx_layout_from_dom_stack_init(stk, sidx, 64) 45 nx_layout_from_dom(buf, hlen, tree, stk) 46 let ext: *CssElement = (sys_mmap(NX_CSS_ELEMENT_BYTES*K_MAGIC_1024 as nx_size)) as *CssElement 47 let n_ext: i64 = rh_extract(buf, hlen, ext, K_MAGIC_1024) 48 let boxel: *CssElement = (sys_mmap((NX_CSS_ELEMENT_BYTES*(tree.count+1)) as nx_size)) as *CssElement 49 var k: i64 = 0 50 i = 0 51 while i < tree.count { 52 let bb: *LayoutBox = ((tree.boxes as i64)+i*NX_LAYOUT_BOX_BYTES) as *LayoutBox 53 let e: *CssElement = ((boxel as i64)+i*NX_CSS_ELEMENT_BYTES) as *CssElement 54 e.src = buf 55 var mapped: i64 = 0 56 if rh_is_elem(bb.kind)==1 { if bb.parent_idx != (0-1) { if k < n_ext { 57 let s: *CssElement = ((ext as i64)+k*NX_CSS_ELEMENT_BYTES) as *CssElement 58 e.tag_off=s.tag_off; e.tag_len=s.tag_len; e.id_off=s.id_off; e.id_len=s.id_len; e.class_off=s.class_off; e.class_len=s.class_len 59 k=k+1; mapped=1 60 } } } 61 if mapped==0 { e.tag_off=0; e.tag_len=0; e.id_off=0; e.id_len=0; e.class_off=0; e.class_len=0 } 62 i=i+1 63 } 64 // print element class for each box index 65 g_w("--- boxes (idx: kind class) ---\n" as *u8) 66 i = 0 67 while i < tree.count { 68 let bb: *LayoutBox = ((tree.boxes as i64)+i*NX_LAYOUT_BOX_BYTES) as *LayoutBox 69 let e: *CssElement = ((boxel as i64)+i*NX_CSS_ELEMENT_BYTES) as *CssElement 70 g_w("box " as *u8); pn(i); g_w(" kind=" as *u8); pn(bb.kind); g_w(" class=[" as *u8); pspan(buf, e.class_off, e.class_len); g_w("] id=[" as *u8); pspan(buf, e.id_off, e.id_len); g_w("]\n" as *u8) 71 i = i + 1 72 } 73 let cur: *CssCursor = (sys_mmap(NX_CSS_CURSOR_BYTES) as nx_size) as *CssCursor 74 nx_css_cursor_init(cur, buf, total); cur.pos = hlen 75 let tok: *CssToken = (sys_mmap(NX_CSS_TOKEN_BYTES) as nx_size) as *CssToken 76 let rules: *CssRule = (sys_mmap(NX_CSS_RULE_BYTES*512 as nx_size)) as *CssRule 77 let decls: *CssDeclaration = (sys_mmap(NX_CSS_DECLARATION_BYTES*512 as nx_size)) as *CssDeclaration 78 let st: *CssParseState = (sys_mmap(128) as nx_size) as *CssParseState 79 nx_css_parse_state_init(st, cur, tok, rules, 512, decls, 512) 80 nx_css_parse(st) 81 g_w("--- parse: rule_count=" as *u8); pn(st.rule_count); g_w(" decl_count=" as *u8); pn(st.decl_count); g_w(" ---\n" as *u8) 82 let computed: *CssComputedDecl = (sys_mmap(NX_CSS_COMPUTED_DECL_BYTES*K_MAGIC_4096 as nx_size)) as *CssComputedDecl 83 let cb: *i64 = (sys_mmap(8)) as *i64 84 rh_cascade(buf, rules, st.rule_count, decls, st.decl_count, boxel, tree.count, tree, computed, K_MAGIC_4096, cb) 85 let ncomp: i64 = cb[0] 86 g_w("--- computed decls: ncomp=" as *u8); pn(ncomp); g_w(" ---\n" as *u8) 87 i = 0 88 while i < ncomp { 89 let cd: *CssComputedDecl = (computed as *u8 + (i as nx_size) * (NX_CSS_COMPUTED_DECL_BYTES as nx_size)) as *CssComputedDecl 90 g_w(" elem=" as *u8); pn(cd.element_idx); g_w(" prop[" as *u8); pn(cd.prop_len); g_w("]=" as *u8); pspan(buf, cd.prop_off, cd.prop_len); g_w(" val[" as *u8); pn(cd.val_len); g_w("]=" as *u8); pspan(buf, cd.val_off, cd.val_len); g_w(" kind=" as *u8); pn(cd.val_kind); g_w("\n" as *u8) 91 i = i + 1 92 } 93 return 0 94}