use crate::pattern::{compile_pattern_text, PatternSet};
use std::sync::OnceLock;
const ARABIC_SIMPLE_TEXT: &str = include_str!("../data/arabic-simple.pat");
const ARABIC_NASKH_TEXT: &str = include_str!("../data/arabic-naskh.pat");
const ARABIC_NASTALIQ_TEXT: &str = include_str!("../data/arabic-nastaliq.pat");
const SYRIAC_TEXT: &str = include_str!("../data/syriac.pat");
fn arabic_simple_set() -> &'static PatternSet {
static SET: OnceLock<PatternSet> = OnceLock::new();
SET.get_or_init(|| {
compile_pattern_text(ARABIC_SIMPLE_TEXT).expect("built-in \"arabic-simple\" compiles")
})
}
fn arabic_naskh_set() -> &'static PatternSet {
static SET: OnceLock<PatternSet> = OnceLock::new();
SET.get_or_init(|| {
compile_pattern_text(ARABIC_NASKH_TEXT).expect("built-in \"arabic-naskh\" compiles")
})
}
fn arabic_nastaliq_set() -> &'static PatternSet {
static SET: OnceLock<PatternSet> = OnceLock::new();
SET.get_or_init(|| {
compile_pattern_text(ARABIC_NASTALIQ_TEXT).expect("built-in \"arabic-nastaliq\" compiles")
})
}
fn syriac_set() -> &'static PatternSet {
static SET: OnceLock<PatternSet> = OnceLock::new();
SET.get_or_init(|| compile_pattern_text(SYRIAC_TEXT).expect("built-in \"syriac\" compiles"))
}
pub fn builtin_pattern_set_names() -> &'static [&'static str] {
&["arabic-simple", "arabic-naskh", "arabic-nastaliq", "syriac"]
}
pub fn is_builtin_pattern_set(name: &str) -> bool {
builtin_pattern_set_names().contains(&name)
}
pub fn builtin_pattern_set(name: &str) -> Option<&'static PatternSet> {
match name {
"arabic-simple" => Some(arabic_simple_set()),
"arabic-naskh" => Some(arabic_naskh_set()),
"arabic-nastaliq" => Some(arabic_nastaliq_set()),
"syriac" => Some(syriac_set()),
_ => None,
}
}