ainconv/
lib.rs

1/// Writing systems supported by the library.
2#[derive(Debug, PartialEq)]
3pub enum Script {
4    /// Katakana - カタカナ
5    Kana,
6    /// Latin - Used for most Western languages
7    Latn,
8    /// Cyrillic - Used by many Slavic languages such as Russian
9    Cyrl,
10    // TODO: /// Hangul - The Korean alphabet
11    // Hang,
12    /// Mixed - A mix of different scripts
13    Mixed,
14    /// Unknown - Script could not be determined
15    Unknown,
16}
17
18mod util;
19
20mod conversion {
21    pub mod cyrillic;
22    // pub mod hangul;
23    pub mod katakana;
24    pub mod latin;
25}
26
27mod syllable;
28pub use syllable::separate;
29
30mod detection;
31pub use detection::detect;
32
33pub use conversion::cyrillic::{convert_cyrl_to_latn, convert_latn_to_cyrl};
34pub use conversion::katakana::{convert_kana_to_latn, convert_latn_to_kana};
35
36pub fn convert_cyrl_to_kana(cyrl: &str) -> String {
37    convert_latn_to_kana(&convert_cyrl_to_latn(cyrl))
38}
39
40pub fn convert_kana_to_cyrl(kana: &str) -> String {
41    convert_latn_to_cyrl(&convert_kana_to_latn(kana))
42}
43
44#[cfg(test)]
45mod tests {
46    use super::*;
47
48    #[test]
49    fn test_detect() {
50        assert_eq!(detect("aynu"), Script::Latn);
51        assert_eq!(detect("アイヌ"), Script::Kana);
52        assert_eq!(detect("айну"), Script::Cyrl);
53        assert_eq!(detect("Aynuイタㇰ"), Script::Mixed);
54        assert_eq!(detect("愛努"), Script::Unknown);
55    }
56}