cosmic_text/font/fallback/
unix.rs
1use unicode_script::Script;
4
5use super::Fallback;
6
7#[derive(Debug)]
9pub struct PlatformFallback;
10
11impl Fallback for PlatformFallback {
12 fn common_fallback(&self) -> &'static [&'static str] {
13 common_fallback()
14 }
15
16 fn forbidden_fallback(&self) -> &'static [&'static str] {
17 forbidden_fallback()
18 }
19
20 fn script_fallback(
21 &self,
22 script: unicode_script::Script,
23 locale: &str,
24 ) -> &'static [&'static str] {
25 script_fallback(script, locale)
26 }
27}
28
29fn common_fallback() -> &'static [&'static str] {
31 &[
33 "Noto Sans",
35 "DejaVu Sans",
37 "FreeSans",
38 "Noto Sans Mono",
40 "DejaVu Sans Mono",
41 "FreeMono",
42 "Noto Sans Symbols",
44 "Noto Sans Symbols2",
45 "Noto Color Emoji",
47 ]
49}
50
51fn forbidden_fallback() -> &'static [&'static str] {
53 &[]
54}
55
56fn han_unification(locale: &str) -> &'static [&'static str] {
57 match locale {
58 "ja" => &["Noto Sans CJK JP"],
60 "ko" => &["Noto Sans CJK KR"],
62 "zh-HK" => &["Noto Sans CJK HK"],
64 "zh-TW" => &["Noto Sans CJK TC"],
66 _ => &["Noto Sans CJK SC"],
68 }
69}
70
71fn script_fallback(script: Script, locale: &str) -> &'static [&'static str] {
73 match script {
75 Script::Adlam => &["Noto Sans Adlam", "Noto Sans Adlam Unjoined"],
76 Script::Arabic => &["Noto Sans Arabic"],
77 Script::Armenian => &["Noto Sans Armenian"],
78 Script::Bengali => &["Noto Sans Bengali"],
79 Script::Bopomofo => han_unification(locale),
80 Script::Braille => &["FreeMono"],
84 Script::Buhid => &["Noto Sans Buhid"],
85 Script::Chakma => &["Noto Sans Chakma"],
86 Script::Cherokee => &["Noto Sans Cherokee"],
87 Script::Deseret => &["Noto Sans Deseret"],
88 Script::Devanagari => &["Noto Sans Devanagari"],
89 Script::Ethiopic => &["Noto Sans Ethiopic"],
90 Script::Georgian => &["Noto Sans Georgian"],
91 Script::Gothic => &["Noto Sans Gothic"],
92 Script::Grantha => &["Noto Sans Grantha"],
93 Script::Gujarati => &["Noto Sans Gujarati"],
94 Script::Gurmukhi => &["Noto Sans Gurmukhi"],
95 Script::Han => han_unification(locale),
96 Script::Hangul => han_unification("ko"),
97 Script::Hanunoo => &["Noto Sans Hanunoo"],
98 Script::Hebrew => &["Noto Sans Hebrew"],
99 Script::Hiragana => han_unification("ja"),
100 Script::Javanese => &["Noto Sans Javanese"],
101 Script::Kannada => &["Noto Sans Kannada"],
102 Script::Katakana => han_unification("ja"),
103 Script::Khmer => &["Noto Sans Khmer"],
104 Script::Lao => &["Noto Sans Lao"],
105 Script::Malayalam => &["Noto Sans Malayalam"],
106 Script::Mongolian => &["Noto Sans Mongolian"],
107 Script::Myanmar => &["Noto Sans Myanmar"],
108 Script::Oriya => &["Noto Sans Oriya"],
109 Script::Runic => &["Noto Sans Runic"],
110 Script::Sinhala => &["Noto Sans Sinhala"],
111 Script::Syriac => &["Noto Sans Syriac"],
112 Script::Tagalog => &["Noto Sans Tagalog"],
113 Script::Tagbanwa => &["Noto Sans Tagbanwa"],
114 Script::Tai_Le => &["Noto Sans Tai Le"],
115 Script::Tai_Tham => &["Noto Sans Tai Tham"],
116 Script::Tai_Viet => &["Noto Sans Tai Viet"],
117 Script::Tamil => &["Noto Sans Tamil"],
118 Script::Telugu => &["Noto Sans Telugu"],
119 Script::Thaana => &["Noto Sans Thaana"],
120 Script::Thai => &["Noto Sans Thai"],
121 Script::Tibetan => &["Noto Serif Tibetan"],
123 Script::Tifinagh => &["Noto Sans Tifinagh"],
124 Script::Vai => &["Noto Sans Vai"],
125 Script::Yi => &["Noto Sans Yi", "Noto Sans CJK SC"],
127 _ => &[],
128 }
129}