code wiki / (root) / nx_domtree.nx

nx_domtree.nx

buildroot/runtime/nx_domtree.nx

35765 B840 linesdepth 2pulls 3 transitivereach 145 importersview sourcekind library
docsdependenciesstructsconstsfunctions

about

nx_domtree.nx -- a MATERIALIZED, MUTABLE DOM tree for the sovereign browser. The JS engine's existing DOM is a READ-ONLY byte snapshot (nx_js_eval: genv[2]=html ptr, queries re-scan the bytes). To RENDER JS-built content, page scripts must MUTATE the DOM and have the result laid out. This organ is that missing piece: parse HTML -> a node arena (REUSING nx_html_tokenizer, no duplicate parser), MUTATE it (createElement/appendChild/textContent=/ setAttribute), and SERIALIZE it back to HTML for nx_layout. Rung A of general JS rendering. module: nx_domtree capability: mutable-dom Sovereign: imports only nx_syscalls + the gated nx_html_tokenizer. No gcc/V8/libxml. ORIGINAL.

dependencies 2 imports · 4 importers

nx_syscalls.nx nx_html_tokenizer.nx nx_domtree.nx nx_domtree_gate.nx nx_dtparse_bench.nx nx_dtroundtrip_bench.nx nx_js_eval.nx

imports: nx_syscalls.nxnx_html_tokenizer.nx

imported by: nx_domtree_gate.nxnx_dtparse_bench.nxnx_dtroundtrip_bench.nxnx_js_eval.nx

structs

23struct DomNode
37struct DtAttr
41struct DomTree

consts

12const DT_MAGIC_4096: i64 = 4096
13const DT_MAGIC_65536: i64 = 65536
15const DT_ELEM: i64 = 1
16const DT_TEXT: i64 = 2
17const DT_DOC: i64 = 3
18const DT_NODE_BYTES: i64 = 96 // 12 i64 fields
19const DT_ATTR_BYTES: i64 = 16 // 2 i64 fields
20const DT_ATTR_CAP: i64 = 32 // max attrs per element (rung-A bound)
21const DT_MAX_NODES: i64 = 131072 // node arena capacity (mmap lazy zero-fill)

functions

