public static LookupType3Format1SubTable Load(BigEndianBinaryReader reader, long offset, LookupFlags lookupFlags) { // Cursive Attachment Positioning Format1. // +--------------------+---------------------------------+------------------------------------------------------+ // | Type | Name | Description | // +====================+=================================+======================================================+ // | uint16 | posFormat | Format identifier: format = 1 | // +--------------------+---------------------------------+------------------------------------------------------+ // | Offset16 | coverageOffset | Offset to Coverage table, | // | | | from beginning of CursivePos subtable. | // +--------------------+---------------------------------+------------------------------------------------------+ // | uint16 | entryExitCount | Number of EntryExit records. | // +--------------------+---------------------------------+------------------------------------------------------+ // | EntryExitRecord | entryExitRecord[entryExitCount] | Array of EntryExit records, in Coverage index order. | // +--------------------+---------------------------------+------------------------------------------------------+ ushort coverageOffset = reader.ReadOffset16(); ushort entryExitCount = reader.ReadUInt16(); var entryExitRecords = new EntryExitRecord[entryExitCount]; for (int i = 0; i < entryExitCount; i++) { entryExitRecords[i] = new EntryExitRecord(reader, offset); } var entryExitAnchors = new EntryExitAnchors[entryExitCount]; for (int i = 0; i < entryExitCount; i++) { entryExitAnchors[i] = new EntryExitAnchors(reader, offset, entryExitRecords[i]); } var coverageTable = CoverageTable.Load(reader, offset + coverageOffset); return(new LookupType3Format1SubTable(coverageTable, entryExitAnchors, lookupFlags)); }
List <EntryExitRecord> entryExitRecord; // Array of EntryExit records, in Coverage index order. public void Read(TTFReader r, bool readFormat) { if (readFormat == true) { r.ReadInt(out this.posFormat); } r.ReadInt(out this.coverageOffset); r.ReadInt(out this.entryExitCount); this.entryExitRecord = new List <EntryExitRecord>(); for (int i = 0; i < this.entryExitCount; ++i) { EntryExitRecord eer = new EntryExitRecord(); eer.Read(r); this.entryExitRecord.Add(eer); } }
public EntryExitRecord GetEntryExitRecord(uint i) { EntryExitRecord eer = null; if (i < EntryExitCount) { ushort sizeofEntryExitRecord = 4; uint offset = m_offsetCursivePos + (uint)FieldOffsets.EntryExitRecordArray + i*sizeofEntryExitRecord; eer = new EntryExitRecord(offset, m_bufTable, m_offsetCursivePos); } return eer; }
/// <summary> /// Initializes a new instance of the <see cref="EntryExitAnchors"/> class. /// </summary> /// <param name="reader">The big endian binary reader.</param> /// <param name="offset">The offset to exitAnchor table, from beginning of CursivePos subtable.</param> /// <param name="entryExitRecord">Offsets to entry and exit Anchor table, from beginning of CursivePos subtable.</param> public EntryExitAnchors(BigEndianBinaryReader reader, long offset, EntryExitRecord entryExitRecord) { this.EntryAnchor = entryExitRecord.EntryAnchorOffset != 0 ? AnchorTable.Load(reader, offset + entryExitRecord.EntryAnchorOffset) : null; this.ExitAnchor = entryExitRecord.ExitAnchorOffset != 0 ? AnchorTable.Load(reader, offset + entryExitRecord.ExitAnchorOffset) : null; }