whatlang/scripts/
grouping.rs

1use super::Script;
2use crate::Lang;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum MultiLangScript {
6    Latin,
7    Cyrillic,
8    Arabic,
9    Devanagari,
10    Hebrew,
11}
12
13impl MultiLangScript {
14    pub fn to_script(self) -> Script {
15        match self {
16            Self::Latin => Script::Latin,
17            Self::Cyrillic => Script::Cyrillic,
18            Self::Arabic => Script::Arabic,
19            Self::Devanagari => Script::Devanagari,
20            Self::Hebrew => Script::Hebrew,
21        }
22    }
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26pub enum ScriptLangGroup {
27    Multi(MultiLangScript),
28    One(Lang),
29
30    // Mandarin writing can be japanese in some cases.
31    // For now it's a hack.
32    // See https://github.com/greyblake/whatlang-rs/pull/45
33    Mandarin,
34}
35
36impl Script {
37    pub fn to_lang_group(self) -> ScriptLangGroup {
38        use MultiLangScript as MLS;
39        use ScriptLangGroup::{Mandarin, Multi, One};
40
41        match self {
42            Script::Latin => Multi(MLS::Latin),
43            Script::Cyrillic => Multi(MLS::Cyrillic),
44            Script::Arabic => Multi(MLS::Arabic),
45            Script::Devanagari => Multi(MLS::Devanagari),
46            Script::Hebrew => Multi(MLS::Hebrew),
47            Script::Mandarin => Mandarin,
48            Script::Bengali => One(Lang::Ben),
49            Script::Hangul => One(Lang::Kor),
50            Script::Georgian => One(Lang::Kat),
51            Script::Greek => One(Lang::Ell),
52            Script::Kannada => One(Lang::Kan),
53            Script::Tamil => One(Lang::Tam),
54            Script::Thai => One(Lang::Tha),
55            Script::Gujarati => One(Lang::Guj),
56            Script::Gurmukhi => One(Lang::Pan),
57            Script::Telugu => One(Lang::Tel),
58            Script::Malayalam => One(Lang::Mal),
59            Script::Oriya => One(Lang::Ori),
60            Script::Myanmar => One(Lang::Mya),
61            Script::Sinhala => One(Lang::Sin),
62            Script::Khmer => One(Lang::Khm),
63            Script::Ethiopic => One(Lang::Amh),
64            Script::Armenian => One(Lang::Hye),
65            Script::Katakana | Script::Hiragana => One(Lang::Jpn),
66        }
67    }
68}
69
70#[cfg(test)]
71mod tests {
72    use super::*;
73
74    #[test]
75    fn test_script_to_lang_group() {
76        assert_eq!(
77            Script::Latin.to_lang_group(),
78            ScriptLangGroup::Multi(MultiLangScript::Latin)
79        );
80
81        assert_eq!(
82            Script::Georgian.to_lang_group(),
83            ScriptLangGroup::One(Lang::Kat)
84        );
85    }
86
87    #[test]
88    fn test_multi_lang_script_to_script() {
89        assert_eq!(MultiLangScript::Latin.to_script(), Script::Latin);
90        assert_eq!(MultiLangScript::Hebrew.to_script(), Script::Hebrew);
91    }
92}