49func dt_clen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
51func dt_ceq(a: *u8, b: *u8) -> i64
63func dt_dup(src: *u8, off: i64, len: i64) -> i64
73func dt_dup_lower(src: *u8, off: i64, len: i64) -> i64
87func dt_dup_c(s: *u8) -> i64 { return dt_dup(s, 0, dt_clen(s)) }
calls 2: dt_dupdt_clen
88func dt_dup_lower_c(s: *u8) -> i64 { return dt_dup_lower(s, 0, dt_clen(s)) }
called by 1: dt_get_attr calls 2: dt_dup_lowerdt_clen
91func dt_node(t: *DomTree, idx: i64) -> *DomNode
94func dt_alloc(t: *DomTree, kind: i64) -> i64
112func dt_new() -> *DomTree
called by 1: dt_parse calls 2: sys_mmapdt_alloc
122func dt_is_void(tag: *u8) -> i64
called by 1: dt_create_element_span calls 1: dt_ceq
140func dt_create_element_span(t: *DomTree, src: *u8, off: i64, len: i64) -> i64
147func dt_create_element(t: *DomTree, tagc: *u8) -> i64
called by 1: main calls 2: dt_create_element_spandt_clen
150func dt_create_text(t: *DomTree, src: *u8, off: i64, len: i64) -> i64
160func dt_append_child(t: *DomTree, parent: i64, child: i64) -> i64
177func dt_remove_child(t: *DomTree, parent: i64, child: i64) -> i64
calls 1: dt_node
206func dt_clone_subtree(t: *DomTree, src: i64) -> i64
243func dt_attr_at(base: *DtAttr, i: i64) -> *DtAttr
247func dt_set_attr_span(t: *DomTree, node: i64, nsrc: *u8, noff: i64, nlen: i64, vsrc: *u8, voff: i64, vlen: i64) -> i64
271func dt_set_attr(t: *DomTree, node: i64, namec: *u8, valc: *u8) -> i64
275func dt_get_attr(t: *DomTree, node: i64, namec: *u8) -> *u8
290func dt_set_text_content(t: *DomTree, node: i64, src: *u8, off: i64, len: i64) -> i64
304func dt_gebi_rec(t: *DomTree, idx: i64, idc: *u8) -> i64
320func dt_get_element_by_id(t: *DomTree, idc: *u8) -> i64 { return dt_gebi_rec(t, t.root, idc) }
called by 1: main calls 1: dt_gebi_rec
322func dt_fbt_rec(t: *DomTree, idx: i64, tagc: *u8) -> i64
335func dt_first_by_tag(t: *DomTree, tagc: *u8) -> i64 { return dt_fbt_rec(t, t.root, tagc) }
called by 1: main calls 1: dt_fbt_rec
338func dt_has_class(t: *DomTree, node: i64, cls: *u8) -> i64
359func dt_sel_match(t: *DomTree, node: i64, mode: i64, name: *u8) -> i64
371func dt_cstr_contains(hay: *u8, needle: *u8) -> i64
called by 1: dt_attr_op calls 1: dt_clen
383func dt_cstr_prefix(hay: *u8, needle: *u8) -> i64
called by 1: dt_attr_op calls 1: dt_clen
390func dt_cstr_suffix(hay: *u8, needle: *u8) -> i64
called by 1: dt_attr_op calls 1: dt_clen
398func dt_attr_op(val: *u8, op: i64, want: *u8) -> i64
419func dt_sel_compound(t: *DomTree, node: i64, sel: *u8, a: i64, b: i64, scope_root: i64) -> i64
497func dt_sel_complex(t: *DomTree, node: i64, sel: *u8, a0: i64, b0: i64, scope_root: i64) -> i64
532func dt_sel_matches(t: *DomTree, node: i64, sel: *u8, slen: i64, scope_root: i64) -> i64
549func dt_sel_query_rec(t: *DomTree, idx: i64, sel: *u8, slen: i64, arr: *i64, cnt: *i64, cap: i64, scope_root: i64) -> i64
559func dt_sel_query(t: *DomTree, root: i64, sel: *u8, slen: i64, arr: *i64, cap: i64) -> i64
567func dt_query_one_rec(t: *DomTree, idx: i64, mode: i64, name: *u8) -> i64
580func dt_query_one(t: *DomTree, mode: i64, name: *u8) -> i64 { return dt_query_one_rec(t, t.root, mode, name) }
581func dt_query_all_rec(t: *DomTree, idx: i64, mode: i64, name: *u8, arr: *i64, cnt: *i64, cap: i64) -> i64
593func dt_query_all(t: *DomTree, mode: i64, name: *u8, arr: *i64, cap: i64) -> i64
601func dt_tc_rec(t: *DomTree, idx: i64, out: *u8, cap: i64, posp: *i64) -> i64
618func dt_text_content(t: *DomTree, node: i64, out: *u8, cap: i64) -> i64
called by 1: main calls 2: sys_mmapdt_tc_rec
626func dt_is_name(b: i64) -> i64
called by 1: dt_parse_attrs
635func dt_is_ws(b: i64) -> i64
called by 1: dt_parse_attrs
643func dt_parse_attrs(t: *DomTree, node: i64, src: *u8, soff: i64, slen: i64) -> i64
676func dt_find_ci(buf: *u8, from: i64, hlen: i64, needle: *u8, nlen: i64) -> i64
called by 1: dt_parse_into
695func dt_is_rawtext(tag: *u8) -> i64
called by 1: dt_parse_into calls 1: dt_ceq
700func dt_rawclose(tag: *u8) -> *u8
called by 1: dt_parse_into calls 1: dt_ceq
705func dt_parse_into(t: *DomTree, start: i64, html: *u8, hlen: i64) -> i64
767func dt_parse(html: *u8, hlen: i64) -> *DomTree
773func dt_set_inner_html(t: *DomTree, node: i64, html: *u8, hlen: i64) -> i64
called by 1: main calls 2: dt_nodedt_parse_into
782func dt_app(out: *u8, cap: i64, posp: *i64, s: *u8, n: i64) -> i64
called by 2: dt_app_cdt_ser_rec
789func dt_app_c(out: *u8, cap: i64, posp: *i64, c: *u8) -> i64
called by 1: dt_ser_rec calls 2: dt_appdt_clen
793func dt_ser_rec(t: *DomTree, idx: i64, out: *u8, cap: i64, posp: *i64) -> i64
835func dt_serialize(t: *DomTree, out: *u8, cap: i64) -> i64
called by 3: mainmainmain calls 2: sys_mmapdt_ser_rec