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: <, >. 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 &	" 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 &	" 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;
}
}
}