Exemple #1
0
            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));
            }
Exemple #2
0
            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;
 }