use super::VowelClassifier;
#[derive(Debug, Clone, Copy, Default)]
pub struct ThaiClassifier;
impl ThaiClassifier {
pub fn new() -> Self {
Self
}
}
static THAI_VOWELS: &[char] = &[
'เ', 'แ', 'โ', 'ใ', 'ไ', 'ะ', 'า', 'ำ', 'ิ', 'ี', 'ึ', 'ื', 'ั', '\u{0E47}', 'ุ', 'ู', ];
impl VowelClassifier for ThaiClassifier {
fn is_vowel(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0E40..=0x0E44 => true,
0x0E30..=0x0E31 => true, 0x0E32..=0x0E33 => true,
0x0E34..=0x0E39 => true,
0x0E47 => true,
_ => false,
}
}
fn script_name(&self) -> &'static str {
"Thai"
}
fn vowels(&self) -> &[char] {
THAI_VOWELS
}
fn is_consonant(&self, c: char) -> bool {
let code = c as u32;
match code {
0x0E01..=0x0E2E => true,
0x0E2F => false,
0x0E48..=0x0E4B => false,
0x0E3F => false,
_ => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_leading_vowels() {
let c = ThaiClassifier::new();
assert!(c.is_vowel('เ')); assert!(c.is_vowel('แ')); assert!(c.is_vowel('โ')); assert!(c.is_vowel('ใ')); assert!(c.is_vowel('ไ')); }
#[test]
fn test_following_vowels() {
let c = ThaiClassifier::new();
assert!(c.is_vowel('ะ')); assert!(c.is_vowel('า')); assert!(c.is_vowel('ำ')); }
#[test]
fn test_upper_vowels() {
let c = ThaiClassifier::new();
assert!(c.is_vowel('ิ')); assert!(c.is_vowel('ี')); assert!(c.is_vowel('ึ')); assert!(c.is_vowel('ื')); assert!(c.is_vowel('ั')); }
#[test]
fn test_lower_vowels() {
let c = ThaiClassifier::new();
assert!(c.is_vowel('ุ')); assert!(c.is_vowel('ู')); }
#[test]
fn test_consonants() {
let c = ThaiClassifier::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('ว')); assert!(!c.is_vowel('ส')); assert!(!c.is_vowel('ห')); assert!(!c.is_vowel('อ')); assert!(!c.is_vowel('ฮ')); }
#[test]
fn test_is_consonant() {
let c = ThaiClassifier::new();
assert!(c.is_consonant('ก')); assert!(c.is_consonant('ข')); assert!(c.is_consonant('ง')); assert!(c.is_consonant('ม')); assert!(c.is_consonant('น')); assert!(c.is_consonant('ฮ')); }
#[test]
fn test_tone_marks_not_vowel() {
let c = ThaiClassifier::new();
assert!(!c.is_vowel('่')); assert!(!c.is_vowel('้')); assert!(!c.is_vowel('๊')); assert!(!c.is_vowel('๋')); assert!(!c.is_consonant('่'));
assert!(!c.is_consonant('้'));
}
#[test]
fn test_thanthakhat_not_vowel() {
let c = ThaiClassifier::new();
assert!(!c.is_vowel('์'));
assert!(!c.is_consonant('์'));
}
}