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}