use super::rules::celtic::{irish_rules, welsh_rules};
use super::rules::cjk::{
chinese_hanzi_rules, chinese_pinyin_rules, japanese_romaji_rules, korean_romanization_rules,
korean_rules,
};
use super::rules::germanic::{
american_english_rules, british_english_rules, danish_rules, dutch_rules, german_rules,
icelandic_rules, norwegian_rules, swedish_rules,
};
use super::rules::indic::{
bengali_rules, gujarati_rules, hindi_rules, marathi_rules, punjabi_gurmukhi_rules,
punjabi_shahmukhi_rules, tamil_rules, telugu_rules,
};
use super::rules::other::{
armenian_rules, basque_rules, finnish_rules, georgian_rules, greek_rules, hungarian_rules,
turkish_rules,
};
use super::rules::romance::{
brazilian_portuguese_rules, canadian_french_rules, castilian_spanish_rules, catalan_rules,
european_portuguese_rules, italian_rules, latin_american_spanish_rules, romanian_rules,
standard_french_rules,
};
use super::rules::semitic::{arabic_rules, hebrew_rules, maltese_rules, persian_rules, urdu_rules};
use super::rules::slavic::{
belarusian_rules, bulgarian_rules, croatian_rules, czech_rules, polish_rules, russian_rules,
serbian_latin_rules, serbian_rules, slovak_rules, ukrainian_rules,
};
use super::rules::southeast_asian::{
indonesian_rules, tagalog_rules, thai_rules, vietnamese_rules,
};
use super::tags;
use crate::phonetic::types::RewriteRuleChar;
pub fn rules_for_language(tag: &str) -> Option<Vec<RewriteRuleChar>> {
let normalized = tag.to_lowercase();
match normalized.as_str() {
"en" | "en-us" | "english" | "american" => Some(american_english_rules()),
"en-gb" | "british" => Some(british_english_rules()),
"es" | "spanish" | "castilian" => Some(castilian_spanish_rules()),
"es-419" | "es-mx" | "es-ar" | "es-co" | "es-cl" | "es-pe" | "latin-american" => {
Some(latin_american_spanish_rules())
}
"fr" | "french" => Some(standard_french_rules()),
"fr-ca" | "quebec" | "quebecois" | "québécois" => Some(canadian_french_rules()),
"pt" | "pt-pt" | "portuguese" | "european-portuguese" => Some(european_portuguese_rules()),
"pt-br" | "brazilian" | "brazilian-portuguese" => Some(brazilian_portuguese_rules()),
"it" | "italian" => Some(italian_rules()),
"de" | "german" | "deutsch" => Some(german_rules()),
"nl" | "dutch" | "nederlands" | "flemish" => Some(dutch_rules()),
"ru" | "russian" | "русский" => Some(russian_rules()),
"ko" | "korean" | "한국어" | "hangul" => Some(korean_rules()),
"ko-latn" | "korean-romanization" => Some(korean_romanization_rules()),
"he" | "hebrew" | "עברית" | "ivrit" => Some(hebrew_rules()),
"pl" | "polish" | "polski" => Some(polish_rules()),
"tr" | "turkish" | "türkçe" => Some(turkish_rules()),
"ja-latn" | "romaji" | "ローマ字" => Some(japanese_romaji_rules()),
"zh-latn" | "pinyin" | "拼音" => Some(chinese_pinyin_rules()),
"ar" | "arabic" | "العربية" => Some(arabic_rules()),
"ur" | "urdu" | "اردو" => Some(urdu_rules()),
"hi" | "hindi" | "हिन्दी" | "devanagari" => Some(hindi_rules()),
"zh" | "chinese" | "hanzi" | "汉字" | "中文" => Some(chinese_hanzi_rules()),
"tl" | "tagalog" | "filipino" => Some(tagalog_rules()),
"uk" | "ukrainian" | "українська" => Some(ukrainian_rules()),
"hu" | "hungarian" | "magyar" => Some(hungarian_rules()),
"id" | "indonesian" | "bahasa indonesia" | "bahasa" => Some(indonesian_rules()),
"ro" | "romanian" | "română" => Some(romanian_rules()),
"fi" | "finnish" | "suomi" => Some(finnish_rules()),
"eu" | "basque" | "euskara" => Some(basque_rules()),
"ca" | "catalan" | "català" => Some(catalan_rules()),
"sv" | "swedish" | "svenska" => Some(swedish_rules()),
"no" | "nb" | "nn" | "norwegian" | "norsk" | "bokmål" | "nynorsk" => {
Some(norwegian_rules())
}
"da" | "danish" | "dansk" => Some(danish_rules()),
"cs" | "czech" | "čeština" | "cestina" => Some(czech_rules()),
"sk" | "slovak" | "slovenčina" | "slovencina" => Some(slovak_rules()),
"hr" | "croatian" | "hrvatski" => Some(croatian_rules()),
"cy" | "welsh" | "cymraeg" => Some(welsh_rules()),
"ga" | "irish" | "gaeilge" => Some(irish_rules()),
"bg" | "bulgarian" | "български" => Some(bulgarian_rules()),
"be" | "belarusian" | "беларуская" => Some(belarusian_rules()),
"sr" | "serbian" | "српски" => Some(serbian_rules()),
"sr-latn" | "serbian-latin" => Some(serbian_latin_rules()),
"vi" | "vietnamese" | "tiếng việt" => Some(vietnamese_rules()),
"el" | "greek" | "ελληνικά" => Some(greek_rules()),
"is" | "icelandic" | "íslenska" => Some(icelandic_rules()),
"fa" | "persian" | "farsi" | "فارسی" => Some(persian_rules()),
"mt" | "maltese" | "malti" => Some(maltese_rules()),
"mr" | "marathi" | "मराठी" => Some(marathi_rules()),
"bn" | "bengali" | "বাংলা" => Some(bengali_rules()),
"gu" | "gujarati" | "ગુજરાતી" => Some(gujarati_rules()),
"te" | "telugu" | "తెలుగు" => Some(telugu_rules()),
"ta" | "tamil" | "தமிழ்" => Some(tamil_rules()),
"pa" | "punjabi" | "ਪੰਜਾਬੀ" => Some(punjabi_gurmukhi_rules()),
"pa-arab" | "punjabi-shahmukhi" => Some(punjabi_shahmukhi_rules()),
"th" | "thai" | "ไทย" => Some(thai_rules()),
"ka" | "georgian" | "ქართული" => Some(georgian_rules()),
"hy" | "armenian" | "hayeren" => Some(armenian_rules()),
_ => None,
}
}
pub fn is_supported(tag: &str) -> bool {
rules_for_language(tag).is_some()
}
pub fn supported_languages() -> &'static [&'static str] {
&[
"en",
"en-us",
"en-gb",
"english",
"american",
"british",
"es",
"es-419",
"es-mx",
"es-ar",
"es-co",
"es-cl",
"es-pe",
"spanish",
"castilian",
"latin-american",
"fr",
"fr-ca",
"french",
"quebec",
"quebecois",
"québécois",
"pt",
"pt-pt",
"pt-br",
"portuguese",
"brazilian",
"european-portuguese",
"brazilian-portuguese",
"it",
"italian",
"de",
"german",
"deutsch",
"nl",
"dutch",
"nederlands",
"flemish",
"ru",
"russian",
"русский",
"ko",
"korean",
"한국어",
"hangul",
"ko-latn",
"korean-romanization",
"he",
"hebrew",
"עברית",
"ivrit",
"pl",
"polish",
"polski",
"tr",
"turkish",
"türkçe",
"ja-latn",
"romaji",
"ローマ字",
"zh-latn",
"pinyin",
"拼音",
"ar",
"arabic",
"العربية",
"ur",
"urdu",
"اردو",
"hi",
"hindi",
"हिन्दी",
"devanagari",
"zh",
"chinese",
"hanzi",
"汉字",
"中文",
"tl",
"tagalog",
"filipino",
"uk",
"ukrainian",
"українська",
"hu",
"hungarian",
"magyar",
"id",
"indonesian",
"bahasa indonesia",
"bahasa",
"ro",
"romanian",
"română",
"fi",
"finnish",
"suomi",
"eu",
"basque",
"euskara",
"ca",
"catalan",
"català",
"sv",
"swedish",
"svenska",
"no",
"nb",
"nn",
"norwegian",
"norsk",
"bokmål",
"nynorsk",
"da",
"danish",
"dansk",
"cs",
"czech",
"čeština",
"cestina",
"sk",
"slovak",
"slovenčina",
"slovencina",
"hr",
"croatian",
"hrvatski",
"cy",
"welsh",
"cymraeg",
"ga",
"irish",
"gaeilge",
"bg",
"bulgarian",
"български",
"be",
"belarusian",
"беларуская",
"sr",
"serbian",
"српски",
"sr-latn",
"serbian-latin",
"vi",
"vietnamese",
"tiếng việt",
"el",
"greek",
"ελληνικά",
"is",
"icelandic",
"íslenska",
"fa",
"persian",
"farsi",
"فارسی",
"mt",
"maltese",
"malti",
]
}
pub fn default_language() -> &'static str {
tags::ENGLISH_US
}