using System; using System.Collections; using System.Drawing; using System.ComponentModel; using System.Globalization; using System.IO; using System.Collections.Specialized; using System.Text; namespace FastReport.Utils { /// /// Contains methods that peform string to object and vice versa conversions. /// public static class Converter { /// /// Converts an object to a string. /// /// The object to convert. /// The string that contains the converted value. public static string ToString(object value) { if (value == null) return ""; if (value is string) return (string)value; if (value is float) return ((float)value).ToString(CultureInfo.InvariantCulture.NumberFormat); if (value is double) return ((double)value).ToString(CultureInfo.InvariantCulture.NumberFormat); if (value is Enum) return Enum.Format(value.GetType(), value, "G"); if (value is Image) { using (MemoryStream stream = new MemoryStream()) { ImageHelper.Save(value as Image, stream); return Convert.ToBase64String(stream.ToArray()); } } if (value is Stream) { Stream stream = value as Stream; byte[] bytes = new byte[stream.Length]; stream.Position = 0; stream.Read(bytes, 0, bytes.Length); return Convert.ToBase64String(bytes); } if (value is byte[]) { return Convert.ToBase64String((byte[])value); } if (value is string[]) { string result = ""; foreach (string s in (value as string[])) { result += s + "\r\n"; } if (result.EndsWith("\r\n")) result = result.Remove(result.Length - 2); return result; } if (value is Type) { Type type = (Type)value; bool shortTypeName = type.Assembly.FullName.StartsWith("mscorlib") || type.Assembly == typeof(Converter).Assembly || type.Assembly.FullName.StartsWith("System.Private.CoreLib"); if (shortTypeName) return type.FullName; return type.AssemblyQualifiedName; } #if true// | CROSSPLATFORM if (value is Font) { return new TypeConverters.FontConverter().ConvertToInvariantString(value); } #endif if(value is System.Drawing.Imaging.ImageFormat) { var imageFormat = value as System.Drawing.Imaging.ImageFormat; return imageFormat.ToString(); } return TypeDescriptor.GetConverter(value).ConvertToInvariantString(value); } /// /// Converts a value to a string using the specified converter. /// /// The object to convert. /// The type of converter. /// The string that contains the converted value. public static string ToString(object value, Type converterType) { TypeConverter converter = Activator.CreateInstance(converterType) as TypeConverter; return converter.ConvertToInvariantString(value); } /// /// Converts a string value to the specified data type. /// /// The data type to convert to. /// The string to convert from. /// The object of type specified in the type parameter that contains /// a converted value. public static object FromString(Type type, string value) { if (type == typeof(string)) return value; if (value == null || value == "") return null; if (type == typeof(float)) return float.Parse(value, CultureInfo.InvariantCulture.NumberFormat); if (type == typeof(double)) return double.Parse(value, CultureInfo.InvariantCulture.NumberFormat); if (type == typeof(Enum)) return Enum.Parse(type, value); if (type == typeof(Image) || type == typeof(Bitmap)) return ImageHelper.Load(Convert.FromBase64String(value)); if (type == typeof(Stream)) return new MemoryStream(Convert.FromBase64String(value)); if (type == typeof(byte[])) return Convert.FromBase64String(value); if (type == typeof(Type)) return Type.GetType(value); if (type == typeof(string[])) { value = value.Replace("\r\n", "\r"); return value.Split('\r'); } #if true //CROSSPLATFORM if (type == typeof(Font)) { return new TypeConverters.FontConverter().ConvertFromInvariantString(value); } #endif if (type == typeof(Color)) return new ColorConverter().ConvertFromInvariantString(value); return TypeDescriptor.GetConverter(type).ConvertFromInvariantString(value); } /// /// Converts a string to an object using the specified converter. /// /// The string to convert. /// The type of converter. /// The object that contains the converted value. public static object FromString(string value, Type converterType) { TypeConverter converter = Activator.CreateInstance(converterType) as TypeConverter; return converter.ConvertFromInvariantString(value); } /// /// Converts a string containing special symbols to the xml-compatible string. /// /// The string to convert. /// The result string. /// /// This method replaces some special symbols like <, > into xml-compatible /// form: &lt;, &gt;. To convert such string back to original form, use the /// method. /// public static string ToXml(string s) { return ToXml(s, true); } /// /// Converts a string containing special symbols to the xml-compatible string. /// /// The string to convert. /// Determines whether it is necessary to convert cr-lf symbols to xml form. /// The result string. public static string ToXml(string s, bool convertCrlf) { FastString result = new FastString(s.Length); for (int i = 0; i < s.Length; i++) { switch (s[i]) { case '\n': case '\r': if (convertCrlf) result.Append("&#" + (int)s[i] + ";"); else result.Append(s[i]); break; case '"': result.Append("""); break; case '&': result.Append("&"); break; case '<': result.Append("<"); break; case '>': result.Append(">"); break; default: result.Append(s[i]); break; } } return result.ToString(); } /// /// Converts a value to xml-compatible string. /// /// The value to convert. /// The result string. public static string ToXml(object value) { return ToXml(ToString(value)); } /// /// Convert the xml-compatible string to the regular one. /// /// The string to convert. /// The result string. /// /// This is counterpart to the method. /// public static string FromXml(string s) { FastString result = new FastString(s.Length); int i = 0; while (i < s.Length) { if (s[i] == '&') { if (i + 3 < s.Length && s[i + 1] == '#') { int j = i + 3; j = s.IndexOf(";", j, s.Length - j); if (j == -1) throw new FormatException(); if (s[i + 2] == 'x') { char hexChar = (char)int.Parse(s.Substring(i + 3, j - i - 3), NumberStyles.AllowHexSpecifier); result.Append(hexChar); } else { result.Append((char)int.Parse(s.Substring(i + 2, j - i - 2))); } i = j; } else if (i + 5 < s.Length && s.Substring(i + 1, 5) == "quot;") { result.Append('"'); i += 5; } else if (i + 4 < s.Length && s.Substring(i + 1, 4) == "amp;") { result.Append('&'); i += 4; } else if (i + 3 < s.Length && s.Substring(i + 1, 3) == "lt;") { result.Append('<'); i += 3; } else if (i + 3 < s.Length && s.Substring(i + 1, 3) == "gt;") { result.Append('>'); i += 3; } else result.Append(s[i]); } else result.Append(s[i]); i++; } return result.ToString(); } /// /// Decreases the precision of floating-point value. /// /// The initial value. /// The number of decimal digits in the fraction. /// The value with lesser precision. public static float DecreasePrecision(float value, int precision) { return (float)Math.Round(value, precision); } /// /// Converts a string value to the float. /// /// The string value to convert. /// The float value. /// /// Both "." or "," decimal separators are allowed. /// public static float StringToFloat(string value) { string currentSeparator = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; return StringToFloat(value, currentSeparator); } /// /// Converts a string value to the float. /// /// The string value to convert. /// Indicates whether to ignore non-digit symbols. /// The float value. public static float StringToFloat(string value, bool removeNonDigit) { string currentSeparator = CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator; return StringToFloat(value, currentSeparator, removeNonDigit); } /// /// Converts a string value to the float. /// /// The string value to convert. /// Decimal separator. /// The float value. public static float StringToFloat(string value, string separator/*, string negativeSign*/) { return (float)FromString(typeof(float), value.Replace(separator, ".")/*.Replace(negativeSign, "-")*/); } /// /// Converts a string value to the float. /// /// The string value to convert. /// Decimal separator. /// Indicates whether to ignore non-digit symbols. /// The float value. public static float StringToFloat(string value, string separator,/* string negativeSign,*/ bool removeNonDigit) { System.Text.StringBuilder result = new System.Text.StringBuilder(); int separatorPos = value.IndexOf(separator); if (separatorPos == -1) separatorPos = value.IndexOf('.'); if (value.Contains(/*negativeSign*/"-")) result.Append('-'); for (int i = 0; i < value.Length; i++) { if (value[i] >= '0' && value[i] <= '9') result.Append(value[i]); if (i == separatorPos) result.Append('.'); if (i < separatorPos + separator.Length) continue; } try { if (result.Length != 0) return (float)FromString(typeof(float), result.ToString()); } catch { } return 0; } /// /// Converts the string containing several text lines to a collection of strings. /// /// The string to convert. /// The collection instance. public static void StringToIList(string text, IList list) { list.Clear(); string[] lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.None); foreach (string s in lines) { list.Add(s); } } /// /// Converts a collection of strings to a string. /// /// The collection to convert. /// The string that contains all lines from the collection. public static string IListToString(IList list) { string text = ""; foreach (object obj in list) { text += obj.ToString() + "\r\n"; } if (text.EndsWith("\r\n")) text = text.Remove(text.Length - 2); return text; } /// /// Converts null value to 0, false, empty string, depending on type. /// /// The data type. /// The value of the type data type. public static object ConvertNull(Type type) { if (type == typeof(string)) return ""; else if (type == typeof(char)) return ' '; else if (type == typeof(DateTime)) return DateTime.MinValue; else if (type == typeof(TimeSpan)) return TimeSpan.Zero; else if (type == typeof(Guid)) return Guid.Empty; else if (type == typeof(bool)) return false; else if (type == typeof(byte[])) return null; else if (type.IsClass) return null; else if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) return null; return Convert.ChangeType(0, type); } /// /// Converts string value to byte[]. /// /// The string to convert /// The value of the byte[] data type. public static byte[] StringToByteArray(string Str) { System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); return encoding.GetBytes(Str); } /// /// Converts a string to NameValueCollection. /// /// The string to convert. /// The NameValueCollection that contains the name/value pairs. public static NameValueCollection StringToNameValueCollection(string text) { NameValueCollection collection = new NameValueCollection(); int start = 0; while (start < text.Length) { // skip spaces for (; start < text.Length && text[start] == ' '; start++) { } // find '=' int end = start; for (; end < text.Length && text[end] != '='; end++) { } // '=' not found, break if (end >= text.Length) break; // get name/value string name = text.Substring(start, end - start); string value = ""; start = end + 1; // no value, break if (start >= text.Length) break; if (text[start] == '"') { // value is inside quotes, find trailing '"' start++; for (end = start; end < text.Length && text[end] != '"'; end++) { } // '"' not found, break if (end == text.Length) break; value = text.Substring(start, end - start); start = end + 1; } else { // get the value till ' ' or eol for (end = start; end < text.Length && text[end] != ' '; end++) { } value = text.Substring(start, end - start); start = end; } collection.Add(name, value); } return collection; } /// /// Convert &amp;&Tab;&quot; etc to symbol and return result as string /// /// String for processing /// Position for processing /// Result of processing /// True if successful public static bool FromHtmlEntities(string text, ref int position, out string result) { StringBuilder fastString = new StringBuilder(2); if (FromHtmlEntities(text, ref position, fastString)) { result = fastString.ToString(); return true; } else { result = ""; return false; } } /// /// Convert &amp;&Tab;&quot; etc to symbol and return result as string /// /// String for processing /// Position for processing /// Append result of processing to FastString /// True if successful public static bool FromHtmlEntities(string text, ref int position, StringBuilder result) { if (text[position] != '&') return false; int end = text.IndexOf(';', position); if (end <= position + 1) return false; if (text[position + 1] == '#') { if (text[position + 2] == 'x') { //hex StringBuilder fastString = new StringBuilder(end - position); for (int i = position + 3; i < end; i++) { if (!Uri.IsHexDigit(text[i])) return false; fastString.Append(text[i]); } try { int value = Convert.ToInt32(fastString.ToString(), 16); if (value > char.MaxValue) result.Append(Char.ConvertFromUtf32(value)); else result.Append((char)value); position = end; return true; } catch { return false; } } else { //dec FastString fastString = new FastString(end - position); for (int i = position + 2; i < end; i++) { if (!Char.IsDigit(text[i])) return false; fastString.Append(text[i]); } try { int value = Convert.ToInt32(fastString.ToString(), 10); if (value > char.MaxValue) result.Append(Char.ConvertFromUtf32(value)); else result.Append((char)value); position = end; return true; } catch { return false; } } } int code = GetCode(text.Substring(position, end - position + 1 )); if (code == 0) return false; if (code > char.MaxValue) result.Append(Char.ConvertFromUtf32(code)); else result.Append((char)code); position = end; return true; } private static int GetCode(string text) { switch(text) { case " ": return 9; case " ": return 10; case "!": return 33; case """: return 34; case """: return 34; case "#": return 35; case "$": return 36; case "%": return 37; case "&": return 38; case "&": return 38; case "'": return 39; case "(": return 40; case ")": return 41; case "*": return 42; case "*": return 42; case "+": return 43; case ",": return 44; case ".": return 46; case "/": return 47; case ":": return 58; case ";": return 59; case "<": return 60; case "<": return 60; case "=": return 61; case ">": return 62; case ">": return 62; case "?": return 63; case "@": return 64; case "[": return 91; case "[": return 91; case "\": return 92; case "]": return 93; case "]": return 93; case "^": return 94; case "_": return 95; case "`": return 96; case "`": return 96; case "{": return 123; case "{": return 123; case "|": return 124; case "|": return 124; case "|": return 124; case "}": return 125; case "}": return 125; case " ": return 160; case " ": return 160; case "¡": return 161; case "¢": return 162; case "£": return 163; case "¤": return 164; case "¥": return 165; case "¦": return 166; case "§": return 167; case "¨": return 168; case "¨": return 168; case "¨": return 168; case "¨": return 168; case "©": return 169; case "©": return 169; case "ª": return 170; case "«": return 171; case "¬": return 172; case "­": return 173; case "®": return 174; case "®": return 174; case "®": return 174; case "¯": return 175; case "‾": return 175; case "¯": return 175; case "°": return 176; case "±": return 177; case "±": return 177; case "±": return 177; case "²": return 178; case "³": return 179; case "´": return 180; case "´": return 180; case "µ": return 181; case "¶": return 182; case "·": return 183; case "·": return 183; case "·": return 183; case "¸": return 184; case "¸": return 184; case "¹": return 185; case "º": return 186; case "»": return 187; case "¼": return 188; case "½": return 189; case "½": return 189; case "¾": return 190; case "¿": return 191; case "À": return 192; case "Á": return 193; case "Â": return 194; case "Ã": return 195; case "Ä": return 196; case "Å": return 197; case "Æ": return 198; case "Ç": return 199; case "È": return 200; case "É": return 201; case "Ê": return 202; case "Ë": return 203; case "Ì": return 204; case "Í": return 205; case "Î": return 206; case "Ï": return 207; case "Ð": return 208; case "Ñ": return 209; case "Ò": return 210; case "Ó": return 211; case "Ô": return 212; case "Õ": return 213; case "Ö": return 214; case "×": return 215; case "Ø": return 216; case "Ù": return 217; case "Ú": return 218; case "Û": return 219; case "Ü": return 220; case "Ý": return 221; case "Þ": return 222; case "ß": return 223; case "à": return 224; case "á": return 225; case "â": return 226; case "ã": return 227; case "ä": return 228; case "å": return 229; case "æ": return 230; case "ç": return 231; case "è": return 232; case "é": return 233; case "ê": return 234; case "ë": return 235; case "ì": return 236; case "í": return 237; case "î": return 238; case "ï": return 239; case "ð": return 240; case "ñ": return 241; case "ò": return 242; case "ó": return 243; case "ô": return 244; case "õ": return 245; case "ö": return 246; case "÷": return 247; case "÷": return 247; case "ø": return 248; case "ù": return 249; case "ú": return 250; case "û": return 251; case "ü": return 252; case "ý": return 253; case "þ": return 254; case "ÿ": return 255; case "Ā": return 256; case "ā": return 257; case "Ă": return 258; case "ă": return 259; case "Ą": return 260; case "ą": return 261; case "Ć": return 262; case "ć": return 263; case "Ĉ": return 264; case "ĉ": return 265; case "Ċ": return 266; case "ċ": return 267; case "Č": return 268; case "č": return 269; case "Ď": return 270; case "ď": return 271; case "Đ": return 272; case "đ": return 273; case "Ē": return 274; case "ē": return 275; case "Ė": return 278; case "ė": return 279; case "Ę": return 280; case "ę": return 281; case "Ě": return 282; case "ě": return 283; case "Ĝ": return 284; case "ĝ": return 285; case "Ğ": return 286; case "ğ": return 287; case "Ġ": return 288; case "ġ": return 289; case "Ģ": return 290; case "Ĥ": return 292; case "ĥ": return 293; case "Ħ": return 294; case "ħ": return 295; case "Ĩ": return 296; case "ĩ": return 297; case "Ī": return 298; case "ī": return 299; case "Į": return 302; case "į": return 303; case "İ": return 304; case "ı": return 305; case "ı": return 305; case "IJ": return 306; case "ij": return 307; case "Ĵ": return 308; case "ĵ": return 309; case "Ķ": return 310; case "ķ": return 311; case "ĸ": return 312; case "Ĺ": return 313; case "ĺ": return 314; case "Ļ": return 315; case "ļ": return 316; case "Ľ": return 317; case "ľ": return 318; case "Ŀ": return 319; case "ŀ": return 320; case "Ł": return 321; case "ł": return 322; case "Ń": return 323; case "ń": return 324; case "Ņ": return 325; case "ņ": return 326; case "Ň": return 327; case "ň": return 328; case "ʼn": return 329; case "Ŋ": return 330; case "ŋ": return 331; case "Ō": return 332; case "ō": return 333; case "Ő": return 336; case "ő": return 337; case "Œ": return 338; case "œ": return 339; case "Ŕ": return 340; case "ŕ": return 341; case "Ŗ": return 342; case "ŗ": return 343; case "Ř": return 344; case "ř": return 345; case "Ś": return 346; case "ś": return 347; case "Ŝ": return 348; case "ŝ": return 349; case "Ş": return 350; case "ş": return 351; case "Š": return 352; case "š": return 353; case "Ţ": return 354; case "ţ": return 355; case "Ť": return 356; case "ť": return 357; case "Ŧ": return 358; case "ŧ": return 359; case "Ũ": return 360; case "ũ": return 361; case "Ū": return 362; case "ū": return 363; case "Ŭ": return 364; case "ŭ": return 365; case "Ů": return 366; case "ů": return 367; case "Ű": return 368; case "ű": return 369; case "Ų": return 370; case "ų": return 371; case "Ŵ": return 372; case "ŵ": return 373; case "Ŷ": return 374; case "ŷ": return 375; case "Ÿ": return 376; case "Ź": return 377; case "ź": return 378; case "Ż": return 379; case "ż": return 380; case "Ž": return 381; case "ž": return 382; case "ƒ": return 402; case "Ƶ": return 437; case "ǵ": return 501; case "ȷ": return 567; case "ˆ": return 710; case "ˇ": return 711; case "ˇ": return 711; case "˘": return 728; case "˘": return 728; case "˙": return 729; case "˙": return 729; case "˚": return 730; case "˛": return 731; case "˜": return 732; case "˜": return 732; case "˝": return 733; case "˝": return 733; case "̑": return 785; case "_": return 818; case "Α": return 913; case "Β": return 914; case "Γ": return 915; case "Δ": return 916; case "Ε": return 917; case "Ζ": return 918; case "Η": return 919; case "Θ": return 920; case "Ι": return 921; case "Κ": return 922; case "Λ": return 923; case "Μ": return 924; case "Ν": return 925; case "Ξ": return 926; case "Ο": return 927; case "Π": return 928; case "Ρ": return 929; case "Σ": return 931; case "Τ": return 932; case "Υ": return 933; case "Φ": return 934; case "Χ": return 935; case "Ψ": return 936; case "Ω": return 937; case "α": return 945; case "β": return 946; case "γ": return 947; case "δ": return 948; case "ϵ": return 949; case "ϵ": return 949; case "ε": return 949; case "ζ": return 950; case "η": return 951; case "θ": return 952; case "ι": return 953; case "κ": return 954; case "λ": return 955; case "μ": return 956; case "ν": return 957; case "ξ": return 958; case "ο": return 959; case "π": return 960; case "ρ": return 961; case "ς": return 962; case "ς": return 962; case "ς": return 962; case "σ": return 963; case "τ": return 964; case "υ": return 965; case "υ": return 965; case "φ": return 966; case "ϕ": return 966; case "ϕ": return 966; case "χ": return 967; case "ψ": return 968; case "ω": return 969; case "ϑ": return 977; case "ϑ": return 977; case "ϑ": return 977; case "ϒ": return 978; case "ϒ": return 978; case "ϕ": return 981; case "ϖ": return 982; case "ϖ": return 982; case "Ϝ": return 988; case "ϝ": return 989; case "ϝ": return 989; case "ϰ": return 1008; case "ϰ": return 1008; case "ϱ": return 1009; case "ϱ": return 1009; case "ε": return 1013; case "ϵ": return 1013; case "϶": return 1014; case "϶": return 1014; case "Ё": return 1025; case "Ђ": return 1026; case "Ѓ": return 1027; case "Є": return 1028; case "Ѕ": return 1029; case "І": return 1030; case "Ї": return 1031; case "Ј": return 1032; case "Љ": return 1033; case "Њ": return 1034; case "Ћ": return 1035; case "Ќ": return 1036; case "Ў": return 1038; case "Џ": return 1039; case "А": return 1040; case "Б": return 1041; case "В": return 1042; case "Г": return 1043; case "Д": return 1044; case "Е": return 1045; case "Ж": return 1046; case "З": return 1047; case "И": return 1048; case "Й": return 1049; case "К": return 1050; case "Л": return 1051; case "М": return 1052; case "Н": return 1053; case "О": return 1054; case "П": return 1055; case "Р": return 1056; case "С": return 1057; case "Т": return 1058; case "У": return 1059; case "Ф": return 1060; case "Х": return 1061; case "Ц": return 1062; case "Ч": return 1063; case "Ш": return 1064; case "Щ": return 1065; case "Ъ": return 1066; case "Ы": return 1067; case "Ь": return 1068; case "Э": return 1069; case "Ю": return 1070; case "Я": return 1071; case "а": return 1072; case "б": return 1073; case "в": return 1074; case "г": return 1075; case "д": return 1076; case "е": return 1077; case "ж": return 1078; case "з": return 1079; case "и": return 1080; case "й": return 1081; case "к": return 1082; case "л": return 1083; case "м": return 1084; case "н": return 1085; case "о": return 1086; case "п": return 1087; case "р": return 1088; case "с": return 1089; case "т": return 1090; case "у": return 1091; case "ф": return 1092; case "х": return 1093; case "ц": return 1094; case "ч": return 1095; case "ш": return 1096; case "щ": return 1097; case "ъ": return 1098; case "ы": return 1099; case "ь": return 1100; case "э": return 1101; case "ю": return 1102; case "я": return 1103; case "ё": return 1105; case "ђ": return 1106; case "ѓ": return 1107; case "є": return 1108; case "ѕ": return 1109; case "і": return 1110; case "ї": return 1111; case "ј": return 1112; case "љ": return 1113; case "њ": return 1114; case "ћ": return 1115; case "ќ": return 1116; case "ў": return 1118; case "џ": return 1119; case " ": return 8194; case " ": return 8195; case " ": return 8196; case " ": return 8197; case " ": return 8199; case " ": return 8200; case " ": return 8201; case " ": return 8201; case " ": return 8202; case " ": return 8202; case "​": return 8203; case "​": return 8203; case "​": return 8203; case "​": return 8203; case "​": return 8203; case "‌": return 8204; case "‍": return 8205; case "‎": return 8206; case "‏": return 8207; case "‐": return 8208; case "‐": return 8208; case "–": return 8211; case "—": return 8212; case "―": return 8213; case "‖": return 8214; case "‖": return 8214; case "‘": return 8216; case "‘": return 8216; case "’": return 8217; case "’": return 8217; case "’": return 8217; case "‚": return 8218; case "‚": return 8218; case "“": return 8220; case "“": return 8220; case "”": return 8221; case "”": return 8221; case "”": return 8221; case "„": return 8222; case "„": return 8222; case "†": return 8224; case "‡": return 8225; case "‡": return 8225; case "•": return 8226; case "•": return 8226; case "‥": return 8229; case "…": return 8230; case "…": return 8230; case "‰": return 8240; case "‱": return 8241; case "′": return 8242; case "″": return 8243; case "‴": return 8244; case "‵": return 8245; case "‵": return 8245; case "‹": return 8249; case "›": return 8250; case "‾": return 8254; case "⁁": return 8257; case "⁃": return 8259; case "⁄": return 8260; case "⁏": return 8271; case "⁗": return 8279; case " ": return 8287; case "⁠": return 8288; case "⁡": return 8289; case "⁡": return 8289; case "⁢": return 8290; case "⁢": return 8290; case "⁣": return 8291; case "⁣": return 8291; case "€": return 8364; case "⃛": return 8411; case "⃛": return 8411; case "⃜": return 8412; case "ℂ": return 8450; case "ℂ": return 8450; case "℅": return 8453; case "ℊ": return 8458; case "ℋ": return 8459; case "ℋ": return 8459; case "ℋ": return 8459; case "ℌ": return 8460; case "ℌ": return 8460; case "ℍ": return 8461; case "ℍ": return 8461; case "ℎ": return 8462; case "ℏ": return 8463; case "ℏ": return 8463; case "ℏ": return 8463; case "ℏ": return 8463; case "ℐ": return 8464; case "ℐ": return 8464; case "ℑ": return 8465; case "ℑ": return 8465; case "ℑ": return 8465; case "ℑ": return 8465; case "ℒ": return 8466; case "ℒ": return 8466; case "ℒ": return 8466; case "ℓ": return 8467; case "ℕ": return 8469; case "ℕ": return 8469; case "№": return 8470; case "℗": return 8471; case "℘": return 8472; case "℘": return 8472; case "ℙ": return 8473; case "ℙ": return 8473; case "ℚ": return 8474; case "ℚ": return 8474; case "ℛ": return 8475; case "ℛ": return 8475; case "ℜ": return 8476; case "ℜ": return 8476; case "ℜ": return 8476; case "ℜ": return 8476; case "ℝ": return 8477; case "ℝ": return 8477; case "℞": return 8478; case "™": return 8482; case "™": return 8482; case "ℤ": return 8484; case "ℤ": return 8484; case "Ω": return 8486; case "℧": return 8487; case "ℨ": return 8488; case "ℨ": return 8488; case "℩": return 8489; case "Å": return 8491; case "ℬ": return 8492; case "ℬ": return 8492; case "ℬ": return 8492; case "ℭ": return 8493; case "ℭ": return 8493; case "ℯ": return 8495; case "ℰ": return 8496; case "ℰ": return 8496; case "ℱ": return 8497; case "ℱ": return 8497; case "ℳ": return 8499; case "ℳ": return 8499; case "ℳ": return 8499; case "ℴ": return 8500; case "ℴ": return 8500; case "ℴ": return 8500; case "ℵ": return 8501; case "ℵ": return 8501; case "ℶ": return 8502; case "ℷ": return 8503; case "ℸ": return 8504; case "ⅅ": return 8517; case "ⅅ": return 8517; case "ⅆ": return 8518; case "ⅆ": return 8518; case "ⅇ": return 8519; case "ⅇ": return 8519; case "ⅇ": return 8519; case "ⅈ": return 8520; case "ⅈ": return 8520; case "⅓": return 8531; case "⅔": return 8532; case "⅕": return 8533; case "⅖": return 8534; case "⅗": return 8535; case "⅘": return 8536; case "⅙": return 8537; case "⅚": return 8538; case "⅛": return 8539; case "⅜": return 8540; case "⅝": return 8541; case "⅞": return 8542; case "←": return 8592; case "←": return 8592; case "←": return 8592; case "←": return 8592; case "←": return 8592; case "↑": return 8593; case "↑": return 8593; case "↑": return 8593; case "↑": return 8593; case "→": return 8594; case "→": return 8594; case "→": return 8594; case "→": return 8594; case "→": return 8594; case "↓": return 8595; case "↓": return 8595; case "↓": return 8595; case "↓": return 8595; case "↔": return 8596; case "↔": return 8596; case "↔": return 8596; case "↕": return 8597; case "↕": return 8597; case "↕": return 8597; case "↖": return 8598; case "↖": return 8598; case "↖": return 8598; case "↗": return 8599; case "↗": return 8599; case "↗": return 8599; case "↘": return 8600; case "↘": return 8600; case "↘": return 8600; case "↙": return 8601; case "↙": return 8601; case "↙": return 8601; case "↚": return 8602; case "↚": return 8602; case "↛": return 8603; case "↛": return 8603; case "↝": return 8605; case "↝": return 8605; case "↞": return 8606; case "↞": return 8606; case "↟": return 8607; case "↠": return 8608; case "↠": return 8608; case "↡": return 8609; case "↢": return 8610; case "↢": return 8610; case "↣": return 8611; case "↣": return 8611; case "↤": return 8612; case "↤": return 8612; case "↥": return 8613; case "↥": return 8613; case "↦": return 8614; case "↦": return 8614; case "↦": return 8614; case "↧": return 8615; case "↧": return 8615; case "↩": return 8617; case "↩": return 8617; case "↪": return 8618; case "↪": return 8618; case "↫": return 8619; case "↫": return 8619; case "↬": return 8620; case "↬": return 8620; case "↭": return 8621; case "↭": return 8621; case "↮": return 8622; case "↮": return 8622; case "↰": return 8624; case "↰": return 8624; case "↱": return 8625; case "↱": return 8625; case "↲": return 8626; case "↳": return 8627; case "↵": return 8629; case "↶": return 8630; case "↶": return 8630; case "↷": return 8631; case "↷": return 8631; case "↺": return 8634; case "↺": return 8634; case "↻": return 8635; case "↻": return 8635; case "↼": return 8636; case "↼": return 8636; case "↼": return 8636; case "↽": return 8637; case "↽": return 8637; case "↽": return 8637; case "↾": return 8638; case "↾": return 8638; case "↾": return 8638; case "↿": return 8639; case "↿": return 8639; case "↿": return 8639; case "⇀": return 8640; case "⇀": return 8640; case "⇀": return 8640; case "⇁": return 8641; case "⇁": return 8641; case "⇁": return 8641; case "⇂": return 8642; case "⇂": return 8642; case "⇂": return 8642; case "⇃": return 8643; case "⇃": return 8643; case "⇃": return 8643; case "⇄": return 8644; case "⇄": return 8644; case "⇄": return 8644; case "⇅": return 8645; case "⇅": return 8645; case "⇆": return 8646; case "⇆": return 8646; case "⇆": return 8646; case "⇇": return 8647; case "⇇": return 8647; case "⇈": return 8648; case "⇈": return 8648; case "⇉": return 8649; case "⇉": return 8649; case "⇊": return 8650; case "⇊": return 8650; case "⇋": return 8651; case "⇋": return 8651; case "⇋": return 8651; case "⇌": return 8652; case "⇌": return 8652; case "⇌": return 8652; case "⇍": return 8653; case "⇍": return 8653; case "⇎": return 8654; case "⇎": return 8654; case "⇏": return 8655; case "⇏": return 8655; case "⇐": return 8656; case "⇐": return 8656; case "⇐": return 8656; case "⇑": return 8657; case "⇑": return 8657; case "⇑": return 8657; case "⇒": return 8658; case "⇒": return 8658; case "⇒": return 8658; case "⇒": return 8658; case "⇓": return 8659; case "⇓": return 8659; case "⇓": return 8659; case "⇔": return 8660; case "⇔": return 8660; case "⇔": return 8660; case "⇔": return 8660; case "⇕": return 8661; case "⇕": return 8661; case "⇕": return 8661; case "⇖": return 8662; case "⇗": return 8663; case "⇘": return 8664; case "⇙": return 8665; case "⇚": return 8666; case "⇚": return 8666; case "⇛": return 8667; case "⇛": return 8667; case "⇝": return 8669; case "⇤": return 8676; case "⇤": return 8676; case "⇥": return 8677; case "⇥": return 8677; case "⇵": return 8693; case "⇵": return 8693; case "⇽": return 8701; case "⇾": return 8702; case "⇿": return 8703; case "∀": return 8704; case "∀": return 8704; case "∁": return 8705; case "∁": return 8705; case "∂": return 8706; case "∂": return 8706; case "∃": return 8707; case "∃": return 8707; case "∄": return 8708; case "∄": return 8708; case "∄": return 8708; case "∅": return 8709; case "∅": return 8709; case "∅": return 8709; case "∅": return 8709; case "∇": return 8711; case "∇": return 8711; case "∈": return 8712; case "∈": return 8712; case "∈": return 8712; case "∈": return 8712; case "∉": return 8713; case "∉": return 8713; case "∉": return 8713; case "∋": return 8715; case "∋": return 8715; case "∋": return 8715; case "∋": return 8715; case "∌": return 8716; case "∌": return 8716; case "∌": return 8716; case "∏": return 8719; case "∏": return 8719; case "∐": return 8720; case "∐": return 8720; case "∑": return 8721; case "∑": return 8721; case "−": return 8722; case "∓": return 8723; case "∓": return 8723; case "∓": return 8723; case "∔": return 8724; case "∔": return 8724; case "∖": return 8726; case "∖": return 8726; case "∖": return 8726; case "∖": return 8726; case "∖": return 8726; case "∗": return 8727; case "∘": return 8728; case "∘": return 8728; case "√": return 8730; case "√": return 8730; case "∝": return 8733; case "∝": return 8733; case "∝": return 8733; case "∝": return 8733; case "∝": return 8733; case "∞": return 8734; case "∟": return 8735; case "∠": return 8736; case "∠": return 8736; case "∡": return 8737; case "∡": return 8737; case "∢": return 8738; case "∣": return 8739; case "∣": return 8739; case "∣": return 8739; case "∣": return 8739; case "∤": return 8740; case "∤": return 8740; case "∤": return 8740; case "∤": return 8740; case "∥": return 8741; case "∥": return 8741; case "∥": return 8741; case "∥": return 8741; case "∥": return 8741; case "∦": return 8742; case "∦": return 8742; case "∦": return 8742; case "∦": return 8742; case "∦": return 8742; case "∧": return 8743; case "∧": return 8743; case "∨": return 8744; case "∨": return 8744; case "∩": return 8745; case "∪": return 8746; case "∫": return 8747; case "∫": return 8747; case "∬": return 8748; case "∭": return 8749; case "∭": return 8749; case "∮": return 8750; case "∮": return 8750; case "∮": return 8750; case "∯": return 8751; case "∯": return 8751; case "∰": return 8752; case "∱": return 8753; case "∲": return 8754; case "∲": return 8754; case "∳": return 8755; case "∳": return 8755; case "∴": return 8756; case "∴": return 8756; case "∴": return 8756; case "∵": return 8757; case "∵": return 8757; case "∵": return 8757; case "∶": return 8758; case "∷": return 8759; case "∷": return 8759; case "∸": return 8760; case "∸": return 8760; case "∺": return 8762; case "∻": return 8763; case "∼": return 8764; case "∼": return 8764; case "∼": return 8764; case "∼": return 8764; case "∽": return 8765; case "∽": return 8765; case "∾": return 8766; case "∾": return 8766; case "∿": return 8767; case "≀": return 8768; case "≀": return 8768; case "≀": return 8768; case "≁": return 8769; case "≁": return 8769; case "≂": return 8770; case "≂": return 8770; case "≂": return 8770; case "≃": return 8771; case "≃": return 8771; case "≃": return 8771; case "≄": return 8772; case "≄": return 8772; case "≄": return 8772; case "≅": return 8773; case "≅": return 8773; case "≆": return 8774; case "≇": return 8775; case "≇": return 8775; case "≈": return 8776; case "≈": return 8776; case "≈": return 8776; case "≈": return 8776; case "≈": return 8776; case "≈": return 8776; case "≉": return 8777; case "≉": return 8777; case "≉": return 8777; case "≊": return 8778; case "≊": return 8778; case "≋": return 8779; case "≌": return 8780; case "≌": return 8780; case "≍": return 8781; case "≍": return 8781; case "≎": return 8782; case "≎": return 8782; case "≎": return 8782; case "≏": return 8783; case "≏": return 8783; case "≏": return 8783; case "≐": return 8784; case "≐": return 8784; case "≐": return 8784; case "≑": return 8785; case "≑": return 8785; case "≒": return 8786; case "≒": return 8786; case "≓": return 8787; case "≓": return 8787; case "≔": return 8788; case "≔": return 8788; case "≔": return 8788; case "≕": return 8789; case "≕": return 8789; case "≖": return 8790; case "≖": return 8790; case "≗": return 8791; case "≗": return 8791; case "≙": return 8793; case "≚": return 8794; case "≜": return 8796; case "≜": return 8796; case "≟": return 8799; case "≟": return 8799; case "≠": return 8800; case "≠": return 8800; case "≡": return 8801; case "≡": return 8801; case "≢": return 8802; case "≢": return 8802; case "≤": return 8804; case "≤": return 8804; case "≥": return 8805; case "≥": return 8805; case "≥": return 8805; case "≦": return 8806; case "≦": return 8806; case "≦": return 8806; case "≧": return 8807; case "≧": return 8807; case "≧": return 8807; case "≨": return 8808; case "≨": return 8808; case "≩": return 8809; case "≩": return 8809; case "≪": return 8810; case "≪": return 8810; case "≪": return 8810; case "≫": return 8811; case "≫": return 8811; case "≫": return 8811; case "≬": return 8812; case "≬": return 8812; case "≭": return 8813; case "≮": return 8814; case "≮": return 8814; case "≮": return 8814; case "≯": return 8815; case "≯": return 8815; case "≯": return 8815; case "≰": return 8816; case "≰": return 8816; case "≰": return 8816; case "≱": return 8817; case "≱": return 8817; case "≱": return 8817; case "≲": return 8818; case "≲": return 8818; case "≲": return 8818; case "≳": return 8819; case "≳": return 8819; case "≳": return 8819; case "≴": return 8820; case "≴": return 8820; case "≵": return 8821; case "≵": return 8821; case "≶": return 8822; case "≶": return 8822; case "≶": return 8822; case "≷": return 8823; case "≷": return 8823; case "≷": return 8823; case "≸": return 8824; case "≸": return 8824; case "≹": return 8825; case "≹": return 8825; case "≺": return 8826; case "≺": return 8826; case "≺": return 8826; case "≻": return 8827; case "≻": return 8827; case "≻": return 8827; case "≼": return 8828; case "≼": return 8828; case "≼": return 8828; case "≽": return 8829; case "≽": return 8829; case "≽": return 8829; case "≾": return 8830; case "≾": return 8830; case "≾": return 8830; case "≿": return 8831; case "≿": return 8831; case "≿": return 8831; case "⊀": return 8832; case "⊀": return 8832; case "⊀": return 8832; case "⊁": return 8833; case "⊁": return 8833; case "⊁": return 8833; case "⊂": return 8834; case "⊂": return 8834; case "⊃": return 8835; case "⊃": return 8835; case "⊃": return 8835; case "⊄": return 8836; case "⊅": return 8837; case "⊆": return 8838; case "⊆": return 8838; case "⊆": return 8838; case "⊇": return 8839; case "⊇": return 8839; case "⊇": return 8839; case "⊈": return 8840; case "⊈": return 8840; case "⊈": return 8840; case "⊉": return 8841; case "⊉": return 8841; case "⊉": return 8841; case "⊊": return 8842; case "⊊": return 8842; case "⊋": return 8843; case "⊋": return 8843; case "⊍": return 8845; case "⊎": return 8846; case "⊎": return 8846; case "⊏": return 8847; case "⊏": return 8847; case "⊏": return 8847; case "⊐": return 8848; case "⊐": return 8848; case "⊐": return 8848; case "⊑": return 8849; case "⊑": return 8849; case "⊑": return 8849; case "⊒": return 8850; case "⊒": return 8850; case "⊒": return 8850; case "⊓": return 8851; case "⊓": return 8851; case "⊔": return 8852; case "⊔": return 8852; case "⊕": return 8853; case "⊕": return 8853; case "⊖": return 8854; case "⊖": return 8854; case "⊗": return 8855; case "⊗": return 8855; case "⊘": return 8856; case "⊙": return 8857; case "⊙": return 8857; case "⊚": return 8858; case "⊚": return 8858; case "⊛": return 8859; case "⊛": return 8859; case "⊝": return 8861; case "⊝": return 8861; case "⊞": return 8862; case "⊞": return 8862; case "⊟": return 8863; case "⊟": return 8863; case "⊠": return 8864; case "⊠": return 8864; case "⊡": return 8865; case "⊡": return 8865; case "⊢": return 8866; case "⊢": return 8866; case "⊣": return 8867; case "⊣": return 8867; case "⊤": return 8868; case "⊤": return 8868; case "⊥": return 8869; case "⊥": return 8869; case "⊥": return 8869; case "⊥": return 8869; case "⊧": return 8871; case "⊨": return 8872; case "⊨": return 8872; case "⊩": return 8873; case "⊪": return 8874; case "⊫": return 8875; case "⊬": return 8876; case "⊭": return 8877; case "⊮": return 8878; case "⊯": return 8879; case "⊰": return 8880; case "⊲": return 8882; case "⊲": return 8882; case "⊲": return 8882; case "⊳": return 8883; case "⊳": return 8883; case "⊳": return 8883; case "⊴": return 8884; case "⊴": return 8884; case "⊴": return 8884; case "⊵": return 8885; case "⊵": return 8885; case "⊵": return 8885; case "⊶": return 8886; case "⊷": return 8887; case "⊸": return 8888; case "⊸": return 8888; case "⊹": return 8889; case "⊺": return 8890; case "⊺": return 8890; case "⊻": return 8891; case "⊽": return 8893; case "⊾": return 8894; case "⊿": return 8895; case "⋀": return 8896; case "⋀": return 8896; case "⋀": return 8896; case "⋁": return 8897; case "⋁": return 8897; case "⋁": return 8897; case "⋂": return 8898; case "⋂": return 8898; case "⋂": return 8898; case "⋃": return 8899; case "⋃": return 8899; case "⋃": return 8899; case "⋄": return 8900; case "⋄": return 8900; case "⋄": return 8900; case "⋅": return 8901; case "⋆": return 8902; case "⋆": return 8902; case "⋇": return 8903; case "⋇": return 8903; case "⋈": return 8904; case "⋉": return 8905; case "⋊": return 8906; case "⋋": return 8907; case "⋋": return 8907; case "⋌": return 8908; case "⋌": return 8908; case "⋍": return 8909; case "⋍": return 8909; case "⋎": return 8910; case "⋎": return 8910; case "⋏": return 8911; case "⋏": return 8911; case "⋐": return 8912; case "⋐": return 8912; case "⋑": return 8913; case "⋑": return 8913; case "⋒": return 8914; case "⋓": return 8915; case "⋔": return 8916; case "⋔": return 8916; case "⋕": return 8917; case "⋖": return 8918; case "⋖": return 8918; case "⋗": return 8919; case "⋗": return 8919; case "⋘": return 8920; case "⋙": return 8921; case "⋙": return 8921; case "⋚": return 8922; case "⋚": return 8922; case "⋚": return 8922; case "⋛": return 8923; case "⋛": return 8923; case "⋛": return 8923; case "⋞": return 8926; case "⋞": return 8926; case "⋟": return 8927; case "⋟": return 8927; case "⋠": return 8928; case "⋠": return 8928; case "⋡": return 8929; case "⋡": return 8929; case "⋢": return 8930; case "⋢": return 8930; case "⋣": return 8931; case "⋣": return 8931; case "⋦": return 8934; case "⋧": return 8935; case "⋨": return 8936; case "⋨": return 8936; case "⋩": return 8937; case "⋩": return 8937; case "⋪": return 8938; case "⋪": return 8938; case "⋪": return 8938; case "⋫": return 8939; case "⋫": return 8939; case "⋫": return 8939; case "⋬": return 8940; case "⋬": return 8940; case "⋬": return 8940; case "⋭": return 8941; case "⋭": return 8941; case "⋭": return 8941; case "⋮": return 8942; case "⋯": return 8943; case "⋰": return 8944; case "⋱": return 8945; case "⋲": return 8946; case "⋳": return 8947; case "⋴": return 8948; case "⋵": return 8949; case "⋶": return 8950; case "⋷": return 8951; case "⋹": return 8953; case "⋺": return 8954; case "⋻": return 8955; case "⋼": return 8956; case "⋽": return 8957; case "⋾": return 8958; case "⌅": return 8965; case "⌅": return 8965; case "⌆": return 8966; case "⌆": return 8966; case "⌈": return 8968; case "⌈": return 8968; case "⌉": return 8969; case "⌉": return 8969; case "⌊": return 8970; case "⌊": return 8970; case "⌋": return 8971; case "⌋": return 8971; case "⌌": return 8972; case "⌍": return 8973; case "⌎": return 8974; case "⌏": return 8975; case "⌐": return 8976; case "⌒": return 8978; case "⌓": return 8979; case "⌕": return 8981; case "⌖": return 8982; case "⌜": return 8988; case "⌜": return 8988; case "⌝": return 8989; case "⌝": return 8989; case "⌞": return 8990; case "⌞": return 8990; case "⌟": return 8991; case "⌟": return 8991; case "⌢": return 8994; case "⌢": return 8994; case "⌣": return 8995; case "⌣": return 8995; case "⌭": return 9005; case "⌮": return 9006; case "⌶": return 9014; case "⌽": return 9021; case "⌿": return 9023; case "⍼": return 9084; case "⎰": return 9136; case "⎰": return 9136; case "⎱": return 9137; case "⎱": return 9137; case "⎴": return 9140; case "⎴": return 9140; case "⎵": return 9141; case "⎵": return 9141; case "⎶": return 9142; case "⏜": return 9180; case "⏝": return 9181; case "⏞": return 9182; case "⏟": return 9183; case "⏢": return 9186; case "⏧": return 9191; case "␣": return 9251; case "Ⓢ": return 9416; case "Ⓢ": return 9416; case "─": return 9472; case "─": return 9472; case "│": return 9474; case "┌": return 9484; case "┐": return 9488; case "└": return 9492; case "┘": return 9496; case "├": return 9500; case "┤": return 9508; case "┬": return 9516; case "┴": return 9524; case "┼": return 9532; case "═": return 9552; case "║": return 9553; case "╒": return 9554; case "╓": return 9555; case "╔": return 9556; case "╕": return 9557; case "╖": return 9558; case "╗": return 9559; case "╘": return 9560; case "╙": return 9561; case "╚": return 9562; case "╛": return 9563; case "╜": return 9564; case "╝": return 9565; case "╞": return 9566; case "╟": return 9567; case "╠": return 9568; case "╡": return 9569; case "╢": return 9570; case "╣": return 9571; case "╤": return 9572; case "╥": return 9573; case "╦": return 9574; case "╧": return 9575; case "╨": return 9576; case "╩": return 9577; case "╪": return 9578; case "╫": return 9579; case "╬": return 9580; case "▀": return 9600; case "▄": return 9604; case "█": return 9608; case "░": return 9617; case "▒": return 9618; case "▓": return 9619; case "□": return 9633; case "□": return 9633; case "□": return 9633; case "▪": return 9642; case "▪": return 9642; case "▪": return 9642; case "▪": return 9642; case "▫": return 9643; case "▭": return 9645; case "▮": return 9646; case "▱": return 9649; case "△": return 9651; case "△": return 9651; case "▴": return 9652; case "▴": return 9652; case "▵": return 9653; case "▵": return 9653; case "▸": return 9656; case "▸": return 9656; case "▹": return 9657; case "▹": return 9657; case "▽": return 9661; case "▽": return 9661; case "▾": return 9662; case "▾": return 9662; case "▿": return 9663; case "▿": return 9663; case "◂": return 9666; case "◂": return 9666; case "◃": return 9667; case "◃": return 9667; case "◊": return 9674; case "◊": return 9674; case "○": return 9675; case "◬": return 9708; case "◯": return 9711; case "◯": return 9711; case "◸": return 9720; case "◹": return 9721; case "◺": return 9722; case "◻": return 9723; case "◼": return 9724; case "★": return 9733; case "★": return 9733; case "☆": return 9734; case "☎": return 9742; case "♀": return 9792; case "♂": return 9794; case "♠": return 9824; case "♠": return 9824; case "♣": return 9827; case "♣": return 9827; case "♥": return 9829; case "♥": return 9829; case "♦": return 9830; case "♦": return 9830; case "♪": return 9834; case "♭": return 9837; case "♮": return 9838; case "♮": return 9838; case "♯": return 9839; case "✓": return 10003; case "✓": return 10003; case "✗": return 10007; case "✠": return 10016; case "✠": return 10016; case "✶": return 10038; case "❘": return 10072; case "❲": return 10098; case "❳": return 10099; case "⟦": return 10214; case "⟦": return 10214; case "⟧": return 10215; case "⟧": return 10215; case "⟨": return 10216; case "⟨": return 10216; case "⟨": return 10216; case "⟩": return 10217; case "⟩": return 10217; case "⟩": return 10217; case "⟪": return 10218; case "⟫": return 10219; case "⟬": return 10220; case "⟭": return 10221; case "⟵": return 10229; case "⟵": return 10229; case "⟵": return 10229; case "⟶": return 10230; case "⟶": return 10230; case "⟶": return 10230; case "⟷": return 10231; case "⟷": return 10231; case "⟷": return 10231; case "⟸": return 10232; case "⟸": return 10232; case "⟸": return 10232; case "⟹": return 10233; case "⟹": return 10233; case "⟹": return 10233; case "⟺": return 10234; case "⟺": return 10234; case "⟺": return 10234; case "⟼": return 10236; case "⟼": return 10236; case "⟿": return 10239; case "⤂": return 10498; case "⤃": return 10499; case "⤄": return 10500; case "⤅": return 10501; case "⤌": return 10508; case "⤍": return 10509; case "⤍": return 10509; case "⤎": return 10510; case "⤏": return 10511; case "⤏": return 10511; case "⤐": return 10512; case "⤐": return 10512; case "⤑": return 10513; case "⤒": return 10514; case "⤓": return 10515; case "⤖": return 10518; case "⤙": return 10521; case "⤚": return 10522; case "⤛": return 10523; case "⤜": return 10524; case "⤝": return 10525; case "⤞": return 10526; case "⤟": return 10527; case "⤠": return 10528; case "⤣": return 10531; case "⤤": return 10532; case "⤥": return 10533; case "⤥": return 10533; case "⤦": return 10534; case "⤦": return 10534; case "⤧": return 10535; case "⤨": return 10536; case "⤨": return 10536; case "⤩": return 10537; case "⤩": return 10537; case "⤪": return 10538; case "⤳": return 10547; case "⤵": return 10549; case "⤶": return 10550; case "⤷": return 10551; case "⤸": return 10552; case "⤹": return 10553; case "⤼": return 10556; case "⤽": return 10557; case "⥅": return 10565; case "⥈": return 10568; case "⥉": return 10569; case "⥊": return 10570; case "⥋": return 10571; case "⥎": return 10574; case "⥏": return 10575; case "⥐": return 10576; case "⥑": return 10577; case "⥒": return 10578; case "⥓": return 10579; case "⥔": return 10580; case "⥕": return 10581; case "⥖": return 10582; case "⥗": return 10583; case "⥘": return 10584; case "⥙": return 10585; case "⥚": return 10586; case "⥛": return 10587; case "⥜": return 10588; case "⥝": return 10589; case "⥞": return 10590; case "⥟": return 10591; case "⥠": return 10592; case "⥡": return 10593; case "⥢": return 10594; case "⥣": return 10595; case "⥤": return 10596; case "⥥": return 10597; case "⥦": return 10598; case "⥧": return 10599; case "⥨": return 10600; case "⥩": return 10601; case "⥪": return 10602; case "⥫": return 10603; case "⥬": return 10604; case "⥭": return 10605; case "⥮": return 10606; case "⥮": return 10606; case "⥯": return 10607; case "⥯": return 10607; case "⥰": return 10608; case "⥱": return 10609; case "⥲": return 10610; case "⥳": return 10611; case "⥴": return 10612; case "⥵": return 10613; case "⥶": return 10614; case "⥸": return 10616; case "⥹": return 10617; case "⥻": return 10619; case "⥼": return 10620; case "⥽": return 10621; case "⥾": return 10622; case "⥿": return 10623; case "⦅": return 10629; case "⦆": return 10630; case "⦋": return 10635; case "⦌": return 10636; case "⦍": return 10637; case "⦎": return 10638; case "⦏": return 10639; case "⦐": return 10640; case "⦑": return 10641; case "⦒": return 10642; case "⦓": return 10643; case "⦔": return 10644; case "⦕": return 10645; case "⦖": return 10646; case "⦚": return 10650; case "⦜": return 10652; case "⦝": return 10653; case "⦤": return 10660; case "⦥": return 10661; case "⦦": return 10662; case "⦧": return 10663; case "⦨": return 10664; case "⦩": return 10665; case "⦪": return 10666; case "⦫": return 10667; case "⦬": return 10668; case "⦭": return 10669; case "⦮": return 10670; case "⦯": return 10671; case "⦰": return 10672; case "⦱": return 10673; case "⦲": return 10674; case "⦳": return 10675; case "⦴": return 10676; case "⦵": return 10677; case "⦶": return 10678; case "⦷": return 10679; case "⦹": return 10681; case "⦻": return 10683; case "⦼": return 10684; case "⦾": return 10686; case "⦿": return 10687; case "⧀": return 10688; case "⧁": return 10689; case "⧂": return 10690; case "⧃": return 10691; case "⧄": return 10692; case "⧅": return 10693; case "⧉": return 10697; case "⧍": return 10701; case "⧎": return 10702; case "⧏": return 10703; case "⧐": return 10704; case "∽̱": return 10714; case "⧜": return 10716; case "⧝": return 10717; case "⧞": return 10718; case "⧣": return 10723; case "⧤": return 10724; case "⧥": return 10725; case "⧫": return 10731; case "⧫": return 10731; case "⧴": return 10740; case "⧶": return 10742; case "⨀": return 10752; case "⨀": return 10752; case "⨁": return 10753; case "⨁": return 10753; case "⨂": return 10754; case "⨂": return 10754; case "⨄": return 10756; case "⨄": return 10756; case "⨆": return 10758; case "⨆": return 10758; case "⨌": return 10764; case "⨌": return 10764; case "⨍": return 10765; case "⨐": return 10768; case "⨑": return 10769; case "⨒": return 10770; case "⨓": return 10771; case "⨔": return 10772; case "⨕": return 10773; case "⨖": return 10774; case "⨗": return 10775; case "⨢": return 10786; case "⨣": return 10787; case "⨤": return 10788; case "⨥": return 10789; case "⨦": return 10790; case "⨧": return 10791; case "⨩": return 10793; case "⨪": return 10794; case "⨭": return 10797; case "⨮": return 10798; case "⨯": return 10799; case "⨰": return 10800; case "⨱": return 10801; case "⨳": return 10803; case "⨴": return 10804; case "⨵": return 10805; case "⨶": return 10806; case "⨷": return 10807; case "⨸": return 10808; case "⨹": return 10809; case "⨺": return 10810; case "⨻": return 10811; case "⨼": return 10812; case "⨼": return 10812; case "⨿": return 10815; case "⩀": return 10816; case "⩂": return 10818; case "⩃": return 10819; case "⩄": return 10820; case "⩅": return 10821; case "⩆": return 10822; case "⩇": return 10823; case "⩈": return 10824; case "⩉": return 10825; case "⩊": return 10826; case "⩋": return 10827; case "⩌": return 10828; case "⩍": return 10829; case "⩐": return 10832; case "⩓": return 10835; case "⩔": return 10836; case "⩕": return 10837; case "⩖": return 10838; case "⩗": return 10839; case "⩘": return 10840; case "⩚": return 10842; case "⩛": return 10843; case "⩜": return 10844; case "⩝": return 10845; case "⩟": return 10847; case "⩦": return 10854; case "⩪": return 10858; case "⩭": return 10861; case "⩮": return 10862; case "⩯": return 10863; case "⩰": return 10864; case "⩱": return 10865; case "⩲": return 10866; case "⩳": return 10867; case "⩴": return 10868; case "⩵": return 10869; case "⩷": return 10871; case "⩷": return 10871; case "⩸": return 10872; case "⩹": return 10873; case "⩺": return 10874; case "⩻": return 10875; case "⩼": return 10876; case "⩽": return 10877; case "⩽": return 10877; case "⩽": return 10877; case "⩾": return 10878; case "⩾": return 10878; case "⩾": return 10878; case "⩿": return 10879; case "⪀": return 10880; case "⪁": return 10881; case "⪂": return 10882; case "⪃": return 10883; case "⪄": return 10884; case "⪅": return 10885; case "⪅": return 10885; case "⪆": return 10886; case "⪆": return 10886; case "⪇": return 10887; case "⪇": return 10887; case "⪈": return 10888; case "⪈": return 10888; case "⪉": return 10889; case "⪉": return 10889; case "⪊": return 10890; case "⪊": return 10890; case "⪋": return 10891; case "⪋": return 10891; case "⪌": return 10892; case "⪌": return 10892; case "⪍": return 10893; case "⪎": return 10894; case "⪏": return 10895; case "⪐": return 10896; case "⪑": return 10897; case "⪒": return 10898; case "⪓": return 10899; case "⪔": return 10900; case "⪕": return 10901; case "⪕": return 10901; case "⪖": return 10902; case "⪖": return 10902; case "⪗": return 10903; case "⪘": return 10904; case "⪙": return 10905; case "⪚": return 10906; case "⪝": return 10909; case "⪞": return 10910; case "⪟": return 10911; case "⪠": return 10912; case "⪡": return 10913; case "⪢": return 10914; case "⪤": return 10916; case "⪥": return 10917; case "⪦": return 10918; case "⪧": return 10919; case "⪨": return 10920; case "⪩": return 10921; case "⪪": return 10922; case "⪫": return 10923; case "⪬": return 10924; case "⪭": return 10925; case "⪮": return 10926; case "⪯": return 10927; case "⪯": return 10927; case "⪯": return 10927; case "⪰": return 10928; case "⪰": return 10928; case "⪰": return 10928; case "⪳": return 10931; case "⪴": return 10932; case "⪵": return 10933; case "⪵": return 10933; case "⪶": return 10934; case "⪶": return 10934; case "⪷": return 10935; case "⪷": return 10935; case "⪸": return 10936; case "⪸": return 10936; case "⪹": return 10937; case "⪹": return 10937; case "⪺": return 10938; case "⪺": return 10938; case "⪻": return 10939; case "⪼": return 10940; case "⪽": return 10941; case "⪾": return 10942; case "⪿": return 10943; case "⫀": return 10944; case "⫁": return 10945; case "⫂": return 10946; case "⫃": return 10947; case "⫄": return 10948; case "⫅": return 10949; case "⫅": return 10949; case "⫆": return 10950; case "⫆": return 10950; case "⫇": return 10951; case "⫈": return 10952; case "⫋": return 10955; case "⫋": return 10955; case "⫌": return 10956; case "⫌": return 10956; case "⫏": return 10959; case "⫐": return 10960; case "⫑": return 10961; case "⫒": return 10962; case "⫓": return 10963; case "⫔": return 10964; case "⫕": return 10965; case "⫖": return 10966; case "⫗": return 10967; case "⫘": return 10968; case "⫙": return 10969; case "⫚": return 10970; case "⫛": return 10971; case "⫤": return 10980; case "⫤": return 10980; case "⫦": return 10982; case "⫧": return 10983; case "⫨": return 10984; case "⫩": return 10985; case "⫫": return 10987; case "⫬": return 10988; case "⫭": return 10989; case "⫮": return 10990; case "⫯": return 10991; case "⫰": return 10992; case "⫱": return 10993; case "⫲": return 10994; case "⫳": return 10995; case "⫽": return 11005; case "ff": return 64256; case "fi": return 64257; case "fl": return 64258; case "ffi": return 64259; case "ffl": return 64260; case "𝒜": return 119964; case "𝒞": return 119966; case "𝒟": return 119967; case "𝒢": return 119970; case "𝒥": return 119973; case "𝒦": return 119974; case "𝒩": return 119977; case "𝒪": return 119978; case "𝒫": return 119979; case "𝒬": return 119980; case "𝒮": return 119982; case "𝒯": return 119983; case "𝒰": return 119984; case "𝒱": return 119985; case "𝒲": return 119986; case "𝒳": return 119987; case "𝒴": return 119988; case "𝒵": return 119989; case "𝒶": return 119990; case "𝒷": return 119991; case "𝒸": return 119992; case "𝒹": return 119993; case "𝒻": return 119995; case "𝒽": return 119997; case "𝒾": return 119998; case "𝒿": return 119999; case "𝓀": return 120000; case "𝓁": return 120001; case "𝓂": return 120002; case "𝓃": return 120003; case "𝓅": return 120005; case "𝓆": return 120006; case "𝓇": return 120007; case "𝓈": return 120008; case "𝓉": return 120009; case "𝓊": return 120010; case "𝓋": return 120011; case "𝓌": return 120012; case "𝓍": return 120013; case "𝓎": return 120014; case "𝓏": return 120015; case "𝔄": return 120068; case "𝔅": return 120069; case "𝔇": return 120071; case "𝔈": return 120072; case "𝔉": return 120073; case "𝔊": return 120074; case "𝔍": return 120077; case "𝔎": return 120078; case "𝔏": return 120079; case "𝔐": return 120080; case "𝔑": return 120081; case "𝔒": return 120082; case "𝔓": return 120083; case "𝔔": return 120084; case "𝔖": return 120086; case "𝔗": return 120087; case "𝔘": return 120088; case "𝔙": return 120089; case "𝔚": return 120090; case "𝔛": return 120091; case "𝔜": return 120092; case "𝔞": return 120094; case "𝔟": return 120095; case "𝔠": return 120096; case "𝔡": return 120097; case "𝔢": return 120098; case "𝔣": return 120099; case "𝔤": return 120100; case "𝔥": return 120101; case "𝔦": return 120102; case "𝔧": return 120103; case "𝔨": return 120104; case "𝔩": return 120105; case "𝔪": return 120106; case "𝔫": return 120107; case "𝔬": return 120108; case "𝔭": return 120109; case "𝔮": return 120110; case "𝔯": return 120111; case "𝔰": return 120112; case "𝔱": return 120113; case "𝔲": return 120114; case "𝔳": return 120115; case "𝔴": return 120116; case "𝔵": return 120117; case "𝔶": return 120118; case "𝔷": return 120119; case "𝔸": return 120120; case "𝔹": return 120121; case "𝔻": return 120123; case "𝔼": return 120124; case "𝔽": return 120125; case "𝔾": return 120126; case "𝕀": return 120128; case "𝕁": return 120129; case "𝕂": return 120130; case "𝕃": return 120131; case "𝕄": return 120132; case "𝕆": return 120134; case "𝕊": return 120138; case "𝕋": return 120139; case "𝕌": return 120140; case "𝕍": return 120141; case "𝕎": return 120142; case "𝕏": return 120143; case "𝕐": return 120144; case "𝕒": return 120146; case "𝕓": return 120147; case "𝕔": return 120148; case "𝕕": return 120149; case "𝕖": return 120150; case "𝕗": return 120151; case "𝕘": return 120152; case "𝕙": return 120153; case "𝕚": return 120154; case "𝕛": return 120155; case "𝕜": return 120156; case "𝕝": return 120157; case "𝕞": return 120158; case "𝕟": return 120159; case "𝕠": return 120160; case "𝕡": return 120161; case "𝕢": return 120162; case "𝕣": return 120163; case "𝕤": return 120164; case "𝕥": return 120165; case "𝕦": return 120166; case "𝕧": return 120167; case "𝕨": return 120168; case "𝕩": return 120169; case "𝕪": return 120170; case "𝕫": return 120171; } return 0; } } }