pub fn requires_arabic_shaping(text: &str) -> bool {
text.chars().any(|c| {
let cp = c as u32;
(0x0600..=0x06FF).contains(&cp)
|| (0x0750..=0x077F).contains(&cp)
|| (0xFB50..=0xFDFF).contains(&cp)
|| (0xFE70..=0xFEFF).contains(&cp)
})
}
pub fn requires_indic_shaping(text: &str) -> bool {
text.chars().any(|c| {
let cp = c as u32;
(0x0900..=0x097F).contains(&cp)
|| (0x0980..=0x09FF).contains(&cp)
|| (0x0B80..=0x0BFF).contains(&cp)
|| (0x0C00..=0x0C7F).contains(&cp)
|| (0x0C80..=0x0CFF).contains(&cp)
})
}
pub fn requires_mark_positioning(text: &str) -> bool {
text.chars().any(|c| {
let cp = c as u32;
(0x0E00..=0x0E7F).contains(&cp)
|| (0x1780..=0x17FF).contains(&cp)
|| (0x1000..=0x109F).contains(&cp)
})
}