code wiki / _hdl_build / nx_multilang_render_gate.nx

nx_multilang_render_gate.nx source

↩ module page · 99 lines · 4488 B

1// nx_multilang_render_gate.nx -- proves native rendering of all four broadened languages, NO fake green: 2// Russian (привет друг), Belarusian (вітаю любоў -> exercises І and Ў), Ukrainian (привіт дякую -> exercises І), 3// Polish (cześć miłość -> exercises ś ć ł, native lowercase diacritics). Each onto its own video frame; asserts 4// each sets glyph pixels. Eyeball -> knowledge/nx_multilang_render.png (4 stacked panels). expect_exit: 0 license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_css_color_decode.nx" 7import "nx_paint_solid_rect.nx" 8import "nx_font8x8.nx" 9import "nx_font_cyrillic8.nx" 10import "nx_font_latinext8.nx" 11import "nx_font_cyrillic_ext8.nx" 12import "nx_utf8.nx" 13import "nx_caption_render_uni.nx" 14import "nx_png_write.nx" 15import "nx_gate_verdict.nx" 16 17func rg(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 18func rgn(v: i64) -> i64 { 19 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 20 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 21 let d: *u8 = sys_mmap(24); var k: i64 = 0 22 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 23 var j: i64 = k - 1 24 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 } 25 return 0 26} 27func slen(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n } 28func mkfb(w: i64, h: i64) -> *Framebuffer { 29 let px: *u8 = sys_mmap(w * h * 4) 30 let fb: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer 31 nx_framebuffer_init(fb, px, w, h); nx_framebuffer_clear(fb) 32 return fb 33} 34 35func main() -> i64 { 36 rg("=== nx_multilang_render_gate: native Russian / Belarusian / Ukrainian / Polish captions ===\n" as *u8) 37 let w: i64 = 320 38 let h: i64 = 64 39 var pass: i64 = 0 40 var fail: i64 = 0 41 let bar: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 42 bar.r=0; bar.g=0; bar.b=0; bar.a=255 43 let fg: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 44 fg.r=255; fg.g=235; fg.b=60; fg.a=255 45 let vid: *CssColor = sys_mmap(NX_CSS_COLOR_BYTES) as *CssColor 46 vid.r=30; vid.g=44; vid.b=64; vid.a=255 47 48 let labels: **u8 = sys_mmap(4 * 8) as **u8 49 let texts: **u8 = sys_mmap(4 * 8) as **u8 50 labels[0]="RU" as *u8; texts[0]="привет друг" as *u8 51 labels[1]="BE" as *u8; texts[1]="вітаю любоў" as *u8 52 labels[2]="UK" as *u8; texts[2]="привіт дякую" as *u8 53 labels[3]="PL" as *u8; texts[3]="cześć miłość" as *u8 54 55 let fbs: *i64 = sys_mmap(4 * 8) as *i64 56 var i: i64 = 0 57 while i < 4 { 58 let fb: *Framebuffer = mkfb(w, h) 59 nx_paint_solid_rect(fb, 0, 0, w, h, vid) 60 let set: i64 = nx_caption_render_uni(fb, texts[i], slen(texts[i]), 2, bar, fg) 61 rg(" ["); rg(labels[i]); rg("] '" as *u8); sys_write(1, texts[i], slen(texts[i])); rg("' -> glyph px = " as *u8); rgn(set); rg("\n" as *u8) 62 if set > 0 { pass=pass+1 } else { fail=fail+1; rg(" RED: no glyphs\n" as *u8) } 63 fbs[i] = fb as i64 64 i = i + 1 65 } 66 67 // eyeball: 4 panels stacked 68 let H4: i64 = h * 4 69 let rgb: *u8 = sys_mmap(w * H4 * 3) 70 var p: i64 = 0 71 while p < 4 { 72 let fb: *Framebuffer = fbs[p] as *Framebuffer 73 var y: i64 = 0 74 while y < h { 75 var x: i64 = 0 76 while x < w { 77 let s: i64 = (y * w + x) * 4 78 let d: i64 = ((p * h + y) * w + x) * 3 79 rgb[d+0]=fb.pixels[s+0]; rgb[d+1]=fb.pixels[s+1]; rgb[d+2]=fb.pixels[s+2] 80 x = x + 1 81 } 82 y = y + 1 83 } 84 p = p + 1 85 } 86 nx_png_write_rgb("knowledge/nx_multilang_render.png" as *u8, rgb, w, H4) 87 rg(" eyeball -> knowledge/nx_multilang_render.png (RU / BE / UK / PL)\n" as *u8) 88 89 rg("MULTILANG-RENDER-GATE pass=" as *u8); rgn(pass); rg(" fail=" as *u8); rgn(fail) 90 // MIGRATED onto nx_gate_verdict by nx_gate_dry_apply (D001, minimal form): every check 91 // row above is untouched, so the PASS/FAIL vector cannot change; only the hand-rolled 92 // verdict emission is replaced by the ONE shared base class. Proven by nx_gate_migrate verify. 93 let ctr__dry: *i64 = gv_ctr() 94 ctr__dry[0] = pass 95 ctr__dry[1] = pass + fail 96 let rc__dry: i64 = gv_verdict("MULTILANG-RENDER-GATE" as *u8, ctr__dry, "all four languages render natively (Cyrillic + Belarusian/Ukrainian extras + Polish diacritics)" as *u8) 97 sys_exit(rc__dry) 98 return rc__dry 99}