using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TMPro { public class TMP_TextParsingUtilities { private static readonly TMP_TextParsingUtilities s_Instance = new TMP_TextParsingUtilities(); /// /// Default constructor /// static TMP_TextParsingUtilities() { } /// /// Get a singleton instance of the TextModuleUtilities. /// public static TMP_TextParsingUtilities instance { get { return s_Instance; } } /// /// Function returning the hashcode value of a given string. /// public static int GetHashCode(string s) { int hashCode = 0; for (int i = 0; i < s.Length; i++) hashCode = ((hashCode << 5) + hashCode) ^ ToUpperASCIIFast(s[i]); return hashCode; } public static int GetHashCodeCaseSensitive(string s) { int hashCode = 0; for (int i = 0; i < s.Length; i++) hashCode = ((hashCode << 5) + hashCode) ^ s[i]; return hashCode; } /// /// Table used to convert character to lowercase. /// const string k_LookupStringL = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[-]^_`abcdefghijklmnopqrstuvwxyz{|}~-"; /// /// Table used to convert character to uppercase. /// const string k_LookupStringU = "-------------------------------- !-#$%&-()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[-]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~-"; /// /// Get lowercase version of this ASCII character. /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static char ToLowerASCIIFast(char c) { if (c > k_LookupStringL.Length - 1) return c; return k_LookupStringL[c]; } /// /// Get uppercase version of this ASCII character. /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static char ToUpperASCIIFast(char c) { if (c > k_LookupStringU.Length - 1) return c; return k_LookupStringU[c]; } /// /// Get uppercase version of this ASCII character. /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint ToUpperASCIIFast(uint c) { if (c > k_LookupStringU.Length - 1) return c; return k_LookupStringU[(int)c]; } /// /// Get lowercase version of this ASCII character. /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static uint ToLowerASCIIFast(uint c) { if (c > k_LookupStringL.Length - 1) return c; return k_LookupStringL[(int)c]; } /// /// Check if Unicode is High Surrogate /// /// /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsHighSurrogate(uint c) { return c > 0xD800 && c < 0xDBFF; } /// /// Check if Unicode is Low Surrogate /// /// /// //[MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsLowSurrogate(uint c) { return c > 0xDC00 && c < 0xDFFF; } /// /// /// /// /// /// internal static uint ConvertToUTF32(uint highSurrogate, uint lowSurrogate) { return ((highSurrogate - CodePoint.HIGH_SURROGATE_START) * 0x400) + ((lowSurrogate - CodePoint.LOW_SURROGATE_START) + CodePoint.UNICODE_PLANE01_START); } /// /// /// /// /// internal static bool IsDiacriticalMark(uint c) { return c >= 0x300 && c <= 0x36F || c >= 0x1AB0 && c <= 0x1AFF || c >= 0x1DC0 && c <= 0x1DFF || c >= 0x20D0 && c <= 0x20FF || c >= 0xFE20 && c <= 0xFE2F; } internal static bool IsBaseGlyph(uint c) { return !(c >= 0x300 && c <= 0x36F || c >= 0x1AB0 && c <= 0x1AFF || c >= 0x1DC0 && c <= 0x1DFF || c >= 0x20D0 && c <= 0x20FF || c >= 0xFE20 && c <= 0xFE2F || // Thai Marks c == 0xE31 || c >= 0xE34 && c <= 0xE3A || c >= 0xE47 && c <= 0xE4E || // Hebrew Marks c >= 0x591 && c <= 0x5BD || c == 0x5BF || c >= 0x5C1 && c <= 0x5C2 || c >= 0x5C4 && c <= 0x5C5 || c == 0x5C7 || // Arabic Marks c >= 0x610 && c <= 0x61A || c >= 0x64B && c <= 0x65F || c == 0x670 || c >= 0x6D6 && c <= 0x6DC || c >= 0x6DF && c <= 0x6E4 || c >= 0x6E7 && c <= 0x6E8 || c >= 0x6EA && c <= 0x6ED || c >= 0x8D3 && c <= 0x8E1 || c >= 0x8E3 && c <= 0x8FF || c >= 0xFBB2 && c <= 0xFBC1 ); } } }