using UnityEngine; using UnityEngine.TextCore; using System; namespace TMPro { /// /// Flags to control what vertex data is pushed to the mesh and renderer. /// public enum TMP_VertexDataUpdateFlags { None = 0x0, Vertices = 0x1, Uv0 = 0x2, Uv2 = 0x4, Uv4 = 0x8, Colors32 = 0x10, All = 0xFF }; /// /// TMP custom data type to represent 32 bit characters. /// //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; } /// /// The vertex colors at the corners of the characters. /// /// Top left color. /// Top right color. /// Bottom left color. /// Bottom right color. 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; } /// /// Structure containing information about individual links contained in the text object. /// 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]; } /// /// Function which returns the text contained in a link. /// /// /// 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; } /// /// Function which returns the link ID as a string. /// /// The source input text. /// public string GetLinkID() { if (textComponent == null) return string.Empty; return new string(linkID, 0, linkIdLength); //return textComponent.text.Substring(linkIdFirstCharacterIndex, linkIdLength); } } /// /// Structure containing information about the individual words contained in the text object. /// 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; /// /// Returns the word as a string. /// /// 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 ItalicAngleStack; // public TMP_RichTextTagStack ColorStack; // public TMP_RichTextTagStack UnderlineColorStack; // public TMP_RichTextTagStack StrikethroughColorStack; // public TMP_RichTextTagStack HighlightColorStack; // public TMP_RichTextTagStack HighlightStateStack; // public TMP_RichTextTagStack ColorGradientStack; // public TMP_RichTextTagStack SizeStack; // public TMP_RichTextTagStack IndentStack; // public TMP_RichTextTagStack FontWeightStack; // // public TMP_RichTextTagStack BaselineStack; // //public TMP_RichTextTagStack ActionStack; // public TMP_RichTextTagStack MaterialReferenceStack; // public TMP_RichTextTagStack 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 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 italicAngleStack; public TMP_TextProcessingStack colorStack; public TMP_TextProcessingStack underlineColorStack; public TMP_TextProcessingStack strikethroughColorStack; public TMP_TextProcessingStack highlightColorStack; public TMP_TextProcessingStack highlightStateStack; public TMP_TextProcessingStack colorGradientStack; public TMP_TextProcessingStack sizeStack; public TMP_TextProcessingStack indentStack; public TMP_TextProcessingStack fontWeightStack; public TMP_TextProcessingStack styleStack; public TMP_TextProcessingStack baselineStack; public TMP_TextProcessingStack actionStack; public TMP_TextProcessingStack materialReferenceStack; public TMP_TextProcessingStack 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; } /// /// Structure used to store retrieve the name and hashcode of the font and material /// 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; } }