use super::{script_char_to_slangs, Language, Script, UcdScript};
use ::std::fmt::Debug;
use alphabet_detector_macros::ScriptLanguage;
use strum::{EnumCount, IntoEnumIterator};
use strum_macros::{EnumCount as EnumCountDerive, EnumIter};
#[derive(
Clone,
Copy,
Debug,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
EnumCountDerive,
EnumIter,
ScriptLanguage,
)]
#[cfg_attr(
feature = "python",
pyo3::prelude::pyclass(eq, eq_int, frozen, hash, ord)
)]
#[repr(usize)]
pub enum ScriptLanguage {
#[slang(script = Latin)]
English,
#[slang(script = Latin)]
Spanish, #[slang(script = Latin)]
French, #[slang(script = Latin)]
Indonesian, #[slang(script = Latin)]
Portuguese, #[slang(script = Latin)]
German, #[slang(script = Latin)]
NigerianPidgin, #[slang(script = Latin)]
Swahili, #[slang(script = Latin)]
Vietnamese, #[slang(script = Latin)]
Hausa, #[slang(script = Latin)]
Turkish, #[slang(script = Latin)]
Filipino, #[slang(script = Latin)]
Javanese, #[slang(script = Latin)]
Italian, #[slang(script = Latin)]
UzbekNorthern, #[slang(script = Latin)]
Yoruba, #[slang(script = Latin)]
Igbo, #[slang(script = Latin)]
Polish, #[slang(script = Latin)]
Lingala, #[slang(script = Latin)]
Sundanese, #[slang(script = Latin)]
Malay, #[slang(script = Latin)]
Zulu, #[slang(script = Latin)]
Dutch, #[slang(script = Latin)]
Somali, #[slang(script = Latin)]
Romanian, #[slang(script = Latin)]
Xhosa, #[slang(script = Latin)]
Cebuano, #[slang(script = Latin)]
Afrikaans, #[slang(script = Latin)]
KikongoKituba, #[slang(script = Latin)]
Wolof, #[slang(script = Latin)]
KurdishNorthern, #[slang(script = Latin)]
FulfuldeNigerian, #[slang(script = Latin)]
Sepedi, #[slang(script = Latin)]
Kinyarwanda, #[slang(script = Latin)]
LubaKasai, #[slang(script = Latin)]
Bambara, #[slang(script = Latin)]
Sesotho, #[slang(script = Latin)]
Shona, #[slang(script = Latin)]
Hungarian, #[slang(script = Latin)]
Czech, #[slang(script = Latin)]
Dyula, #[slang(script = Latin)]
Rundi, #[slang(script = Latin)]
Swedish, #[slang(script = Latin)]
CreoleHaitian, #[slang(script = Latin)]
Ganda, #[slang(script = Latin)]
Mossi, #[slang(script = Latin)]
Banjar, #[slang(script = Latin)]
Ilocano, #[slang(script = Latin)]
AzerbaijaniNorth, #[slang(script = Latin)]
MalagasyPlateau, #[slang(script = Latin)]
OromoSouthern, #[slang(script = Latin)]
OromoWestCentral, #[slang(script = Latin)]
Catalan, #[slang(script = Latin)]
KanuriCentral, #[slang(script = Latin)]
Tswana, #[slang(script = Latin)]
Turkmen, #[slang(script = Latin)]
Slovak, #[slang(script = Latin)]
Tsonga, #[slang(script = Latin)]
Tumbuka, #[slang(script = Latin)]
Nyanja, #[slang(script = Latin)]
AkanTwi, #[slang(script = Latin)]
Umbundu, #[slang(script = Latin)]
Kikuyu, #[slang(script = Latin)]
Croatian, #[slang(script = Latin)]
GuaraniParaguayan, #[slang(script = Latin)]
FulaPulaar, #[slang(script = Latin)]
Minangkabau, #[slang(script = Latin)]
Danish, #[slang(script = Latin)]
Kamba, #[slang(script = Latin)]
Sicilian, #[slang(script = Latin)]
Finnish, #[slang(script = Latin)]
Ewe, #[slang(script = Latin)]
FulaPular, #[slang(script = Latin)]
Swati, #[slang(script = Latin)]
Dholuo, #[slang(script = Latin)]
Bemba, #[slang(script = Latin)]
TokPisin, #[slang(script = Latin)]
Buginese, #[slang(script = Latin)]
NorwegianBokmal, #[slang(script = Latin)]
NorwegianNynorsk,
#[slang(script = Latin)]
Venetian, #[slang(script = Latin)]
Lombard, #[slang(script = Latin)]
Waray, #[slang(script = Latin)]
Balinese, #[slang(script = Latin)]
Kabyle, #[slang(script = Latin)]
Lithuanian, #[slang(script = Latin)]
Acehnese, #[slang(script = Latin)]
AkanFante, #[slang(script = Latin)]
Bosnian, #[slang(script = Latin)]
Slovenian, #[slang(script = Latin)]
Chokwe, #[slang(script = Latin)]
Galician, #[slang(script = Latin)]
Fon, #[slang(script = Latin)]
Esperanto, #[slang(script = Latin)]
Serer, #[slang(script = Latin)]
AlbanianTosk, #[slang(script = Latin)]
DinkaSouthwestern, #[slang(script = Latin)]
Pangasinan, #[slang(script = Latin)]
Irish, #[slang(script = Latin)]
Kimbundu, #[slang(script = Latin)]
Nuer, #[slang(script = Latin)]
AymaraCentral, #[slang(script = Latin)]
Latvian, #[slang(script = Latin)]
Limburgish, #[slang(script = Latin)]
Estonian, #[slang(script = Latin)]
Mandailing, #[slang(script = Latin)]
Kabiye, #[slang(script = Latin)]
Sardinian, #[slang(script = Latin)]
Mizo, #[slang(script = Latin)]
Jingpho, #[slang(script = Latin)]
QuechuaAyacucho, #[slang(script = Latin, lang = Tamasheq)]
TamasheqLatin, #[slang(script = Latin)]
Kabuverdianu, #[slang(script = Latin)]
Occitan, #[slang(script = Latin)]
Basque, #[slang(script = Latin)]
Fijian, #[slang(script = Latin)]
Welsh, #[slang(script = Latin)]
Sango, #[slang(script = Latin)]
Asturian, #[slang(script = Latin)]
Ligurian, #[slang(script = Latin)]
Friulian, #[slang(script = Latin)]
Maltese, #[slang(script = Latin)]
Silesian, #[slang(script = Latin)]
Samoan, #[slang(script = Latin)]
Luxembourgish, #[slang(script = Latin)]
Papiamento, #[slang(script = Latin)]
Icelandic, #[slang(script = Latin)]
Latgalian, #[slang(script = Latin)]
Faroese, #[slang(script = Latin)]
GaelicScottish, #[slang(script = Latin)]
TatarCrimean, #[slang(script = Latin)]
Maori, #[slang(script = Latin)]
SamiNorthern, #[slang(script = Latin)]
Hawaiian, #[slang(script = Latin)]
Latin, #[slang(script = Latin, lang = Unknown)]
UnknownLatin,
#[slang(script = HanSimplified, lang = ChineseMandarin)]
ChineseMandarinSimplified, #[slang(script = Japanese)]
Japanese, #[slang(script = HanTraditional, lang = ChineseMandarin)]
ChineseMandarinTraditional, #[slang(script = HanTraditional, lang = ChineseCantonese)]
ChineseCantoneseTraditional, #[slang(script = Korean)]
Korean,
#[slang(script = Arabic)]
Arabic, #[slang(script = Arabic)]
Urdu, #[slang(script = Arabic)]
ArabicEgyptian, #[slang(script = Arabic)]
PersianFarsi, #[slang(script = Arabic)]
ArabicNorthLevantine, #[slang(script = Arabic)]
ArabicSouthLevantine,
#[slang(script = Arabic)]
ArabicSudanese, #[slang(script = Arabic)]
ArabicMoroccan, #[slang(script = Arabic)]
Sindhi, #[slang(script = Arabic)]
PersianDari, #[slang(script = Arabic)]
Saraiki, #[slang(script = Arabic)]
ArabicNajdi, #[slang(script = Arabic)]
PashtoSouthern, #[slang(script = Arabic)]
ArabicMesopotamian, #[slang(script = Arabic, lang = PunjabiEastern)]
PunjabiEasternShahmukhi, #[slang(script = Arabic)]
AzerbaijaniSouth, #[slang(script = Arabic)]
ArabicTunisian, #[slang(script = Arabic)]
Uyghur, #[slang(script = Arabic)]
ArabicSouthernYemeni, #[slang(script = Arabic, lang = Banjar)]
BanjarJawi, #[slang(script = Arabic, lang = KanuriCentral)]
KanuriCentralAjami, #[slang(script = Arabic)]
Kashmiri, #[slang(script = Arabic)]
KurdishCentral, #[slang(script = Arabic)]
KurdishSouthern, #[slang(script = Arabic, lang = Acehnese)]
AcehneseJawi, #[slang(script = Arabic, lang = Dogri)]
DogriPersoArabic, #[slang(script = Arabic, lang = Math)]
MathArabic,
#[slang(script = Devanagari)]
Hindi, #[slang(script = Devanagari)]
Marathi, #[slang(script = Devanagari)]
Bhojpuri, #[slang(script = Devanagari)]
Awadhi, #[slang(script = Devanagari, lang = Sindhi)]
SindhiDevanagari, #[slang(script = Devanagari)]
Nepali, #[slang(script = Devanagari)]
Maithili, #[slang(script = Devanagari)]
Chhattisgarhi, #[slang(script = Devanagari)]
Magahi, #[slang(script = Devanagari)]
Dogri, #[slang(script = Devanagari, lang = Kashmiri)]
KashmiriDevanagari, #[slang(script = Devanagari, lang = Saurashtra)]
SaurashtraDevanagari, #[slang(script = Devanagari)]
Wancho, #[slang(script = Devanagari)]
Sanskrit,
#[slang(script = Devanagari)]
SanskritVedic,
#[slang(script = Devanagari, lang = Math)]
MathDevanagari,
#[slang(script = Cyrillic)]
Russian, #[slang(script = Cyrillic)]
Ukrainian, #[slang(script = Cyrillic)]
Kazakh, #[slang(script = Cyrillic)]
Serbian, #[slang(script = Cyrillic)]
Tajik, #[slang(script = Cyrillic)]
Bulgarian, #[slang(script = Cyrillic)]
Kyrgyz, #[slang(script = Cyrillic)]
MongolianKhalkha, #[slang(script = Cyrillic)]
Belarusian, #[slang(script = Cyrillic)]
Tatar, #[slang(script = Cyrillic)]
Macedonian, #[slang(script = Cyrillic)]
Chechen, #[slang(script = Cyrillic)]
Bashkir, #[slang(script = Cyrillic)]
Chuvash, #[slang(script = Cyrillic)]
Ossetian, #[slang(script = Cyrillic)]
MariEastern, #[slang(script = Cyrillic)]
Buryat, #[slang(script = Cyrillic)]
Abkhaz, #[slang(script = Cyrillic)]
Nenets, #[slang(script = Cyrillic, lang = ChurchSlavonic)]
ChurchSlavonicOld,
#[slang(script = Cyrillic, lang = Unknown)]
UnknownCyrillic,
#[slang(script = Bengali)]
Bengali, #[slang(script = Bengali)]
Assamese, #[slang(script = Bengali, lang = Meitei)]
MeiteiBengali, #[slang(script = Bengali)]
BishnupriyaManipuri, #[slang(script = Bengali, lang = Math)]
MathBengali,
#[slang(script = Thai)]
Thai, #[slang(script = Thai)]
Isan, #[slang(script = Thai)]
NorthernThai,
#[slang(script = Kannada)]
Kannada, #[slang(script = Kannada, lang = Tulu)]
Tulu,
#[slang(script = Ethiopic)]
Amharic, #[slang(script = Ethiopic)]
Tigrinya, #[slang(script = Ethiopic)]
Geez,
#[slang(script = Myanmar)]
Burmese, #[slang(script = Myanmar)]
Shan, #[slang(script = Myanmar)]
KarenSgaw, #[slang(script = Myanmar)]
Mon,
#[slang(script = Oriya)]
Odia, #[slang(script = Oriya)]
Sambalpuri,
#[slang(script = Khmer)]
Khmer, #[slang(script = Khmer)]
KhmerNorthern,
#[slang(script = Nko)]
Manding, #[slang(script = Nko, lang = Bambara)]
BambaraNko,
#[slang(script = TaiTham, lang = NorthernThai)]
NorthernThaiTaiTham, #[slang(script = TaiTham, lang = Lao)]
LaoTaiTham, #[slang(script = TaiTham)]
TaiLue,
#[slang(script = Hebrew)]
Hebrew, #[slang(script = Hebrew)]
YiddishEastern,
#[slang(script = Buginese, lang = Buginese)]
BugineseBuginese, #[slang(script = Buginese, lang = Makassarese)]
MakassareseBuginese,
#[slang(script = Batak)]
TobaBatak, #[slang(script = Batak)]
Pakpak, #[slang(script = Batak)]
Simalungun, #[slang(script = Batak)]
Angkola, #[slang(script = Batak)]
Karo, #[slang(script = Batak, lang = Mandailing)]
MandailingBatak,
#[slang(script = Adlam, lang = FulaPular)]
FulaPularAdlam,
#[slang(script = Tifinagh)]
TamazightCentralAtlas,
#[slang(script = Tibetan)]
Tibetan, #[slang(script = Tibetan)]
Dzongkha,
#[slang(script = TaiViet)]
TaiDam, #[slang(script = TaiViet)]
TaiDon,
#[slang(script = Cham)]
ChamEastern, #[slang(script = Cham)]
ChamWestern,
#[slang(script = CanadianAboriginal)]
Cree, #[slang(script = CanadianAboriginal)]
Ojibwe, #[slang(script = CanadianAboriginal)]
Inuktitut,
#[slang(script = Mongolian, lang = MongolianKhalkha)]
MongolianKhalkhaMongolian, #[slang(script = Mongolian, lang = Oirat)]
OiratMongolian, #[slang(script = Mongolian)]
MongolianBuryat,
#[slang(script = KayahLi)]
KayahEastern,
#[slang(script = KayahLi)]
KayahWestern,
#[slang(script = Khojki, lang = Kutchi)]
KutchiKhojki,
#[slang(script = Khojki, lang = Sindhi)]
SindhiKhojki,
#[slang(script = Manichaean)]
MiddlePersianManichaean,
#[slang(script = Manichaean, lang = Sogdian)]
SogdianManichaean,
#[slang(script = Samaritan)]
AramaicSamaritan,
#[slang(script = Samaritan)]
HebrewSamaritan,
#[slang(script = Takri, lang = Dogri)]
DogriTakri,
#[slang(script = Takri, lang = DogriKangri)]
DogriKangriTakri,
#[slang(script = Takri, lang = Kashmiri)]
KashmiriTakri,
#[slang(script = TuluTigalari, lang = Tulu)]
TuluTigalari,
#[slang(script = TuluTigalari, lang = Kannada)]
KannadaTuluTigalari,
#[slang(script = TuluTigalari, lang = Sanskrit)]
SanskritTuluTigalari,
#[slang(script = Brahmi)]
Prakrit,
#[slang(script = Brahmi, lang = Sanskrit)]
SanskritBrahmi,
#[slang(script = Cuneiform)]
Akkadian,
#[slang(script = Cuneiform)]
Hittite,
#[slang(script = Cuneiform)]
LuwianCuneiform,
#[slang(script = Cuneiform)]
Sumerian,
#[slang(script = Duployan, lang = English)]
EnglishDuployan,
#[slang(script = Duployan, lang = French)]
FrenchDuployan,
#[slang(script = Grantha, lang = Tamil)]
TamilGrantha,
#[slang(script = Grantha, lang = Sanskrit)]
SanskritGrantha,
#[slang(script = Kaithi, lang = Bhojpuri)]
BhojpuriKaithi,
#[slang(script = Kaithi, lang = Hindi)]
HindiKaithi,
#[slang(script = Kaithi, lang = Magahi)]
MagahiKaithi,
#[slang(script = Kaithi, lang = Maithili)]
MaithiliKaithi,
#[slang(script = Kawi)]
OldJavanese,
#[slang(script = Kawi, lang = Sanskrit)]
SanskritKawi,
#[slang(script = Mahajani, lang = Hindi)]
HindiMahajani,
#[slang(script = Mahajani, lang = Marwari)]
MarwariMahajani,
#[slang(script = Mahajani, lang = PunjabiEastern)]
PunjabiEasternMahajani,
#[slang(script = OldItalic)]
Etruscan,
#[slang(script = OldItalic)]
Oscan,
#[slang(script = OldItalic)]
Umbrian,
#[slang(script = OldPermic, lang = KomiZyrian)]
KomiZyrianOldPermic, #[slang(script = OldPermic, lang = KomiPermyak)]
KomiPermyakOldPermic,
#[slang(script = PhagsPa, lang = MongolianKhalkha)]
MongolianKhalkhaPhagsPa,
#[slang(script = PhagsPa, lang = Tibetan)]
TibetanPhagsPa,
#[slang(script = Runic, lang = OldEnglish)]
OldEnglishRunic,
#[slang(script = Runic)]
OldNorse,
#[slang(script = Sharada, lang = Kashmiri)]
KashmiriSharada,
#[slang(script = Sharada, lang = Sanskrit)]
SanskritSharada,
#[slang(script = Soyombo, lang = Tibetan)]
TibetanSoyombo,
#[slang(script = Soyombo, lang = MongolianKhalkha)]
MongolianKhalkhaSoyombo,
#[slang(script = Soyombo, lang = Sanskrit)]
SanskritSoyombo,
#[slang(script = ZanabazarSquare, lang = MongolianKhalkha)]
MongolianKhalkhaZanabazarSquare,
#[slang(script = ZanabazarSquare, lang = Tibetan)]
TibetanZanabazarSquare,
#[slang(script = ZanabazarSquare, lang = Sanskrit)]
SanskritZanabazarSquare,
#[slang(script = Braille, lang = Math)]
MathBraille,
#[slang(script = Braille, lang = Unknown)]
UnknownBraille,
#[slang(script = Ahom)]
Ahom,
#[slang(script = Elbasan, lang = Albanian)]
AlbanianElbasan,
#[slang(script = Todhri, lang = Albanian)]
AlbanianTodhri,
#[slang(script = Vithkuqi, lang = AlbanianTosk)]
AlbanianToskVithkuqi,
#[slang(script = Cypriot)]
AncientGreek,
#[slang(script = OldNorthArabian)]
AncientNorthArabian,
#[slang(script = OldSouthArabian)]
AncientSouthArabian,
#[slang(script = Elymaic)]
AramaicElymaic,
#[slang(script = Hatran)]
AramaicHatran,
#[slang(script = ImperialAramaic)]
AramaicImperial,
#[slang(script = Mandaic)]
AramaicMandaic,
#[slang(script = Nabataean)]
AramaicNabataean,
#[slang(script = Palmyrene)]
AramaicPalmyrene,
#[slang(script = Syriac)]
AramaicSyriac,
#[slang(script = Armenian)]
Armenian,
#[slang(script = Avestan)]
Avestan,
#[slang(script = Balinese, lang = Balinese)]
BalineseBalinese,
#[slang(script = Bamum)]
Bamum,
#[slang(script = KiratRai)]
Bantawa,
#[slang(script = BassaVah)]
Bassa,
#[slang(script = OlOnal)]
Bhumij,
#[slang(script = Buhid)]
Buhid,
#[slang(script = Carian)]
Carian,
#[slang(script = CaucasianAlbanian)]
CaucasianAlbanian,
#[slang(script = Chakma)]
Chakma,
#[slang(script = Cherokee)]
Cherokee,
#[slang(script = Bopomofo, lang = ChineseMandarin)]
ChineseMandarinBopomofo,
#[slang(script = Nushu)]
ChineseTuhua,
#[slang(script = Chorasmian)]
Chorasmian,
#[slang(script = Glagolitic, lang = ChurchSlavonic)]
ChurchSlavonicOldGlagolitic,
#[slang(script = Coptic)]
Coptic,
#[slang(script = Thaana)]
Dhivehi,
#[slang(script = DivesAkuru, lang = Dhivehi)]
DhivehiDivesAkuru,
#[slang(script = Dogra, lang = Dogri)]
DogriDogra,
#[slang(script = EgyptianHieroglyphs)]
EgyptianHieroglyphs,
#[slang(script = Deseret, lang = English)]
EnglishDeseret,
#[slang(script = Shavian, lang = English)]
EnglishShavian,
#[slang(script = Tagalog, lang = Filipino)]
FilipinoTagalog,
#[slang(script = Kharoshthi)]
Gandhari,
#[slang(script = Georgian)]
Georgian,
#[slang(script = GunjalaGondi, lang = Gondi)]
GondiGunjala,
#[slang(script = MasaramGondi, lang = Gondi)]
GondiMasaram,
#[slang(script = Gothic)]
Gothic,
#[slang(script = Greek)]
Greek,
#[slang(script = Gujarati)]
Gujarati,
#[slang(script = GurungKhema, lang = Gurung)]
GurungKhema,
#[slang(script = Hanunoo)]
Hanunoo,
#[slang(script = Miao, lang = Hmong)]
HmongMiao,
#[slang(script = NyiakengPuachueHmong, lang = Hmong)]
HmongNyiakengPuachue,
#[slang(script = PahawhHmong, lang = Hmong)]
HmongPahawh,
#[slang(script = WarangCiti, lang = Ho)]
HoWarangCiti,
#[slang(script = OldHungarian, lang = Hungarian)]
HungarianOld,
#[slang(script = Javanese, lang = Javanese)]
JavaneseJavanese,
#[slang(script = KhitanSmallScript)]
Khitan,
#[slang(script = Yezidi, lang = KurdishNorthern)]
KurdishNorthernYezidi,
#[slang(script = TolongSiki, lang = Kurukh)]
KurukhTolongSiki,
#[slang(script = Lao)]
Lao,
#[slang(script = Lepcha)]
Lepcha,
#[slang(script = Limbu)]
Limbu,
#[slang(script = Lisu)]
Lisu,
#[slang(script = AnatolianHieroglyphs)]
LuwianHieroglyphic,
#[slang(script = Lycian)]
Lycian,
#[slang(script = Lydian)]
Lydian,
#[slang(script = Tirhuta, lang = Maithili)]
MaithiliTirhuta,
#[slang(script = Makasar, lang = Makassarese)]
MakassareseMakasar,
#[slang(script = Malayalam)]
Malayalam,
#[slang(script = Modi, lang = Marathi)]
MarathiModi,
#[slang(script = Medefaidrin)]
Medefaidrin,
#[slang(script = MeeteiMayek, lang = Meitei)]
MeiteiMeeteiMayek,
#[slang(script = MendeKikakui)]
Mende,
#[slang(script = MeroiticCursive, lang = Meroitic)]
MeroiticCursive,
#[slang(script = MeroiticHieroglyphs, lang = Meroitic)]
MeroiticHieroglyphs,
#[slang(script = InscriptionalPahlavi, lang = MiddlePersianPahlavi)]
MiddlePersianPahlaviInscriptional,
#[slang(script = PsalterPahlavi, lang = MiddlePersianPahlavi)]
MiddlePersianPahlaviPsalter,
#[slang(script = CyproMinoan)]
Minoan,
#[slang(script = LinearA)]
MinoanLinearA,
#[slang(script = Mro)]
Mro,
#[slang(script = NagMundari)]
Mundari,
#[slang(script = LinearB)]
MycenaeanGreek,
#[slang(script = Newa)]
Newar,
#[slang(script = Yi)]
Nuosu,
#[slang(script = Ogham, lang = OldIrish)]
OldIrishOgham,
#[slang(script = OldPersian)]
OldPersian,
#[slang(script = OldTurkic)]
OldTurkic,
#[slang(script = OldUyghur)]
OldUyghur,
#[slang(script = Osage)]
Osage,
#[slang(script = InscriptionalParthian)]
Parthian,
#[slang(script = Phoenician)]
Phoenician,
#[slang(script = Gurmukhi)]
PunjabiEastern,
#[slang(script = Rejang, lang = Rejang)]
RejangRejang,
#[slang(script = HanifiRohingya)]
Rohingya,
#[slang(script = Bhaiksuki, lang = Sanskrit)]
SanskritBhaiksuki,
#[slang(script = Nandinagari, lang = Sanskrit)]
SanskritNandinagari,
#[slang(script = Siddham, lang = Sanskrit)]
SanskritSiddham,
#[slang(script = OlChiki)]
Santali,
#[slang(script = Multani, lang = Saraiki)]
SaraikiMultani,
#[slang(script = Saurashtra, lang = Saurashtra)]
SaurashtraSaurashtra,
#[slang(script = Sidetic)]
Sidetic,
#[slang(script = SignWriting)]
SignLanguages,
#[slang(script = Khudawadi, lang = Sindhi)]
SindhiKhudawadi,
#[slang(script = Sinhala)]
Sinhala,
#[slang(script = Sogdian)]
Sogdian,
#[slang(script = OldSogdian, lang = Sogdian)]
SogdianOld,
#[slang(script = Osmanya, lang = Somali)]
SomaliOsmanya,
#[slang(script = SoraSompeng)]
Sora,
#[slang(script = Sundanese, lang = Sundanese)]
SundaneseSundanese,
#[slang(script = Sunuwar)]
Sunuwar,
#[slang(script = SylotiNagri)]
Sylheti,
#[slang(script = Tagbanwa)]
Tagbanwa,
#[slang(script = NewTaiLue, lang = TaiLue)]
TaiLueNew,
#[slang(script = TaiLe)]
TaiNuea,
#[slang(script = TaiYo, lang = TaiYo)]
TaiYoLaiTay,
#[slang(script = Tamil)]
Tamil,
#[slang(script = Tangsa)]
Tangsa,
#[slang(script = Tangut)]
Tangut,
#[slang(script = PauCinHau)]
Tedim,
#[slang(script = Telugu)]
Telugu,
#[slang(script = Toto)]
Toto,
#[slang(script = Ugaritic)]
Ugaritic,
#[slang(script = Vai)]
Vai,
#[slang(script = Wancho, lang = Wancho)]
WanchoWancho,
#[slang(script = Garay, lang = Wolof)]
WolofGaray,
#[slang(script = BeriaErfe, lang = Zaghawa)]
ZaghawaBeriaErfe,
#[slang(script = Marchen)]
Zhangzhung,
}
impl_try_from!(ScriptLanguage, u32, u32 i32 usize isize u64 i64 u128 i128);
impl_serde!(ScriptLanguage, "ScriptLanguage");
impl ScriptLanguage {
#[inline(always)]
pub fn all() -> impl Iterator<Item = Self> {
Self::iter()
}
#[inline]
pub fn all_with_script(script: UcdScript) -> &'static [Self] {
let ch = match script {
UcdScript::Cyrillic => 'А',
UcdScript::Latin => 'A',
_ => char::default(),
};
script_char_to_slangs(script, ch)
}
#[inline(always)]
pub const unsafe fn transmute_from_usize(v: usize) -> Self {
debug_assert!(v < Self::COUNT);
unsafe { ::core::mem::transmute::<usize, Self>(v) }
}
const fn hash() -> u64 {
let mut hash = 0;
let mut i = 0;
while i < Self::COUNT {
let mut lang_code = unsafe { Self::transmute_from_usize(i) }.into_code() as u64;
lang_code = lang_code.rotate_left(i as u32);
hash ^= lang_code;
i += 1;
}
hash
}
pub const HASH: u64 = Self::hash();
}
impl From<ScriptLanguage> for UcdScript {
#[inline]
fn from(sl: ScriptLanguage) -> Self {
UcdScript::from(Script::from(sl))
}
}
pub type ScriptLanguageArr<T> = [T; ScriptLanguage::COUNT];
#[inline(always)]
pub fn slang_arr_default<T: Default + Copy>() -> ScriptLanguageArr<T> {
[Default::default(); ScriptLanguage::COUNT]
}
#[inline]
pub fn slang_arr_default_nc<T: Default>() -> ScriptLanguageArr<T> {
::core::array::from_fn(|_| Default::default())
}