451 lines
14 KiB
C#
451 lines
14 KiB
C#
using UnityEngine;
|
|
using UnityEngine.TextCore;
|
|
using System;
|
|
|
|
|
|
namespace TMPro
|
|
{
|
|
/// <summary>
|
|
/// Flags to control what vertex data is pushed to the mesh and renderer.
|
|
/// </summary>
|
|
public enum TMP_VertexDataUpdateFlags
|
|
{
|
|
None = 0x0,
|
|
Vertices = 0x1,
|
|
Uv0 = 0x2,
|
|
Uv2 = 0x4,
|
|
Uv4 = 0x8,
|
|
Colors32 = 0x10,
|
|
All = 0xFF
|
|
};
|
|
|
|
|
|
/// <summary>
|
|
/// TMP custom data type to represent 32 bit characters.
|
|
/// </summary>
|
|
//public struct TMP_Char
|
|
//{
|
|
// private int m_value;
|
|
|
|
// private TMP_Char(int value)
|
|
// {
|
|
// this.m_value = value;
|
|
// }
|
|
|
|
// private TMP_Char(TMP_Char value)
|
|
// {
|
|
// this.m_value = (int)value;
|
|
// }
|
|
|
|
// public static implicit operator TMP_Char(int value)
|
|
// {
|
|
// return new TMP_Char(value);
|
|
// }
|
|
|
|
// public static implicit operator TMP_Char(char c)
|
|
// {
|
|
// return new TMP_Char(c);
|
|
// }
|
|
|
|
// public static explicit operator int(TMP_Char value)
|
|
// {
|
|
// return value.m_value;
|
|
// }
|
|
|
|
// public override string ToString()
|
|
// {
|
|
// return m_value.ToString();
|
|
// }
|
|
//}
|
|
|
|
|
|
//public struct TMP_VertexInfo
|
|
//{
|
|
// public TMP_Vertex topLeft;
|
|
// public TMP_Vertex bottomLeft;
|
|
// public TMP_Vertex topRight;
|
|
// public TMP_Vertex bottomRight;
|
|
//}
|
|
|
|
|
|
[Serializable]
|
|
public struct VertexGradient
|
|
{
|
|
public Color topLeft;
|
|
public Color topRight;
|
|
public Color bottomLeft;
|
|
public Color bottomRight;
|
|
|
|
public VertexGradient (Color color)
|
|
{
|
|
this.topLeft = color;
|
|
this.topRight = color;
|
|
this.bottomLeft = color;
|
|
this.bottomRight = color;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The vertex colors at the corners of the characters.
|
|
/// </summary>
|
|
/// <param name="color0">Top left color.</param>
|
|
/// <param name="color1">Top right color.</param>
|
|
/// <param name="color2">Bottom left color.</param>
|
|
/// <param name="color3">Bottom right color.</param>
|
|
public VertexGradient(Color color0, Color color1, Color color2, Color color3)
|
|
{
|
|
this.topLeft = color0;
|
|
this.topRight = color1;
|
|
this.bottomLeft = color2;
|
|
this.bottomRight = color3;
|
|
}
|
|
}
|
|
|
|
|
|
public struct TMP_PageInfo
|
|
{
|
|
public int firstCharacterIndex;
|
|
public int lastCharacterIndex;
|
|
public float ascender;
|
|
public float baseLine;
|
|
public float descender;
|
|
// public float extents;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Structure containing information about individual links contained in the text object.
|
|
/// </summary>
|
|
public struct TMP_LinkInfo
|
|
{
|
|
public TMP_Text textComponent;
|
|
|
|
public int hashCode;
|
|
|
|
public int linkIdFirstCharacterIndex;
|
|
public int linkIdLength;
|
|
public int linkTextfirstCharacterIndex;
|
|
public int linkTextLength;
|
|
|
|
internal char[] linkID;
|
|
|
|
|
|
internal void SetLinkID(char[] text, int startIndex, int length)
|
|
{
|
|
if (linkID == null || linkID.Length < length) linkID = new char[length];
|
|
|
|
for (int i = 0; i < length; i++)
|
|
linkID[i] = text[startIndex + i];
|
|
}
|
|
|
|
/// <summary>
|
|
/// Function which returns the text contained in a link.
|
|
/// </summary>
|
|
/// <param name="textInfo"></param>
|
|
/// <returns></returns>
|
|
public string GetLinkText()
|
|
{
|
|
string text = string.Empty;
|
|
TMP_TextInfo textInfo = textComponent.textInfo;
|
|
|
|
for (int i = linkTextfirstCharacterIndex; i < linkTextfirstCharacterIndex + linkTextLength; i++)
|
|
text += textInfo.characterInfo[i].character;
|
|
|
|
return text;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Function which returns the link ID as a string.
|
|
/// </summary>
|
|
/// <param name="text">The source input text.</param>
|
|
/// <returns></returns>
|
|
public string GetLinkID()
|
|
{
|
|
if (textComponent == null)
|
|
return string.Empty;
|
|
|
|
return new string(linkID, 0, linkIdLength);
|
|
//return textComponent.text.Substring(linkIdFirstCharacterIndex, linkIdLength);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Structure containing information about the individual words contained in the text object.
|
|
/// </summary>
|
|
public struct TMP_WordInfo
|
|
{
|
|
// NOTE: Structure could be simplified by only including the firstCharacterIndex and length.
|
|
|
|
public TMP_Text textComponent;
|
|
|
|
public int firstCharacterIndex;
|
|
public int lastCharacterIndex;
|
|
public int characterCount;
|
|
//public float length;
|
|
|
|
/// <summary>
|
|
/// Returns the word as a string.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetWord()
|
|
{
|
|
string word = string.Empty;
|
|
TMP_CharacterInfo[] charInfo = textComponent.textInfo.characterInfo;
|
|
|
|
for (int i = firstCharacterIndex; i < lastCharacterIndex + 1; i++)
|
|
{
|
|
word += charInfo[i].character;
|
|
}
|
|
|
|
return word;
|
|
}
|
|
}
|
|
|
|
|
|
public struct TMP_SpriteInfo
|
|
{
|
|
public int spriteIndex; // Index of the sprite in the sprite atlas.
|
|
public int characterIndex; // The characterInfo index which holds the key information about this sprite.
|
|
public int vertexIndex;
|
|
}
|
|
|
|
|
|
//public struct SpriteInfo
|
|
//{
|
|
//
|
|
//}
|
|
|
|
|
|
public struct Extents
|
|
{
|
|
internal static Extents zero = new Extents(Vector2.zero, Vector2.zero);
|
|
internal static Extents uninitialized = new Extents(new Vector2(32767, 32767), new Vector2(-32767, -32767));
|
|
|
|
public Vector2 min;
|
|
public Vector2 max;
|
|
|
|
public Extents(Vector2 min, Vector2 max)
|
|
{
|
|
this.min = min;
|
|
this.max = max;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
string s = "Min (" + min.x.ToString("f2") + ", " + min.y.ToString("f2") + ") Max (" + max.x.ToString("f2") + ", " + max.y.ToString("f2") + ")";
|
|
return s;
|
|
}
|
|
}
|
|
|
|
|
|
[Serializable]
|
|
public struct Mesh_Extents
|
|
{
|
|
public Vector2 min;
|
|
public Vector2 max;
|
|
|
|
|
|
public Mesh_Extents(Vector2 min, Vector2 max)
|
|
{
|
|
this.min = min;
|
|
this.max = max;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
string s = "Min (" + min.x.ToString("f2") + ", " + min.y.ToString("f2") + ") Max (" + max.x.ToString("f2") + ", " + max.y.ToString("f2") + ")";
|
|
//string s = "Center: (" + ")" + " Extents: (" + ((max.x - min.x) / 2).ToString("f2") + "," + ((max.y - min.y) / 2).ToString("f2") + ").";
|
|
return s;
|
|
}
|
|
}
|
|
|
|
// internal struct TMP_TextProcessingState
|
|
// {
|
|
// // Multi Font & Material support related
|
|
// public TMP_FontAsset CurrentFontAsset;
|
|
// public TMP_SpriteAsset CurrentSpriteAsset;
|
|
// public Material CurrentMaterial;
|
|
// public int CurrentMaterialIndex;
|
|
//
|
|
// public float CurrentFontSize;
|
|
// public float FontScale;
|
|
// public float FontScaleMultiplier;
|
|
// public FontStyles FontStyle;
|
|
// public int ItalicAngle;
|
|
//
|
|
// public float CharacterSpacing;
|
|
// public float CharacterMonoSpacing;
|
|
// public bool TagNoParsing;
|
|
//
|
|
// public float HorizontalAdvance;
|
|
// public float MaxCapHeight;
|
|
// public float MaxTextAscender;
|
|
// public float MaxTextDescender;
|
|
// public float MaxElementAscender;
|
|
// public float MaxElementDescender;
|
|
// public float StartOfLineAscender;
|
|
// public float MaxLineAscender;
|
|
// public float MaxLineDescender;
|
|
// public float PageAscender;
|
|
//
|
|
// public int PreviousWordBreak;
|
|
// public int TotalCharacterCount;
|
|
// //public int VisibleCharacterCount;
|
|
// //public int VisibleSpriteCount;
|
|
// public int VisibleLinkCount;
|
|
// public int FirstCharacterIndex;
|
|
// public int FirstVisibleCharacterIndex;
|
|
// public int LastCharacterIndex;
|
|
// public int LastVisibleCharIndex;
|
|
//
|
|
// public int LineNumber;
|
|
// public float baselineOffset;
|
|
// public float lineOffset;
|
|
// public bool isDrivenLineSpacing;
|
|
// public bool IsNonBreakingSpace;
|
|
//
|
|
// public HorizontalAlignmentOptions HorizontalAlignment;
|
|
// public float MarginLeft;
|
|
// public float MarginRight;
|
|
//
|
|
// public float PreferredWidth;
|
|
// public float PreferredHeight;
|
|
//
|
|
// public Color32 VertexColor;
|
|
// public Color32 UnderlineColor;
|
|
// public Color32 StrikethroughColor;
|
|
// //public Color32 HighlightColor;
|
|
//
|
|
// public Extents MeshExtents;
|
|
// public TMP_LineInfo lineInfo;
|
|
//
|
|
// public int spriteAnimationID;
|
|
//
|
|
// public TMP_FontStyleStack BasicStyleStack;
|
|
// public TMP_RichTextTagStack<int> ItalicAngleStack;
|
|
// public TMP_RichTextTagStack<Color32> ColorStack;
|
|
// public TMP_RichTextTagStack<Color32> UnderlineColorStack;
|
|
// public TMP_RichTextTagStack<Color32> StrikethroughColorStack;
|
|
// public TMP_RichTextTagStack<Color32> HighlightColorStack;
|
|
// public TMP_RichTextTagStack<HighlightState> HighlightStateStack;
|
|
// public TMP_RichTextTagStack<TMP_ColorGradient> ColorGradientStack;
|
|
// public TMP_RichTextTagStack<float> SizeStack;
|
|
// public TMP_RichTextTagStack<float> IndentStack;
|
|
// public TMP_RichTextTagStack<FontWeight> FontWeightStack;
|
|
//
|
|
// public TMP_RichTextTagStack<float> BaselineStack;
|
|
// //public TMP_RichTextTagStack<int> ActionStack;
|
|
// public TMP_RichTextTagStack<MaterialReference> MaterialReferenceStack;
|
|
// public TMP_RichTextTagStack<HorizontalAlignmentOptions> LineJustificationStack;
|
|
// }
|
|
|
|
|
|
// Structure used for Word Wrapping which tracks the state of execution when the last space or carriage return character was encountered.
|
|
public struct WordWrapState
|
|
{
|
|
public int previous_WordBreak;
|
|
public int total_CharacterCount;
|
|
public int visible_CharacterCount;
|
|
public int visible_SpriteCount;
|
|
public int visible_LinkCount;
|
|
public int firstCharacterIndex;
|
|
public int firstVisibleCharacterIndex;
|
|
public int lastCharacterIndex;
|
|
public int lastVisibleCharIndex;
|
|
public int lineNumber;
|
|
|
|
public float maxCapHeight;
|
|
public float maxAscender;
|
|
public float maxDescender;
|
|
public float startOfLineAscender;
|
|
public float maxLineAscender;
|
|
public float maxLineDescender;
|
|
public float pageAscender;
|
|
|
|
public HorizontalAlignmentOptions horizontalAlignment;
|
|
public float marginLeft;
|
|
public float marginRight;
|
|
|
|
public float xAdvance;
|
|
public float preferredWidth;
|
|
public float preferredHeight;
|
|
//public float maxFontScale;
|
|
public float previousLineScale;
|
|
|
|
public int wordCount;
|
|
public FontStyles fontStyle;
|
|
public int italicAngle;
|
|
public float fontScale;
|
|
public float fontScaleMultiplier;
|
|
|
|
public float currentFontSize;
|
|
public float baselineOffset;
|
|
public float lineOffset;
|
|
public bool isDrivenLineSpacing;
|
|
public float glyphHorizontalAdvanceAdjustment;
|
|
|
|
public float cSpace;
|
|
public float mSpace;
|
|
|
|
public TMP_TextInfo textInfo;
|
|
public TMP_LineInfo lineInfo;
|
|
|
|
public Color32 vertexColor;
|
|
public Color32 underlineColor;
|
|
public Color32 strikethroughColor;
|
|
public Color32 highlightColor;
|
|
public TMP_FontStyleStack basicStyleStack;
|
|
public TMP_TextProcessingStack<int> italicAngleStack;
|
|
public TMP_TextProcessingStack<Color32> colorStack;
|
|
public TMP_TextProcessingStack<Color32> underlineColorStack;
|
|
public TMP_TextProcessingStack<Color32> strikethroughColorStack;
|
|
public TMP_TextProcessingStack<Color32> highlightColorStack;
|
|
public TMP_TextProcessingStack<HighlightState> highlightStateStack;
|
|
public TMP_TextProcessingStack<TMP_ColorGradient> colorGradientStack;
|
|
public TMP_TextProcessingStack<float> sizeStack;
|
|
public TMP_TextProcessingStack<float> indentStack;
|
|
public TMP_TextProcessingStack<FontWeight> fontWeightStack;
|
|
public TMP_TextProcessingStack<int> styleStack;
|
|
public TMP_TextProcessingStack<float> baselineStack;
|
|
public TMP_TextProcessingStack<int> actionStack;
|
|
public TMP_TextProcessingStack<MaterialReference> materialReferenceStack;
|
|
public TMP_TextProcessingStack<HorizontalAlignmentOptions> lineJustificationStack;
|
|
public int spriteAnimationID;
|
|
|
|
public TMP_FontAsset currentFontAsset;
|
|
public TMP_SpriteAsset currentSpriteAsset;
|
|
public Material currentMaterial;
|
|
public int currentMaterialIndex;
|
|
|
|
public Extents meshExtents;
|
|
|
|
public bool tagNoParsing;
|
|
public bool isNonBreakingSpace;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Structure used to store retrieve the name and hashcode of the font and material
|
|
/// </summary>
|
|
public struct TagAttribute
|
|
{
|
|
public int startIndex;
|
|
public int length;
|
|
public int hashCode;
|
|
}
|
|
|
|
|
|
public struct RichTextTagAttribute
|
|
{
|
|
public int nameHashCode;
|
|
public int valueHashCode;
|
|
public TagValueType valueType;
|
|
public int valueStartIndex;
|
|
public int valueLength;
|
|
public TagUnitType unitType;
|
|
}
|
|
|
|
}
|