147 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | |||
|  | using System.Linq; | |||
|  | using System.Collections.Generic; | |||
|  | using UnityEngine; | |||
|  | using UnityEngine.TextCore.LowLevel; | |||
|  | 
 | |||
|  | 
 | |||
|  | namespace TMPro | |||
|  | { | |||
|  |     /// <summary> | |||
|  |     /// Table that contains the various font features available for the given font asset. | |||
|  |     /// </summary> | |||
|  |     [Serializable] | |||
|  |     public class TMP_FontFeatureTable | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         /// List that contains the glyph multiple substitution records. | |||
|  |         /// </summary> | |||
|  |         public List<MultipleSubstitutionRecord> multipleSubstitutionRecords | |||
|  |         { | |||
|  |             get { return m_MultipleSubstitutionRecords; } | |||
|  |             set { m_MultipleSubstitutionRecords = value; } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// List that contains the glyph ligature records. | |||
|  |         /// </summary> | |||
|  |         public List<LigatureSubstitutionRecord> ligatureRecords | |||
|  |         { | |||
|  |             get { return m_LigatureSubstitutionRecords; } | |||
|  |             set { m_LigatureSubstitutionRecords = value; } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// List that contains the glyph pair adjustment records. | |||
|  |         /// </summary> | |||
|  |         public List<GlyphPairAdjustmentRecord> glyphPairAdjustmentRecords | |||
|  |         { | |||
|  |             get { return m_GlyphPairAdjustmentRecords; } | |||
|  |             set { m_GlyphPairAdjustmentRecords = value; } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// | |||
|  |         /// </summary> | |||
|  |         public List<MarkToBaseAdjustmentRecord> MarkToBaseAdjustmentRecords | |||
|  |         { | |||
|  |             get { return m_MarkToBaseAdjustmentRecords; } | |||
|  |             set { m_MarkToBaseAdjustmentRecords = value; } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// | |||
|  |         /// </summary> | |||
|  |         public List<MarkToMarkAdjustmentRecord> MarkToMarkAdjustmentRecords | |||
|  |         { | |||
|  |             get { return m_MarkToMarkAdjustmentRecords; } | |||
|  |             set { m_MarkToMarkAdjustmentRecords = value; } | |||
|  |         } | |||
|  | 
 | |||
|  |         // ============================================= | |||
|  |         // Private backing fields for public properties. | |||
|  |         // ============================================= | |||
|  | 
 | |||
|  |         [SerializeField] | |||
|  |         internal List<MultipleSubstitutionRecord> m_MultipleSubstitutionRecords; | |||
|  | 
 | |||
|  |         [SerializeField] | |||
|  |         internal List<LigatureSubstitutionRecord> m_LigatureSubstitutionRecords; | |||
|  | 
 | |||
|  |         [SerializeField] | |||
|  |         internal List<GlyphPairAdjustmentRecord> m_GlyphPairAdjustmentRecords; | |||
|  | 
 | |||
|  |         [SerializeField] | |||
|  |         internal List<MarkToBaseAdjustmentRecord> m_MarkToBaseAdjustmentRecords; | |||
|  | 
 | |||
|  |         [SerializeField] | |||
|  |         internal List<MarkToMarkAdjustmentRecord> m_MarkToMarkAdjustmentRecords; | |||
|  | 
 | |||
|  | 
 | |||
|  |         // ============================================= | |||
|  |         // Lookup data structures. | |||
|  |         // ============================================= | |||
|  | 
 | |||
|  |         internal Dictionary<uint, List<LigatureSubstitutionRecord>> m_LigatureSubstitutionRecordLookup; | |||
|  | 
 | |||
|  |         internal Dictionary<uint, GlyphPairAdjustmentRecord> m_GlyphPairAdjustmentRecordLookup; | |||
|  | 
 | |||
|  |         internal Dictionary<uint, MarkToBaseAdjustmentRecord> m_MarkToBaseAdjustmentRecordLookup; | |||
|  | 
 | |||
|  |         internal Dictionary<uint, MarkToMarkAdjustmentRecord> m_MarkToMarkAdjustmentRecordLookup; | |||
|  | 
 | |||
|  |         // ============================================= | |||
|  |         // Constructor(s) | |||
|  |         // ============================================= | |||
|  | 
 | |||
|  |         public TMP_FontFeatureTable() | |||
|  |         { | |||
|  |             m_LigatureSubstitutionRecords = new List<LigatureSubstitutionRecord>(); | |||
|  |             m_LigatureSubstitutionRecordLookup = new Dictionary<uint, List<LigatureSubstitutionRecord>>(); | |||
|  | 
 | |||
|  |             m_GlyphPairAdjustmentRecords = new List<GlyphPairAdjustmentRecord>(); | |||
|  |             m_GlyphPairAdjustmentRecordLookup = new Dictionary<uint, GlyphPairAdjustmentRecord>(); | |||
|  | 
 | |||
|  |             m_MarkToBaseAdjustmentRecords = new List<MarkToBaseAdjustmentRecord>(); | |||
|  |             m_MarkToBaseAdjustmentRecordLookup = new Dictionary<uint, MarkToBaseAdjustmentRecord>(); | |||
|  | 
 | |||
|  |             m_MarkToMarkAdjustmentRecords = new List<MarkToMarkAdjustmentRecord>(); | |||
|  |             m_MarkToMarkAdjustmentRecordLookup = new Dictionary<uint, MarkToMarkAdjustmentRecord>(); | |||
|  |         } | |||
|  | 
 | |||
|  |         // ============================================= | |||
|  |         // Utility Functions | |||
|  |         // ============================================= | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Sort the glyph pair adjustment records by glyph index. | |||
|  |         /// </summary> | |||
|  |         public void SortGlyphPairAdjustmentRecords() | |||
|  |         { | |||
|  |             // Sort List of Kerning Info | |||
|  |             if (m_GlyphPairAdjustmentRecords.Count > 0) | |||
|  |                 m_GlyphPairAdjustmentRecords = m_GlyphPairAdjustmentRecords.OrderBy(s => s.firstAdjustmentRecord.glyphIndex).ThenBy(s => s.secondAdjustmentRecord.glyphIndex).ToList(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Sort the Mark-to-Base Adjustment Table records. | |||
|  |         /// </summary> | |||
|  |         public void SortMarkToBaseAdjustmentRecords() | |||
|  |         { | |||
|  |             // Sort List of Kerning Info | |||
|  |             if (m_MarkToBaseAdjustmentRecords.Count > 0) | |||
|  |                 m_MarkToBaseAdjustmentRecords = m_MarkToBaseAdjustmentRecords.OrderBy(s => s.baseGlyphID).ThenBy(s => s.markGlyphID).ToList(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// Sort the Mark-to-Mark Adjustment Table records. | |||
|  |         /// </summary> | |||
|  |         public void SortMarkToMarkAdjustmentRecords() | |||
|  |         { | |||
|  |             // Sort List of Kerning Info | |||
|  |             if (m_MarkToMarkAdjustmentRecords.Count > 0) | |||
|  |                 m_MarkToMarkAdjustmentRecords = m_MarkToMarkAdjustmentRecords.OrderBy(s => s.baseMarkGlyphID).ThenBy(s => s.combiningMarkGlyphID).ToList(); | |||
|  |         } | |||
|  |     } | |||
|  | } |