use super::VowelClassifier;
#[derive(Debug, Clone, Copy, Default)]
pub struct DevanagariClassifier;
impl DevanagariClassifier {
pub fn new() -> Self {
Self
}
}
static DEVANAGARI_VOWELS: &[char] = &[
'अ', 'आ', 'इ', 'ई', 'उ', 'ऊ', 'ऋ', 'ॠ', 'ऌ', 'ॡ', 'ए', 'ऐ', 'ओ', 'औ', 'ा', 'ि', 'ी', 'ु', 'ू', 'ृ', 'ॄ', 'ॢ', 'ॣ', 'े', 'ै', 'ो', 'ौ', ];
impl VowelClassifier for DevanagariClassifier {
fn is_vowel(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0904..=0x0914 => true, 0x0960..=0x0961 => true,
0x093A..=0x093B => true, 0x093E..=0x094C => true, 0x094E..=0x094F => true, 0x0955..=0x0957 => true,
0x0962..=0x0963 => true,
_ => false,
}
}
fn script_name(&self) -> &'static str {
"Devanagari"
}
fn vowels(&self) -> &[char] {
DEVANAGARI_VOWELS
}
fn is_consonant(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0915..=0x0939 => true,
0x0958..=0x095F => true,
0x094D => false,
0x0902 => false, 0x0903 => false,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_independent_vowels() {
let c = DevanagariClassifier::new();
assert!(c.is_vowel('अ')); assert!(c.is_vowel('आ')); assert!(c.is_vowel('इ')); assert!(c.is_vowel('ई')); assert!(c.is_vowel('उ')); assert!(c.is_vowel('ऊ')); assert!(c.is_vowel('ए')); assert!(c.is_vowel('ऐ')); assert!(c.is_vowel('ओ')); assert!(c.is_vowel('औ')); }
#[test]
fn test_vocalic_vowels() {
let c = DevanagariClassifier::new();
assert!(c.is_vowel('ऋ')); assert!(c.is_vowel('ॠ')); assert!(c.is_vowel('ऌ')); }
#[test]
fn test_dependent_vowels() {
let c = DevanagariClassifier::new();
assert!(c.is_vowel('ा')); assert!(c.is_vowel('ि')); assert!(c.is_vowel('ी')); assert!(c.is_vowel('ु')); assert!(c.is_vowel('ू')); assert!(c.is_vowel('े')); assert!(c.is_vowel('ै')); assert!(c.is_vowel('ो')); assert!(c.is_vowel('ौ')); }
#[test]
fn test_consonants() {
let c = DevanagariClassifier::new();
assert!(!c.is_vowel('क')); assert!(!c.is_vowel('ख')); assert!(!c.is_vowel('ग')); assert!(!c.is_vowel('घ')); assert!(!c.is_vowel('च')); assert!(!c.is_vowel('ज')); assert!(!c.is_vowel('त')); assert!(!c.is_vowel('द')); assert!(!c.is_vowel('न')); assert!(!c.is_vowel('प')); assert!(!c.is_vowel('म')); assert!(!c.is_vowel('ह')); }
#[test]
fn test_is_consonant() {
let c = DevanagariClassifier::new();
assert!(c.is_consonant('क')); assert!(c.is_consonant('ग')); assert!(c.is_consonant('त')); assert!(c.is_consonant('न')); assert!(c.is_consonant('म')); }
#[test]
fn test_virama_not_vowel() {
let c = DevanagariClassifier::new();
assert!(!c.is_vowel('्')); assert!(!c.is_consonant('्')); }
#[test]
fn test_nukta_consonants() {
let c = DevanagariClassifier::new();
assert!(c.is_consonant('क')); assert!(c.is_consonant('ड')); assert!(c.is_consonant('ढ')); assert!(!c.is_vowel('\u{093C}')); }
}