csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
542 lines
23 KiB
542 lines
23 KiB
using System.Collections.Generic;
|
|
|
|
namespace Avalonia.Media.TextFormatting.Unicode
|
|
{
|
|
internal static class PropertyValueAliasHelper
|
|
{
|
|
private static readonly Dictionary<Script, string> s_scriptToTag =
|
|
new Dictionary<Script, string>{
|
|
{ Script.Unknown, "Zzzz"},
|
|
{ Script.Common, "Zyyy"},
|
|
{ Script.Inherited, "Zinh"},
|
|
{ Script.Adlam, "Adlm"},
|
|
{ Script.CaucasianAlbanian, "Aghb"},
|
|
{ Script.Ahom, "Ahom"},
|
|
{ Script.Arabic, "Arab"},
|
|
{ Script.ImperialAramaic, "Armi"},
|
|
{ Script.Armenian, "Armn"},
|
|
{ Script.Avestan, "Avst"},
|
|
{ Script.Balinese, "Bali"},
|
|
{ Script.Bamum, "Bamu"},
|
|
{ Script.BassaVah, "Bass"},
|
|
{ Script.Batak, "Batk"},
|
|
{ Script.Bengali, "Beng"},
|
|
{ Script.Bhaiksuki, "Bhks"},
|
|
{ Script.Bopomofo, "Bopo"},
|
|
{ Script.Brahmi, "Brah"},
|
|
{ Script.Braille, "Brai"},
|
|
{ Script.Buginese, "Bugi"},
|
|
{ Script.Buhid, "Buhd"},
|
|
{ Script.Chakma, "Cakm"},
|
|
{ Script.CanadianAboriginal, "Cans"},
|
|
{ Script.Carian, "Cari"},
|
|
{ Script.Cham, "Cham"},
|
|
{ Script.Cherokee, "Cher"},
|
|
{ Script.Chorasmian, "Chrs"},
|
|
{ Script.Coptic, "Copt"},
|
|
{ Script.CyproMinoan, "Cpmn"},
|
|
{ Script.Cypriot, "Cprt"},
|
|
{ Script.Cyrillic, "Cyrl"},
|
|
{ Script.Devanagari, "Deva"},
|
|
{ Script.DivesAkuru, "Diak"},
|
|
{ Script.Dogra, "Dogr"},
|
|
{ Script.Deseret, "Dsrt"},
|
|
{ Script.Duployan, "Dupl"},
|
|
{ Script.EgyptianHieroglyphs, "Egyp"},
|
|
{ Script.Elbasan, "Elba"},
|
|
{ Script.Elymaic, "Elym"},
|
|
{ Script.Ethiopic, "Ethi"},
|
|
{ Script.Garay, "Gara"},
|
|
{ Script.Georgian, "Geor"},
|
|
{ Script.Glagolitic, "Glag"},
|
|
{ Script.GunjalaGondi, "Gong"},
|
|
{ Script.MasaramGondi, "Gonm"},
|
|
{ Script.Gothic, "Goth"},
|
|
{ Script.Grantha, "Gran"},
|
|
{ Script.Greek, "Grek"},
|
|
{ Script.Gujarati, "Gujr"},
|
|
{ Script.GurungKhema, "Gukh"},
|
|
{ Script.Gurmukhi, "Guru"},
|
|
{ Script.Hangul, "Hang"},
|
|
{ Script.Han, "Hani"},
|
|
{ Script.Hanunoo, "Hano"},
|
|
{ Script.Hatran, "Hatr"},
|
|
{ Script.Hebrew, "Hebr"},
|
|
{ Script.Hiragana, "Hira"},
|
|
{ Script.AnatolianHieroglyphs, "Hluw"},
|
|
{ Script.PahawhHmong, "Hmng"},
|
|
{ Script.NyiakengPuachueHmong, "Hmnp"},
|
|
{ Script.KatakanaOrHiragana, "Hrkt"},
|
|
{ Script.OldHungarian, "Hung"},
|
|
{ Script.OldItalic, "Ital"},
|
|
{ Script.Javanese, "Java"},
|
|
{ Script.KayahLi, "Kali"},
|
|
{ Script.Katakana, "Kana"},
|
|
{ Script.Kawi, "Kawi"},
|
|
{ Script.Kharoshthi, "Khar"},
|
|
{ Script.Khmer, "Khmr"},
|
|
{ Script.Khojki, "Khoj"},
|
|
{ Script.KhitanSmallScript, "Kits"},
|
|
{ Script.Kannada, "Knda"},
|
|
{ Script.KiratRai, "Krai"},
|
|
{ Script.Kaithi, "Kthi"},
|
|
{ Script.TaiTham, "Lana"},
|
|
{ Script.Lao, "Laoo"},
|
|
{ Script.Latin, "Latn"},
|
|
{ Script.Lepcha, "Lepc"},
|
|
{ Script.Limbu, "Limb"},
|
|
{ Script.LinearA, "Lina"},
|
|
{ Script.LinearB, "Linb"},
|
|
{ Script.Lisu, "Lisu"},
|
|
{ Script.Lycian, "Lyci"},
|
|
{ Script.Lydian, "Lydi"},
|
|
{ Script.Mahajani, "Mahj"},
|
|
{ Script.Makasar, "Maka"},
|
|
{ Script.Mandaic, "Mand"},
|
|
{ Script.Manichaean, "Mani"},
|
|
{ Script.Marchen, "Marc"},
|
|
{ Script.Medefaidrin, "Medf"},
|
|
{ Script.MendeKikakui, "Mend"},
|
|
{ Script.MeroiticCursive, "Merc"},
|
|
{ Script.MeroiticHieroglyphs, "Mero"},
|
|
{ Script.Malayalam, "Mlym"},
|
|
{ Script.Modi, "Modi"},
|
|
{ Script.Mongolian, "Mong"},
|
|
{ Script.Mro, "Mroo"},
|
|
{ Script.MeeteiMayek, "Mtei"},
|
|
{ Script.Multani, "Mult"},
|
|
{ Script.Myanmar, "Mymr"},
|
|
{ Script.NagMundari, "Nagm"},
|
|
{ Script.Nandinagari, "Nand"},
|
|
{ Script.OldNorthArabian, "Narb"},
|
|
{ Script.Nabataean, "Nbat"},
|
|
{ Script.Newa, "Newa"},
|
|
{ Script.Nko, "Nkoo"},
|
|
{ Script.Nushu, "Nshu"},
|
|
{ Script.Ogham, "Ogam"},
|
|
{ Script.OlChiki, "Olck"},
|
|
{ Script.OlOnal, "Onao"},
|
|
{ Script.OldTurkic, "Orkh"},
|
|
{ Script.Oriya, "Orya"},
|
|
{ Script.Osage, "Osge"},
|
|
{ Script.Osmanya, "Osma"},
|
|
{ Script.OldUyghur, "Ougr"},
|
|
{ Script.Palmyrene, "Palm"},
|
|
{ Script.PauCinHau, "Pauc"},
|
|
{ Script.OldPermic, "Perm"},
|
|
{ Script.PhagsPa, "Phag"},
|
|
{ Script.InscriptionalPahlavi, "Phli"},
|
|
{ Script.PsalterPahlavi, "Phlp"},
|
|
{ Script.Phoenician, "Phnx"},
|
|
{ Script.Miao, "Plrd"},
|
|
{ Script.InscriptionalParthian, "Prti"},
|
|
{ Script.Rejang, "Rjng"},
|
|
{ Script.HanifiRohingya, "Rohg"},
|
|
{ Script.Runic, "Runr"},
|
|
{ Script.Samaritan, "Samr"},
|
|
{ Script.OldSouthArabian, "Sarb"},
|
|
{ Script.Saurashtra, "Saur"},
|
|
{ Script.SignWriting, "Sgnw"},
|
|
{ Script.Shavian, "Shaw"},
|
|
{ Script.Sharada, "Shrd"},
|
|
{ Script.Siddham, "Sidd"},
|
|
{ Script.Khudawadi, "Sind"},
|
|
{ Script.Sinhala, "Sinh"},
|
|
{ Script.Sogdian, "Sogd"},
|
|
{ Script.OldSogdian, "Sogo"},
|
|
{ Script.SoraSompeng, "Sora"},
|
|
{ Script.Soyombo, "Soyo"},
|
|
{ Script.Sundanese, "Sund"},
|
|
{ Script.Sunuwar, "Sunu"},
|
|
{ Script.SylotiNagri, "Sylo"},
|
|
{ Script.Syriac, "Syrc"},
|
|
{ Script.Tagbanwa, "Tagb"},
|
|
{ Script.Takri, "Takr"},
|
|
{ Script.TaiLe, "Tale"},
|
|
{ Script.NewTaiLue, "Talu"},
|
|
{ Script.Tamil, "Taml"},
|
|
{ Script.Tangut, "Tang"},
|
|
{ Script.TaiViet, "Tavt"},
|
|
{ Script.Telugu, "Telu"},
|
|
{ Script.Tifinagh, "Tfng"},
|
|
{ Script.Tagalog, "Tglg"},
|
|
{ Script.Thaana, "Thaa"},
|
|
{ Script.Thai, "Thai"},
|
|
{ Script.Tibetan, "Tibt"},
|
|
{ Script.Tirhuta, "Tirh"},
|
|
{ Script.Tangsa, "Tnsa"},
|
|
{ Script.Todhri, "Todr"},
|
|
{ Script.Toto, "Toto"},
|
|
{ Script.TuluTigalari, "Tutg"},
|
|
{ Script.Ugaritic, "Ugar"},
|
|
{ Script.Vai, "Vaii"},
|
|
{ Script.Vithkuqi, "Vith"},
|
|
{ Script.WarangCiti, "Wara"},
|
|
{ Script.Wancho, "Wcho"},
|
|
{ Script.OldPersian, "Xpeo"},
|
|
{ Script.Cuneiform, "Xsux"},
|
|
{ Script.Yezidi, "Yezi"},
|
|
{ Script.Yi, "Yiii"},
|
|
{ Script.ZanabazarSquare, "Zanb"},
|
|
};
|
|
|
|
public static string GetTag(Script script)
|
|
{
|
|
if (!s_scriptToTag.TryGetValue(script, out var value))
|
|
{
|
|
return "Zzzz";
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private static readonly Dictionary<string, Script> s_tagToScript =
|
|
new Dictionary<string,Script>{
|
|
{ "Zzzz", Script.Unknown},
|
|
{ "Zyyy", Script.Common},
|
|
{ "Zinh", Script.Inherited},
|
|
{ "Adlm", Script.Adlam},
|
|
{ "Aghb", Script.CaucasianAlbanian},
|
|
{ "Ahom", Script.Ahom},
|
|
{ "Arab", Script.Arabic},
|
|
{ "Armi", Script.ImperialAramaic},
|
|
{ "Armn", Script.Armenian},
|
|
{ "Avst", Script.Avestan},
|
|
{ "Bali", Script.Balinese},
|
|
{ "Bamu", Script.Bamum},
|
|
{ "Bass", Script.BassaVah},
|
|
{ "Batk", Script.Batak},
|
|
{ "Beng", Script.Bengali},
|
|
{ "Bhks", Script.Bhaiksuki},
|
|
{ "Bopo", Script.Bopomofo},
|
|
{ "Brah", Script.Brahmi},
|
|
{ "Brai", Script.Braille},
|
|
{ "Bugi", Script.Buginese},
|
|
{ "Buhd", Script.Buhid},
|
|
{ "Cakm", Script.Chakma},
|
|
{ "Cans", Script.CanadianAboriginal},
|
|
{ "Cari", Script.Carian},
|
|
{ "Cham", Script.Cham},
|
|
{ "Cher", Script.Cherokee},
|
|
{ "Chrs", Script.Chorasmian},
|
|
{ "Copt", Script.Coptic},
|
|
{ "Cpmn", Script.CyproMinoan},
|
|
{ "Cprt", Script.Cypriot},
|
|
{ "Cyrl", Script.Cyrillic},
|
|
{ "Deva", Script.Devanagari},
|
|
{ "Diak", Script.DivesAkuru},
|
|
{ "Dogr", Script.Dogra},
|
|
{ "Dsrt", Script.Deseret},
|
|
{ "Dupl", Script.Duployan},
|
|
{ "Egyp", Script.EgyptianHieroglyphs},
|
|
{ "Elba", Script.Elbasan},
|
|
{ "Elym", Script.Elymaic},
|
|
{ "Ethi", Script.Ethiopic},
|
|
{ "Gara", Script.Garay},
|
|
{ "Geor", Script.Georgian},
|
|
{ "Glag", Script.Glagolitic},
|
|
{ "Gong", Script.GunjalaGondi},
|
|
{ "Gonm", Script.MasaramGondi},
|
|
{ "Goth", Script.Gothic},
|
|
{ "Gran", Script.Grantha},
|
|
{ "Grek", Script.Greek},
|
|
{ "Gujr", Script.Gujarati},
|
|
{ "Gukh", Script.GurungKhema},
|
|
{ "Guru", Script.Gurmukhi},
|
|
{ "Hang", Script.Hangul},
|
|
{ "Hani", Script.Han},
|
|
{ "Hano", Script.Hanunoo},
|
|
{ "Hatr", Script.Hatran},
|
|
{ "Hebr", Script.Hebrew},
|
|
{ "Hira", Script.Hiragana},
|
|
{ "Hluw", Script.AnatolianHieroglyphs},
|
|
{ "Hmng", Script.PahawhHmong},
|
|
{ "Hmnp", Script.NyiakengPuachueHmong},
|
|
{ "Hrkt", Script.KatakanaOrHiragana},
|
|
{ "Hung", Script.OldHungarian},
|
|
{ "Ital", Script.OldItalic},
|
|
{ "Java", Script.Javanese},
|
|
{ "Kali", Script.KayahLi},
|
|
{ "Kana", Script.Katakana},
|
|
{ "Kawi", Script.Kawi},
|
|
{ "Khar", Script.Kharoshthi},
|
|
{ "Khmr", Script.Khmer},
|
|
{ "Khoj", Script.Khojki},
|
|
{ "Kits", Script.KhitanSmallScript},
|
|
{ "Knda", Script.Kannada},
|
|
{ "Krai", Script.KiratRai},
|
|
{ "Kthi", Script.Kaithi},
|
|
{ "Lana", Script.TaiTham},
|
|
{ "Laoo", Script.Lao},
|
|
{ "Latn", Script.Latin},
|
|
{ "Lepc", Script.Lepcha},
|
|
{ "Limb", Script.Limbu},
|
|
{ "Lina", Script.LinearA},
|
|
{ "Linb", Script.LinearB},
|
|
{ "Lisu", Script.Lisu},
|
|
{ "Lyci", Script.Lycian},
|
|
{ "Lydi", Script.Lydian},
|
|
{ "Mahj", Script.Mahajani},
|
|
{ "Maka", Script.Makasar},
|
|
{ "Mand", Script.Mandaic},
|
|
{ "Mani", Script.Manichaean},
|
|
{ "Marc", Script.Marchen},
|
|
{ "Medf", Script.Medefaidrin},
|
|
{ "Mend", Script.MendeKikakui},
|
|
{ "Merc", Script.MeroiticCursive},
|
|
{ "Mero", Script.MeroiticHieroglyphs},
|
|
{ "Mlym", Script.Malayalam},
|
|
{ "Modi", Script.Modi},
|
|
{ "Mong", Script.Mongolian},
|
|
{ "Mroo", Script.Mro},
|
|
{ "Mtei", Script.MeeteiMayek},
|
|
{ "Mult", Script.Multani},
|
|
{ "Mymr", Script.Myanmar},
|
|
{ "Nagm", Script.NagMundari},
|
|
{ "Nand", Script.Nandinagari},
|
|
{ "Narb", Script.OldNorthArabian},
|
|
{ "Nbat", Script.Nabataean},
|
|
{ "Newa", Script.Newa},
|
|
{ "Nkoo", Script.Nko},
|
|
{ "Nshu", Script.Nushu},
|
|
{ "Ogam", Script.Ogham},
|
|
{ "Olck", Script.OlChiki},
|
|
{ "Onao", Script.OlOnal},
|
|
{ "Orkh", Script.OldTurkic},
|
|
{ "Orya", Script.Oriya},
|
|
{ "Osge", Script.Osage},
|
|
{ "Osma", Script.Osmanya},
|
|
{ "Ougr", Script.OldUyghur},
|
|
{ "Palm", Script.Palmyrene},
|
|
{ "Pauc", Script.PauCinHau},
|
|
{ "Perm", Script.OldPermic},
|
|
{ "Phag", Script.PhagsPa},
|
|
{ "Phli", Script.InscriptionalPahlavi},
|
|
{ "Phlp", Script.PsalterPahlavi},
|
|
{ "Phnx", Script.Phoenician},
|
|
{ "Plrd", Script.Miao},
|
|
{ "Prti", Script.InscriptionalParthian},
|
|
{ "Rjng", Script.Rejang},
|
|
{ "Rohg", Script.HanifiRohingya},
|
|
{ "Runr", Script.Runic},
|
|
{ "Samr", Script.Samaritan},
|
|
{ "Sarb", Script.OldSouthArabian},
|
|
{ "Saur", Script.Saurashtra},
|
|
{ "Sgnw", Script.SignWriting},
|
|
{ "Shaw", Script.Shavian},
|
|
{ "Shrd", Script.Sharada},
|
|
{ "Sidd", Script.Siddham},
|
|
{ "Sind", Script.Khudawadi},
|
|
{ "Sinh", Script.Sinhala},
|
|
{ "Sogd", Script.Sogdian},
|
|
{ "Sogo", Script.OldSogdian},
|
|
{ "Sora", Script.SoraSompeng},
|
|
{ "Soyo", Script.Soyombo},
|
|
{ "Sund", Script.Sundanese},
|
|
{ "Sunu", Script.Sunuwar},
|
|
{ "Sylo", Script.SylotiNagri},
|
|
{ "Syrc", Script.Syriac},
|
|
{ "Tagb", Script.Tagbanwa},
|
|
{ "Takr", Script.Takri},
|
|
{ "Tale", Script.TaiLe},
|
|
{ "Talu", Script.NewTaiLue},
|
|
{ "Taml", Script.Tamil},
|
|
{ "Tang", Script.Tangut},
|
|
{ "Tavt", Script.TaiViet},
|
|
{ "Telu", Script.Telugu},
|
|
{ "Tfng", Script.Tifinagh},
|
|
{ "Tglg", Script.Tagalog},
|
|
{ "Thaa", Script.Thaana},
|
|
{ "Thai", Script.Thai},
|
|
{ "Tibt", Script.Tibetan},
|
|
{ "Tirh", Script.Tirhuta},
|
|
{ "Tnsa", Script.Tangsa},
|
|
{ "Todr", Script.Todhri},
|
|
{ "Toto", Script.Toto},
|
|
{ "Tutg", Script.TuluTigalari},
|
|
{ "Ugar", Script.Ugaritic},
|
|
{ "Vaii", Script.Vai},
|
|
{ "Vith", Script.Vithkuqi},
|
|
{ "Wara", Script.WarangCiti},
|
|
{ "Wcho", Script.Wancho},
|
|
{ "Xpeo", Script.OldPersian},
|
|
{ "Xsux", Script.Cuneiform},
|
|
{ "Yezi", Script.Yezidi},
|
|
{ "Yiii", Script.Yi},
|
|
{ "Zanb", Script.ZanabazarSquare},
|
|
};
|
|
|
|
public static Script GetScript(string tag)
|
|
{
|
|
if (!s_tagToScript.TryGetValue(tag, out var value))
|
|
{
|
|
return Script.Unknown;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private static readonly Dictionary<string, GeneralCategory> s_tagToGeneralCategory =
|
|
new Dictionary<string,GeneralCategory>{
|
|
{ "C", GeneralCategory.Other},
|
|
{ "Cc", GeneralCategory.Control},
|
|
{ "Cf", GeneralCategory.Format},
|
|
{ "Cn", GeneralCategory.Unassigned},
|
|
{ "Co", GeneralCategory.PrivateUse},
|
|
{ "Cs", GeneralCategory.Surrogate},
|
|
{ "L", GeneralCategory.Letter},
|
|
{ "LC", GeneralCategory.CasedLetter},
|
|
{ "Ll", GeneralCategory.LowercaseLetter},
|
|
{ "Lm", GeneralCategory.ModifierLetter},
|
|
{ "Lo", GeneralCategory.OtherLetter},
|
|
{ "Lt", GeneralCategory.TitlecaseLetter},
|
|
{ "Lu", GeneralCategory.UppercaseLetter},
|
|
{ "M", GeneralCategory.Mark},
|
|
{ "Mc", GeneralCategory.SpacingMark},
|
|
{ "Me", GeneralCategory.EnclosingMark},
|
|
{ "Mn", GeneralCategory.NonspacingMark},
|
|
{ "N", GeneralCategory.Number},
|
|
{ "Nd", GeneralCategory.DecimalNumber},
|
|
{ "Nl", GeneralCategory.LetterNumber},
|
|
{ "No", GeneralCategory.OtherNumber},
|
|
{ "P", GeneralCategory.Punctuation},
|
|
{ "Pc", GeneralCategory.ConnectorPunctuation},
|
|
{ "Pd", GeneralCategory.DashPunctuation},
|
|
{ "Pe", GeneralCategory.ClosePunctuation},
|
|
{ "Pf", GeneralCategory.FinalPunctuation},
|
|
{ "Pi", GeneralCategory.InitialPunctuation},
|
|
{ "Po", GeneralCategory.OtherPunctuation},
|
|
{ "Ps", GeneralCategory.OpenPunctuation},
|
|
{ "S", GeneralCategory.Symbol},
|
|
{ "Sc", GeneralCategory.CurrencySymbol},
|
|
{ "Sk", GeneralCategory.ModifierSymbol},
|
|
{ "Sm", GeneralCategory.MathSymbol},
|
|
{ "So", GeneralCategory.OtherSymbol},
|
|
{ "Z", GeneralCategory.Separator},
|
|
{ "Zl", GeneralCategory.LineSeparator},
|
|
{ "Zp", GeneralCategory.ParagraphSeparator},
|
|
{ "Zs", GeneralCategory.SpaceSeparator},
|
|
};
|
|
|
|
public static GeneralCategory GetGeneralCategory(string tag)
|
|
{
|
|
if (!s_tagToGeneralCategory.TryGetValue(tag, out var value))
|
|
{
|
|
return GeneralCategory.Other;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private static readonly Dictionary<string, LineBreakClass> s_tagToLineBreakClass =
|
|
new Dictionary<string,LineBreakClass>{
|
|
{ "OP", LineBreakClass.OpenPunctuation},
|
|
{ "CL", LineBreakClass.ClosePunctuation},
|
|
{ "CP", LineBreakClass.CloseParenthesis},
|
|
{ "QU", LineBreakClass.Quotation},
|
|
{ "GL", LineBreakClass.Glue},
|
|
{ "NS", LineBreakClass.Nonstarter},
|
|
{ "EX", LineBreakClass.Exclamation},
|
|
{ "SY", LineBreakClass.BreakSymbols},
|
|
{ "IS", LineBreakClass.InfixNumeric},
|
|
{ "PR", LineBreakClass.PrefixNumeric},
|
|
{ "PO", LineBreakClass.PostfixNumeric},
|
|
{ "NU", LineBreakClass.Numeric},
|
|
{ "AL", LineBreakClass.Alphabetic},
|
|
{ "HL", LineBreakClass.HebrewLetter},
|
|
{ "ID", LineBreakClass.Ideographic},
|
|
{ "IN", LineBreakClass.Inseparable},
|
|
{ "HY", LineBreakClass.Hyphen},
|
|
{ "BA", LineBreakClass.BreakAfter},
|
|
{ "BB", LineBreakClass.BreakBefore},
|
|
{ "B2", LineBreakClass.BreakBoth},
|
|
{ "ZW", LineBreakClass.ZWSpace},
|
|
{ "CM", LineBreakClass.CombiningMark},
|
|
{ "WJ", LineBreakClass.WordJoiner},
|
|
{ "H2", LineBreakClass.H2},
|
|
{ "H3", LineBreakClass.H3},
|
|
{ "JL", LineBreakClass.JL},
|
|
{ "JV", LineBreakClass.JV},
|
|
{ "JT", LineBreakClass.JT},
|
|
{ "RI", LineBreakClass.RegionalIndicator},
|
|
{ "EB", LineBreakClass.EBase},
|
|
{ "EM", LineBreakClass.EModifier},
|
|
{ "ZWJ", LineBreakClass.ZWJ},
|
|
{ "CB", LineBreakClass.ContingentBreak},
|
|
{ "XX", LineBreakClass.Unknown},
|
|
{ "AI", LineBreakClass.Ambiguous},
|
|
{ "AK", LineBreakClass.Aksara},
|
|
{ "AP", LineBreakClass.AksaraPrebase},
|
|
{ "AS", LineBreakClass.AksaraStart},
|
|
{ "BK", LineBreakClass.MandatoryBreak},
|
|
{ "CJ", LineBreakClass.ConditionalJapaneseStarter},
|
|
{ "CR", LineBreakClass.CarriageReturn},
|
|
{ "LF", LineBreakClass.LineFeed},
|
|
{ "NL", LineBreakClass.NextLine},
|
|
{ "SA", LineBreakClass.ComplexContext},
|
|
{ "SG", LineBreakClass.Surrogate},
|
|
{ "SP", LineBreakClass.Space},
|
|
{ "VF", LineBreakClass.ViramaFinal},
|
|
{ "VI", LineBreakClass.Virama},
|
|
};
|
|
|
|
public static LineBreakClass GetLineBreakClass(string tag)
|
|
{
|
|
if (!s_tagToLineBreakClass.TryGetValue(tag, out var value))
|
|
{
|
|
return LineBreakClass.Unknown;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private static readonly Dictionary<string, BidiPairedBracketType> s_tagToBidiPairedBracketType =
|
|
new Dictionary<string,BidiPairedBracketType>{
|
|
{ "n", BidiPairedBracketType.None},
|
|
{ "c", BidiPairedBracketType.Close},
|
|
{ "o", BidiPairedBracketType.Open},
|
|
};
|
|
|
|
public static BidiPairedBracketType GetBidiPairedBracketType(string tag)
|
|
{
|
|
if (!s_tagToBidiPairedBracketType.TryGetValue(tag, out var value))
|
|
{
|
|
return BidiPairedBracketType.None;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private static readonly Dictionary<string, BidiClass> s_tagToBidiClass =
|
|
new Dictionary<string,BidiClass>{
|
|
{ "L", BidiClass.LeftToRight},
|
|
{ "AL", BidiClass.ArabicLetter},
|
|
{ "AN", BidiClass.ArabicNumber},
|
|
{ "B", BidiClass.ParagraphSeparator},
|
|
{ "BN", BidiClass.BoundaryNeutral},
|
|
{ "CS", BidiClass.CommonSeparator},
|
|
{ "EN", BidiClass.EuropeanNumber},
|
|
{ "ES", BidiClass.EuropeanSeparator},
|
|
{ "ET", BidiClass.EuropeanTerminator},
|
|
{ "FSI", BidiClass.FirstStrongIsolate},
|
|
{ "LRE", BidiClass.LeftToRightEmbedding},
|
|
{ "LRI", BidiClass.LeftToRightIsolate},
|
|
{ "LRO", BidiClass.LeftToRightOverride},
|
|
{ "NSM", BidiClass.NonspacingMark},
|
|
{ "ON", BidiClass.OtherNeutral},
|
|
{ "PDF", BidiClass.PopDirectionalFormat},
|
|
{ "PDI", BidiClass.PopDirectionalIsolate},
|
|
{ "R", BidiClass.RightToLeft},
|
|
{ "RLE", BidiClass.RightToLeftEmbedding},
|
|
{ "RLI", BidiClass.RightToLeftIsolate},
|
|
{ "RLO", BidiClass.RightToLeftOverride},
|
|
{ "S", BidiClass.SegmentSeparator},
|
|
{ "WS", BidiClass.WhiteSpace},
|
|
};
|
|
|
|
public static BidiClass GetBidiClass(string tag)
|
|
{
|
|
if (!s_tagToBidiClass.TryGetValue(tag, out var value))
|
|
{
|
|
return BidiClass.LeftToRight;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
}
|
|
}
|
|
|