123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- 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();
- }
- }
- }
|