code wiki / _hdl_build / nx_js_render_emit.nx

nx_js_render_emit.nx source

↩ module page · 33 lines · 1491 B

1// nx_js_render_emit.nx -- read _offc/nxjs_in.html, run js_render_page (execute the page's inline scripts 2// against a mutable DOM, serialize the mutated tree), and WRITE the result to _offc/nxhtml.html so the 3// existing nx_browser_render_shot can rasterize it. Proves JS-built content reaches the renderer. 4import "nx_syscalls.nx" 5import "nx_js_eval.nx" 6const K_MAGIC_1048576: i64 = 1048576 7 8func jre_pn(v: i64) -> i64 { 9 var m: i64 = v 10 let t: *u8 = sys_mmap(24); var k: i64 = 0 11 if m == 0 { t[0] = 48 as u8; k = 1 } else { while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } } 12 let o: *u8 = sys_mmap(24); var j: i64 = 0 13 while j < k { o[j] = t[k - 1 - j]; j = j + 1 } 14 sys_write(1, o, k); return 0 15} 16 17func main() -> i64 { 18 let lp: *i64 = sys_mmap(16) as *i64 19 let html: *u8 = sys_read_file("_offc/nxjs_in.html\x00" as *u8, lp) 20 let hlen: i64 = lp[0] 21 if hlen <= 0 { sys_write(2, "js_render_emit: no _offc/nxjs_in.html\n\x00" as *u8, 38); return 1 } 22 let cap: i64 = hlen + K_MAGIC_1048576 23 let out: *u8 = sys_mmap(cap) 24 let rlen: i64 = js_render_page(html, hlen, out, cap) 25 let fd: i64 = sys_openat_wr("_offc/nxhtml.html\x00" as *u8, 0x1a4) 26 if fd < 0 { sys_write(2, "js_render_emit: open out failed\n\x00" as *u8, 32); return 2 } 27 sys_write(fd, out, rlen) 28 sys_close(fd) 29 sys_write(1, "js_render_emit: wrote _offc/nxhtml.html len=\x00" as *u8, 44) 30 jre_pn(rlen) 31 sys_write(1, "\n\x00" as *u8, 1) 32 return 0 33}