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); } } }