pub(crate) trait StrRtlExt {
fn contains_rtl(&self) -> bool;
}
impl StrRtlExt for str {
fn contains_rtl(&self) -> bool {
self.chars().any(is_rtl)
}
}
fn is_rtl(c: char) -> bool {
matches!(c,
'\u{0590}'..='\u{08FF}'
| '\u{FB1D}'..='\u{FDFF}'
| '\u{FE70}'..='\u{FEFF}'
| '\u{10D00}'..='\u{10D3F}'
| '\u{1E900}'..='\u{1E95F}'
)
}
#[cfg(test)]
mod tests {
use crate::testing_prelude::*;
#[test]
fn str_contains_rtl_latin() {
assert!(!"Various - Afro Edits".contains_rtl());
}
#[test]
fn str_contains_rtl_hebrew() {
assert!("\u{05E9}\u{05DC}\u{05D5}\u{05DD}".contains_rtl());
}
#[test]
fn str_contains_rtl_arabic() {
assert!("\u{0639}\u{0631}\u{0628}\u{0649}".contains_rtl());
}
#[test]
fn str_contains_rtl_arabic_digit() {
assert!("track \u{0661}".contains_rtl());
}
}