1use crate::pattern::{compile_pattern_text, PatternSet};
4use std::sync::OnceLock;
5
6const ARABIC_SIMPLE_TEXT: &str = include_str!("../data/arabic-simple.pat");
7const ARABIC_NASKH_TEXT: &str = include_str!("../data/arabic-naskh.pat");
8const SYRIAC_TEXT: &str = include_str!("../data/syriac.pat");
9
10fn arabic_simple_set() -> &'static PatternSet {
11 static SET: OnceLock<PatternSet> = OnceLock::new();
12 SET.get_or_init(|| {
13 compile_pattern_text(ARABIC_SIMPLE_TEXT).expect("built-in \"arabic-simple\" compiles")
14 })
15}
16
17fn arabic_naskh_set() -> &'static PatternSet {
18 static SET: OnceLock<PatternSet> = OnceLock::new();
19 SET.get_or_init(|| {
20 compile_pattern_text(ARABIC_NASKH_TEXT).expect("built-in \"arabic-naskh\" compiles")
21 })
22}
23
24fn syriac_set() -> &'static PatternSet {
25 static SET: OnceLock<PatternSet> = OnceLock::new();
26 SET.get_or_init(|| compile_pattern_text(SYRIAC_TEXT).expect("built-in \"syriac\" compiles"))
27}
28
29pub fn is_builtin_pattern_set(name: &str) -> bool {
32 matches!(name, "arabic-simple" | "arabic-naskh" | "syriac")
33}
34
35pub fn builtin_pattern_set(name: &str) -> Option<&'static PatternSet> {
37 match name {
38 "arabic-simple" => Some(arabic_simple_set()),
39 "arabic-naskh" => Some(arabic_naskh_set()),
40 "syriac" => Some(syriac_set()),
41 _ => None,
42 }
43}