code wiki / _hdl_build / nx_font_cyrillic_ext8.nx

nx_font_cyrillic_ext8.nx source

↩ module page · 27 lines · 1467 B

1// nx_font_cyrillic_ext8.nx -- extended Cyrillic glyphs OUTSIDE the Russian А..Я block, for Belarusian and 2// Ukrainian: І(U+0406) Ў(U+040E) Є(U+0404) Ї(U+0407) Ґ(U+0490). 8x8, uppercase (lowercase counterparts folded 3// here). So a Belarusian reads "вітаю / любоў" and a Ukrainian "привіт" with their OWN letters. Returns an 4// 8-byte glyph or 0 (unsupported). license_tier: ORIGINAL 5import "nx_syscalls.nx" 6 7func ce_mk(b0: i64, b1: i64, b2: i64, b3: i64, b4: i64, b5: i64, b6: i64, b7: i64) -> *u8 { 8 let g: *u8 = sys_mmap(8) 9 g[0]=b0 as u8; g[1]=b1 as u8; g[2]=b2 as u8; g[3]=b3 as u8 10 g[4]=b4 as u8; g[5]=b5 as u8; g[6]=b6 as u8; g[7]=b7 as u8 11 return g 12} 13 14func cyr_ext_glyph(cp: i64) -> *u8 { 15 var u: i64 = cp 16 if u == 0x456 { u = 0x406 } // і -> І 17 if u == 0x45E { u = 0x40E } // ў -> Ў 18 if u == 0x454 { u = 0x404 } // є -> Є 19 if u == 0x457 { u = 0x407 } // ї -> Ї 20 if u == 0x491 { u = 0x490 } // ґ -> Ґ 21 if u == 0x406 { return ce_mk(0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00) } // І 22 if u == 0x40E { return ce_mk(0x12,0x0C,0x33,0x33,0x1E,0x0C,0x0C,0x1E) } // Ў (breve + У) 23 if u == 0x404 { return ce_mk(0x1E,0x21,0x01,0x0F,0x01,0x21,0x1E,0x00) } // Є 24 if u == 0x407 { return ce_mk(0x12,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00) } // Ї (І + diaeresis) 25 if u == 0x490 { return ce_mk(0x3F,0x21,0x01,0x01,0x01,0x01,0x01,0x00) } // Ґ (Г + hook) 26 return 0 as *u8 27}