You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
449 lines
14 KiB
449 lines
14 KiB
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 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; |
|
} |
|
|
|
}
|
|
|