vi 0.8.0

An input method library for vietnamese IME
Documentation
//! Static character mappings for transformation.

use phf::{phf_map, phf_ordered_set, Map, OrderedSet};

/// An ordered set of lowercase vowels, complete with and without accents or tone marks.
pub static VOWELS: OrderedSet<char> = phf_ordered_set![
    'a', 'à', '', 'ã', 'á', '', 'ă', '', '', '', '', '', 'â', '', '', '', '', '', 'e',
    'è', '', '', 'é', '', 'ê', '', '', '', 'ế', '', 'i', 'ì', '', 'ĩ', 'í', '', 'o', 'ò',
    '', 'õ', 'ó', '', 'ô', '', '', '', '', '', 'ơ', '', '', '', '', '', 'u', 'ù', '',
    'ũ', 'ú', '', 'ư', '', '', '', '', '', 'y', '', '', '', 'ý', ''
];

/// A map of characters without tone mark to character with acute tone mark
pub static ACCUTE_MAP: Map<char, char> = phf_map! {
    'a' => 'á',
    'â' => '',
    'ă' => '',
    'e' => 'é',
    'ê' => 'ế',
    'i' => 'í',
    'o' => 'ó',
    'ô' => '',
    'ơ' => '',
    'u' => 'ú',
    'ư' => '',
    'y' => 'ý',
    // uppercase
    'A' => 'Á',
    'Â' => '',
    'Ă' => '',
    'E' => 'É',
    'Ê' => '',
    'I' => 'Í',
    'O' => 'Ó',
    'Ô' => '',
    'Ơ' => '',
    'U' => 'Ú',
    'Ư' => '',
    'Y' => 'Ý',
};

/// A map of characters without tone mark to character with grave tone mark
pub static GRAVE_MAP: Map<char, char> = phf_map! {
    'a' => 'à',
    'â' => '',
    'ă' => '',
    'e' => 'è',
    'ê' => '',
    'i' => 'ì',
    'o' => 'ò',
    'ô' => '',
    'ơ' => '',
    'u' => 'ù',
    'ư' => '',
    'y' => '',
    // uppercase
    'A' => 'À',
    'Â' => '',
    'Ă' => '',
    'E' => 'È',
    'Ê' => '',
    'I' => 'Ì',
    'O' => 'Ò',
    'Ô' => '',
    'Ơ' => '',
    'U' => 'Ù',
    'Ư' => '',
    'Y' => '',
};

/// A map of characters without tone mark to character with hook above tone mark
pub static HOOK_ABOVE_MAP: Map<char, char> = phf_map! {
    'a' => '',
    'â' => '',
    'ă' => '',
    'e' => '',
    'ê' => '',
    'i' => '',
    'o' => '',
    'ô' => '',
    'ơ' => '',
    'u' => '',
    'ư' => '',
    'y' => '',
    // uppercase
    'A' => '',
    'Ă' => '',
    'Â' => '',
    'E' => '',
    'Ê' => '',
    'O' => '',
    'Ô' => '',
    'Ơ' => '',
    'I' => '',
    'U' => '',
    'Ư' => '',
    'Y' => '',
};

/// A map of characters without tone mark to character with tilde tone mark
pub static TILDE_MAP: Map<char, char> = phf_map! {
    'a' => 'ã',
    'ă' => '',
    'â' => '',
    'e' => '',
    'ê' => '',
    'o' => 'õ',
    'ô' => '',
    'ơ' => '',
    'i' => 'ĩ',
    'u' => 'ũ',
    'ư' => '',
    'y' => '',
    // uppercase
    'A' => 'Ã',
    'Ă' => '',
    'Â' => '',
    'E' => '',
    'Ê' => '',
    'O' => 'Õ',
    'Ô' => '',
    'Ơ' => '',
    'I' => 'Ĩ',
    'U' => 'Ũ',
    'Ư' => '',
    'Y' => '',
};

/// A map of characters without tone mark to character with dot tone mark
pub static DOT_MAP: Map<char, char> = phf_map! {
    'a' => '',
    'ă' => '',
    'â' => '',
    'e' => '',
    'ê' => '',
    'o' => '',
    'ô' => '',
    'ơ' => '',
    'i' => '',
    'u' => '',
    'ư' => '',
    'y' => '',
    // uppercase
    'A' => '',
    'Ă' => '',
    'Â' => '',
    'E' => '',
    'Ê' => '',
    'O' => '',
    'Ô' => '',
    'Ơ' => '',
    'I' => '',
    'U' => '',
    'Ư' => '',
    'Y' => '',
};

/// A map of characters without accent to character with circumflex accent
pub static CIRCUMFLEX_MAP: Map<char, char> = phf_map! {
    'a' => 'â',
    'e' => 'ê',
    'o' => 'ô',
    '' => '',
    '' => '',
    '' => '',
    'á' => '',
    'é' => 'ế',
    'ó' => '',
    '' => '',
    '' => '',
    '' => '',
    'ã' => '',
    '' => '',
    'õ' => '',
    'à' => '',
    'è' => '',
    'ò' => '',
    // uppercase
    'A' => 'Â',
    'E' => 'Ê',
    'O' => 'Ô',
    '' => '',
    '' => '',
    '' => '',
    'Á' => '',
    'É' => '',
    'Ó' => '',
    '' => '',
    '' => '',
    '' => '',
    'Ã' => '',
    '' => '',
    'Õ' => '',
    'À' => '',
    'È' => '',
    'Ò' => '',
};

/// A map of characters without accent to character with dyet accent
pub static DYET_MAP: Map<char, char> = phf_map! {
    'd' => 'đ',
    'D' => 'Đ',
};

/// A map of characters without accent to character with horn accent
pub static HORN_MAP: Map<char, char> = phf_map! {
    'u' => 'ư',
    'o' => 'ơ',
    'ú' => '',
    'ó' => '',
    'ù' => '',
    'ò' => '',
    '' => '',
    '' => '',
    'ũ' => '',
    'õ' => '',
    '' => '',
    '' => '',
    // uppercase
    'U' => 'Ư',
    'O' => 'Ơ',
    'Ú' => '',
    'Ó' => '',
    'Ù' => '',
    'Ò' => '',
    '' => '',
    '' => '',
    'Ũ' => '',
    'Õ' => '',
    '' => '',
    '' => '',
};

/// A map of characters without accent to character with breve accent
pub static BREVE_MAP: Map<char, char> = phf_map! {
    'a' => 'ă',
    'á' => '',
    'à' => '',
    '' => '',
    'ã' => '',
    '' => '',
    // uppercase
    'A' => 'Ă',
    'Á' => '',
    'À' => '',
    '' => '',
    'Ã' => '',
    '' => '',
};