xref: /DragonOS/kernel/src/libs/font/mod.rs (revision fae6e9ade46a52976ad5d099643d51cc20876448)
1 use self::font_type::vga8x16::FONT_VGA_8X16;
2 
3 pub mod font_type;
4 
5 #[allow(dead_code)]
6 pub struct FontDesc {
7     pub index: usize,
8     pub name: &'static str,
9     pub width: u32,
10     pub height: u32,
11     pub char_count: u32,
12     pub data: &'static [u8],
13 }
14 
15 impl FontDesc {
16     pub fn get_default_font(_xres: u32, _yres: u32, _font_w: u32, _font_h: u32) -> &'static Self {
17         // todo: 目前先直接返回一个字体
18         &FONT_VGA_8X16
19     }
20 
21     pub const DOUBLE_WIDTH_RANGE: &'static [(u32, u32)] = &[
22         (0x1100, 0x115F),
23         (0x2329, 0x232A),
24         (0x2E80, 0x303E),
25         (0x3040, 0xA4CF),
26         (0xAC00, 0xD7A3),
27         (0xF900, 0xFAFF),
28         (0xFE10, 0xFE19),
29         (0xFE30, 0xFE6F),
30         (0xFF00, 0xFF60),
31         (0xFFE0, 0xFFE6),
32         (0x20000, 0x2FFFD),
33         (0x30000, 0x3FFFD),
34     ];
35     pub fn is_double_width(ch: u32) -> bool {
36         if ch < Self::DOUBLE_WIDTH_RANGE.first().unwrap().0
37             || ch > Self::DOUBLE_WIDTH_RANGE.last().unwrap().1
38         {
39             return false;
40         }
41 
42         for (first, last) in Self::DOUBLE_WIDTH_RANGE {
43             if ch > *first && ch < *last {
44                 return true;
45             }
46         }
47 
48         false
49     }
50 }
51