use std::collections::HashMap;
use std::sync::OnceLock;
use icu_locid::Locale;
#[derive(Clone, Copy, Debug)]
pub struct QuotePair {
pub opening: char,
pub closing: char,
}
#[derive(Clone, Copy, Debug)]
struct QuotesData {
quotes: QuotePair,
alternative_quotes: QuotePair,
}
impl QuotesData {
const fn from(chars: (char, char, char, char)) -> Self {
QuotesData {
quotes: QuotePair {
opening: chars.0,
closing: chars.1,
},
alternative_quotes: QuotePair {
opening: chars.2,
closing: chars.3,
},
}
}
}
static DEFAULT_QUOTES: QuotesData =
QuotesData::from(('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}'));
static QUOTES_MAP: OnceLock<HashMap<&'static str, QuotesData>> = OnceLock::new();
fn create_quotes_map() -> HashMap<&'static str, QuotesData> {
let input = [
("aa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ab", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("af", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ak", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("an", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ann", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("apc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("arn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("as", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("asa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("az", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ba", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bal", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bem", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bew", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bez", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bgc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bgn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bho", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("blt", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("brx", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("bss", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("byn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cad", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cch", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ccp", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ce", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ceb", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cgg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cho", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("chr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cic", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ckb", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("co", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("csw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("cy", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("da", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("dav", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("dje", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("doi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("dv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("dz", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ebu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ee", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("en", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("eo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("es", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("fil", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("fo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("frr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("fur", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("fy", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ga", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gaa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gd", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gez", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gl", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("guz", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("gv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ha", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("haw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("hi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("hnj", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("id", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ig", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ii", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("io", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("iu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("jbo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("jmc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("jv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kaa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kaj", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kam", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kcg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kde", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kea", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ken", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kgp", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("khq", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ki", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kl", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kln", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("km", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ko", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kok", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kpe", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ks", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ksb", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ksh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ku", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("kxv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("la", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lkt", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lmo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ln", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lrc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ltg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("luo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("lv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mai", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mas", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mdf", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mer", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mfe", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mgh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mgo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mhn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mic", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ml", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mni", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("moh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ms", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mt", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("mus", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("my", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("myv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("naq", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nb", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nd", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nds", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ne", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nqo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nus", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ny", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("nyn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("oc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("om", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("or", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("os", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("osa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("pa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("pap", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("pcm", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("pis", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("prg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ps", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("pt", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("qu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("quc", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("raj", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("rhg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("rif", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("rm", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("rof", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("rwk", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("saq", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sat", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sbp", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("scn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sd", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("se", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("seh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ses", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("shn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("si", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sid", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("skr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sma", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("smj", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("smn", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sms", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("so", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ss", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ssy", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("su", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("sw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("szl", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ta", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("te", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("teo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tg", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("th", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tig", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("to", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tok", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tpi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("trv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("trw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ts", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tt", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("twq", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tyv", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("tzm", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ug", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vai", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("ve", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vec", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vmw", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("vun", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("wa", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("wae", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("wal", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("wbp", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("wo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("xh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("xnr", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("xog", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("yi", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("yo", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("yrl", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("za", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("zh", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("zu", ('\u{201c}', '\u{201d}', '\u{2018}', '\u{2019}')),
("agq", ('\u{201e}', '\u{201d}', '\u{201a}', '\u{2019}')),
("ff", ('\u{201e}', '\u{201d}', '\u{201a}', '\u{2019}')),
("am", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("az-Arab", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("az-Cyrl", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("fa", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("fr-CH", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("gsw", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("jgo", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("kkj", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("mzn", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("sdh", ('\u{ab}', '\u{bb}', '\u{2039}', '\u{203a}')),
("ar", ('\u{201d}', '\u{201c}', '\u{2019}', '\u{2018}')),
("lld", ('\u{201d}', '\u{201c}', '\u{2019}', '\u{2018}')),
("ms-Arab", ('\u{201d}', '\u{201c}', '\u{2019}', '\u{2018}')),
("syr", ('\u{201d}', '\u{201c}', '\u{2019}', '\u{2018}')),
("ur", ('\u{201d}', '\u{201c}', '\u{2019}', '\u{2018}')),
("ast", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("blo", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("bm", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("br", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("ca", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("dyo", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("el", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("es-US", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("eu", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("ewo", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("ie", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("it", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("kab", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("kk", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("lij", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("mg", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("mua", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("nnh", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("pt-PT", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("sc", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("sg", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("sq", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("ti", ('\u{ab}', '\u{bb}', '\u{201c}', '\u{201d}')),
("bas", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("be", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("cv", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("ky", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("ru", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("sah", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("uk", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201c}')),
("bg", ('\u{201e}', '\u{201c}', '\u{201e}', '\u{201c}')),
("lt", ('\u{201e}', '\u{201c}', '\u{201e}', '\u{201c}')),
("bs-Cyrl", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("cs", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("de", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("dsb", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("et", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("hr", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("hsb", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("is", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("lb", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("luy", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("mk", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("sk", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("sl", ('\u{201e}', '\u{201c}', '\u{201a}', '\u{2018}')),
("bs", ('\u{201e}', '\u{201d}', '\u{2018}', '\u{2019}')),
("dua", ('\u{ab}', '\u{bb}', '\u{2018}', '\u{2019}')),
("el-POLYTON", ('\u{ab}', '\u{bb}', '\u{2018}', '\u{2019}')),
("ksf", ('\u{ab}', '\u{bb}', '\u{2018}', '\u{2019}')),
("no", ('\u{ab}', '\u{bb}', '\u{2018}', '\u{2019}')),
("rw", ('\u{ab}', '\u{bb}', '\u{2018}', '\u{2019}')),
("fi", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("he", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("lag", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("rn", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("sn", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("sv", ('\u{201d}', '\u{201d}', '\u{2019}', '\u{2019}')),
("fr-CA", ('\u{ab}', '\u{bb}', '\u{201d}', '\u{201c}')),
("fr", ('\u{ab}', '\u{bb}', '\u{ab}', '\u{bb}')),
("hy", ('\u{ab}', '\u{bb}', '\u{ab}', '\u{bb}')),
("yav", ('\u{ab}', '\u{bb}', '\u{ab}', '\u{bb}')),
("hu", ('\u{201e}', '\u{201d}', '\u{bb}', '\u{ab}')),
("ia", ('\u{2018}', '\u{2019}', '\u{201c}', '\u{201d}')),
("nso", ('\u{2018}', '\u{2019}', '\u{201c}', '\u{201d}')),
("ti-ER", ('\u{2018}', '\u{2019}', '\u{201c}', '\u{201d}')),
("tn", ('\u{2018}', '\u{2019}', '\u{201c}', '\u{201d}')),
("ja", ('\u{300c}', '\u{300d}', '\u{300e}', '\u{300f}')),
("yue", ('\u{300c}', '\u{300d}', '\u{300e}', '\u{300f}')),
("zh-Hant", ('\u{300c}', '\u{300d}', '\u{300e}', '\u{300f}')),
("ka", ('\u{201e}', '\u{201c}', '\u{ab}', '\u{bb}')),
("nl", ('\u{2018}', '\u{2019}', '\u{2018}', '\u{2019}')),
("nmg", ('\u{201e}', '\u{201d}', '\u{ab}', '\u{bb}')),
("pl", ('\u{201e}', '\u{201d}', '\u{ab}', '\u{bb}')),
("ro", ('\u{201e}', '\u{201d}', '\u{ab}', '\u{bb}')),
("shi", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201d}')),
("zgh", ('\u{ab}', '\u{bb}', '\u{201e}', '\u{201d}')),
("sr", ('\u{201e}', '\u{201d}', '\u{2019}', '\u{2019}')),
("st", ('\u{201c}', '\u{2019}', '\u{201c}', '\u{201d}')),
("tk", ('\u{201c}', '\u{201d}', '\u{201c}', '\u{201d}')),
("uz", ('\u{201c}', '\u{201d}', '\u{2019}', '\u{2018}')),
]
.map(|(lang, chars)| (lang, QuotesData::from(chars)));
HashMap::from(input)
}
fn quotes_data_for_lang(lang: &str) -> QuotesData {
if lang.len() < 2 {
return DEFAULT_QUOTES;
}
let quotes_map = QUOTES_MAP.get_or_init(create_quotes_map);
if let Some(quotes_data) = quotes_map.get(lang) {
return *quotes_data;
}
let locale = match lang.parse::<Locale>() {
Err(_) => return DEFAULT_QUOTES,
Ok(locale) => locale,
};
let lang = locale.id.language.to_string();
if let Some(quotes_data) = quotes_map.get(lang.as_str()) {
return *quotes_data;
}
if let Some(quotes_data) = locale
.id
.region
.and_then(|region| quotes_map.get(format!("{lang}-{region}").as_str()))
{
return *quotes_data;
}
if let Some(quotes_data) = locale
.id
.script
.and_then(|script| quotes_map.get(format!("{lang}-{script}").as_str()))
{
return *quotes_data;
}
DEFAULT_QUOTES
}
pub fn quotes_for_lang(lang: &str, depth: usize) -> QuotePair {
let quotes_data = quotes_data_for_lang(lang);
match depth {
0 => quotes_data.quotes,
_ => quotes_data.alternative_quotes,
}
}