Beispiel #1
0
            public static Mark2ArrayTable CreateFrom(BinaryReader reader, long beginAt, ushort classCount)
            {
                reader.BaseStream.Seek(beginAt, SeekOrigin.Begin);
                //---
                var    mark2ArrTable = new Mark2ArrayTable();
                ushort mark2Count    = reader.ReadUInt16();

                mark2ArrTable.mark2Records = new Mark2Record[mark2Count];
                for (int i = 0; i < mark2Count; ++i)
                {
                    mark2ArrTable.mark2Records[i] = new Mark2Record(Utils.ReadInt16Array(reader, classCount));
                }
                //read mark2 anchor
                for (int i = 0; i < mark2Count; ++i)
                {
                    short[]       offsets     = mark2ArrTable.mark2Records[i].offsets;
                    AnchorPoint[] anchors     = mark2ArrTable.mark2Records[i].anchorPoints;
                    int           offsetCount = anchors.Length;
                    for (int c = 0; c < offsetCount; ++c)
                    {
                        anchors[c] = AnchorPoint.CreateFrom(reader, beginAt + offsets[c]);
                    }
                }


                return(mark2ArrTable);
            }
            public static LookupType6Format1SubTable Load(BigEndianBinaryReader reader, long offset, LookupFlags lookupFlags)
            {
                // MarkMarkPosFormat1 Subtable.
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | Type               |  Name                           | Description                                          |
                // +====================+=================================+======================================================+
                // | uint16             | posFormat                       | Format identifier: format = 1                        |
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | Offset16           | mark1CoverageOffset             | Offset to Combining Mark Coverage table,             |
                // |                    |                                 | from beginning of MarkMarkPos subtable.              |
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | Offset16           | mark2CoverageOffset             | Offset to Base Mark Coverage table,                  |
                // |                    |                                 | from beginning of MarkMarkPos subtable.              |
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | uint16             | markClassCount                  | Number of Combining Mark classes defined             |
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | Offset16           | mark1ArrayOffset                | Offset to MarkArray table for mark1,                 |
                // |                    |                                 | from beginning of MarkMarkPos subtable.              |
                // +--------------------+---------------------------------+------------------------------------------------------+
                // | Offset16           | mark2ArrayOffset                | Offset to Mark2Array table for mark2,                |
                // |                    |                                 | from beginning of MarkMarkPos subtable.              |
                // +--------------------+---------------------------------+------------------------------------------------------+
                ushort mark1CoverageOffset = reader.ReadOffset16();
                ushort mark2CoverageOffset = reader.ReadOffset16();
                ushort markClassCount      = reader.ReadUInt16();
                ushort mark1ArrayOffset    = reader.ReadOffset16();
                ushort mark2ArrayOffset    = reader.ReadOffset16();

                var mark1Coverage   = CoverageTable.Load(reader, offset + mark1CoverageOffset);
                var mark2Coverage   = CoverageTable.Load(reader, offset + mark2CoverageOffset);
                var mark1ArrayTable = new MarkArrayTable(reader, offset + mark1ArrayOffset);
                var mark2ArrayTable = new Mark2ArrayTable(reader, markClassCount, offset + mark2ArrayOffset);

                return(new LookupType6Format1SubTable(mark1Coverage, mark2Coverage, mark1ArrayTable, mark2ArrayTable, lookupFlags));
            }
 public LookupType6Format1SubTable(
     CoverageTable mark1Coverage,
     CoverageTable mark2Coverage,
     MarkArrayTable mark1ArrayTable,
     Mark2ArrayTable mark2ArrayTable,
     LookupFlags lookupFlags)
     : base(lookupFlags)
 {
     this.mark1Coverage   = mark1Coverage;
     this.mark2Coverage   = mark2Coverage;
     this.mark1ArrayTable = mark1ArrayTable;
     this.mark2ArrayTable = mark2ArrayTable;
 }
Beispiel #4
0
            public static Mark2ArrayTable CreateFrom(BinaryReader reader, long beginAt, ushort classCount)
            {
                reader.BaseStream.Seek(beginAt, SeekOrigin.Begin);
                //---
                var mark2ArrTable = new Mark2ArrayTable();

                ushort mark2Count = reader.ReadUInt16();
                mark2ArrTable.mark2Records = new Mark2Record[mark2Count];
                for (int i = 0; i < mark2Count; ++i)
                {
                    mark2ArrTable.mark2Records[i] = new Mark2Record(
                        Utils.ReadInt16Array(reader, classCount));
                }
                return mark2ArrTable;
            }