protected virtual bool ParseInputTextAndEmojiCharSequence() { m_emojiParsingRequired = false; //Only parse when richtext active (we need the <sprite=index> tag) if (m_isRichText) { var v_parsedEmoji = false; var v_oldText = m_text; /*//Parse Sprite Chars * ParseInputText(); * * //Parse Emojis * m_text = CharBufferToString(); //Pick the char unicodes to parse the emojis * v_parsedEmoji = TMP_EmojiSearchEngine.ParseEmojiCharSequence(spriteAsset, ref m_text); * * //Apply parsed Emoji to char buffer * if (v_parsedEmoji) * { * StringToCharArray(m_text, ref m_char_buffer); * SetArraySizes(m_char_buffer); * }*/ v_parsedEmoji = TMP_EmojiSearchEngine.ParseEmojiCharSequence(spriteAsset, ref m_text); m_emojiParsingRequired = false; IsInputParsingRequired_Internal = false; InputSource_Internal = TextInputSources.Text; ParseInputText(); m_emojiParsingRequired = false; IsInputParsingRequired_Internal = false; //Debug.Log("ParseInputTextAndEmojiCharSequence"); //We must revert the original text because we dont want to permanently change the text m_text = v_oldText; #if !TMP_2_1_0_PREVIEW_10_OR_NEWER m_isCalculateSizeRequired = true; #endif return(v_parsedEmoji); } return(false); }
protected virtual bool ParseInputTextAndLocalizeTags() { _localeParsingRequired = false; //Only parse when richtext active (we need the <sprite=index> tag) if (LocaleManager.InstanceExists() || !Application.isPlaying || (m_supportLocaleRichTextTags && m_isRichText && !m_isLocalized)) { var v_parsedLocale = false; var v_oldText = m_text; if (IsInputParsingRequired_Internal) { m_text = m_text != null?m_text.Replace("\n", "\\n").Replace("\r", "") : null; } v_parsedLocale = !Application.isPlaying || (m_supportLocaleRichTextTags && m_isRichText && !m_isLocalized) ? TryClearLocaleTags(m_text, out m_text) : TryGetLocalizedText(m_text, out m_text); _localeParsingRequired = false; IsInputParsingRequired_Internal = false; InputSource_Internal = TextInputSources.Text; ParseInputText(); _localeParsingRequired = false; IsInputParsingRequired_Internal = false; //Debug.Log("ParseInputTextAndEmojiCharSequence"); //We must revert the original text because we dont want to permanently change the text m_text = v_oldText; #if !TMP_2_1_0_PREVIEW_10_OR_NEWER m_isCalculateSizeRequired = true; #endif return(v_parsedLocale); } return(false); }
/// <summary> /// Set the text using a StringBuilder. /// </summary> /// <description> /// Using a StringBuilder instead of concatenating strings prevents memory pollution with temporary objects. /// </description> /// <param name="text">StringBuilder with text to display.</param> public void SetText(StringBuilder text) { StringBuilderToIntArray(text, ref m_char_buffer); m_inputSource = TextInputSources.SetCharArray; m_isInputParsingRequired = true; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
/// <summary> /// <para>Formatted string containing a pattern and a value representing the text to be rendered.</para> /// <para>ex. TextMeshPro.SetText ("A = {0}, B = {1} and C = {2}.", 2, 5, 7);</para> /// </summary> /// <typeparam name="T"></typeparam> /// <param name="text">String containing the pattern."</param> /// <param name="arg0">Value is a float.</param> /// <param name="arg1">Value is a float.</param> /// <param name="arg2">Value is a float.</param> public void SetText(string text, float arg0, float arg1, float arg2) { // Early out if nothing has been changed from previous invocation. if (text == old_text && arg0 == old_arg0 && arg1 == old_arg1 && arg2 == old_arg2) { return; } old_text = text; old_arg1 = 255; old_arg2 = 255; int decimalPrecision = 0; int index = 0; for (int i = 0; i < text.Length; i++) { char c = text[i]; if (c == 123) // '{' { // Check if user is requesting some decimal precision. Format is {0:2} if (text[i + 2] == 58) // ':' { decimalPrecision = text[i + 3] - 48; } switch (text[i + 1] - 48) { case 0: // 1st Arg old_arg0 = arg0; AddFloatToCharArray(arg0, ref index, decimalPrecision); break; case 1: // 2nd Arg old_arg1 = arg1; AddFloatToCharArray(arg1, ref index, decimalPrecision); break; case 2: // 3rd Arg old_arg2 = arg2; AddFloatToCharArray(arg2, ref index, decimalPrecision); break; } if (text[i + 2] == 58) i += 4; else i += 2; continue; } m_input_CharArray[index] = c; index += 1; } m_input_CharArray[index] = (char)0; m_charArray_Length = index; // Set the length to where this '0' termination is. #if UNITY_EDITOR // Create new string to be displayed in the Input Text Box of the Editor Panel. m_text = new string(m_input_CharArray, 0, index); #endif m_inputSource = TextInputSources.SetText; m_isInputParsingRequired = true; m_havePropertiesChanged = true; m_isCalculateSizeRequired = true; SetVerticesDirty(); SetLayoutDirty(); }
/// <summary> /// Character array containing the text to be displayed. /// </summary> /// <param name="charArray"></param> public void SetCharArray(char[] charArray) { if (charArray == null || charArray.Length == 0) return; // Check to make sure chars_buffer is large enough to hold the content of the string. if (m_char_buffer.Length <= charArray.Length) { int newSize = Mathf.NextPowerOfTwo(charArray.Length + 1); m_char_buffer = new int[newSize]; } int index = 0; for (int i = 0; i < charArray.Length; i++) { if (charArray[i] == 92 && i < charArray.Length - 1) { switch ((int)charArray[i + 1]) { case 110: // \n LineFeed m_char_buffer[index] = (char)10; i += 1; index += 1; continue; case 114: // \r LineFeed m_char_buffer[index] = (char)13; i += 1; index += 1; continue; case 116: // \t Tab m_char_buffer[index] = (char)9; i += 1; index += 1; continue; } } m_char_buffer[index] = charArray[i]; index += 1; } m_char_buffer[index] = (char)0; m_inputSource = TextInputSources.SetCharArray; m_havePropertiesChanged = true; m_isInputParsingRequired = true; }