Ejemplo n.º 1
0
        protected override void ReadContentFrom(BinaryReader reader)
        {
            ushort verion  = reader.ReadUInt16();
            ushort nTables = reader.ReadUInt16();//subtable count

            //TODO: review here
            if (nTables > 1)
            {
                throw new System.NotSupportedException();
            }

            for (int i = 0; i < nTables; ++i)
            {
                ushort       subTableVersion = reader.ReadUInt16();
                ushort       len             = reader.ReadUInt16();                   //Length of the subtable, in bytes (including this header).
                KernCoverage kerCoverage     = new KernCoverage(reader.ReadUInt16()); //What type of information is contained in this table.
                //The coverage field is divided into the following sub-fields, with sizes given in bits:
                //----------------------------------------------
                switch (kerCoverage.format)
                {
                case 0:
                    ReadSubTableFormat0(reader, len - (7 * 2));    //7 fields * 2 byte each
                    break;

                case 2:
                    //TODO: implement
                    throw new System.NotImplementedException();

                default:
                    throw new System.NotSupportedException();
                }
            }
        }
Ejemplo n.º 2
0
        protected override void ReadContentFrom(BinaryReader reader)
        {
            ushort verion = reader.ReadUInt16();
            ushort nTables = reader.ReadUInt16();//subtable count
            //TODO: review here
            if (nTables > 1)
            {
                throw new System.NotSupportedException();
            }

            for (int i = 0; i < nTables; ++i)
            {
                ushort subTableVersion = reader.ReadUInt16();
                ushort len = reader.ReadUInt16(); //Length of the subtable, in bytes (including this header).
                KernCoverage kerCoverage = new KernCoverage(reader.ReadUInt16());//What type of information is contained in this table.
                //The coverage field is divided into the following sub-fields, with sizes given in bits:
                //----------------------------------------------
                switch (kerCoverage.format)
                {
                    case 0:
                        ReadSubTableFormat0(reader, len - (7 * 2));//7 fields * 2 byte each
                        break;
                    case 2:
                        //TODO: implement
                        throw new System.NotImplementedException();
                    default:
                        throw new System.NotSupportedException();
                }

            }
        }
Ejemplo n.º 3
0
        protected override void ReadContentFrom(BinaryReader reader)
        {
            ushort verion  = reader.ReadUInt16();
            ushort nTables = reader.ReadUInt16();//subtable count

            //TODO: review here
            if (nTables > 1)
            {
                Utils.WarnUnimplemented("Support for {0} kerning tables", nTables);
            }

            for (int i = 0; i < nTables; ++i)
            {
                ushort       subTableVersion = reader.ReadUInt16();
                ushort       len             = reader.ReadUInt16();                   //Length of the subtable, in bytes (including this header).
                KernCoverage kerCoverage     = new KernCoverage(reader.ReadUInt16()); //What type of information is contained in this table.

                //The coverage field is divided into the following sub-fields, with sizes given in bits:
                //----------------------------------------------
                //Format of the subtable.
                //Only formats 0 and 2 have been defined.
                //Formats 1 and 3 through 255 are reserved for future use.

                switch (kerCoverage.format)
                {
                case 0:
                    ReadSubTableFormat0(reader, len - (3 * 2));    //3 header field * 2 byte each
                    break;

                case 2:
                //TODO: implement
                default:
                    Utils.WarnUnimplemented("Kerning Coverage Format {0}", kerCoverage.format);
                    break;
                }
            }
        }
Ejemplo n.º 4
0
 public KerningSubTable(int version, KernCoverage coverage, IReadOnlyList <KernPair> pairs)
 {
     Version  = version;
     Coverage = coverage;
     Pairs    = pairs;
 }
Ejemplo n.º 5
0
        private static KerningSubTable ReadFormat2Table(int version, TrueTypeDataBytes data, KernCoverage coverage, long tableStartOffset)
        {
            // TODO: Implement and test this;
            return(null);

#pragma warning disable 162
            var rowWidth = data.ReadUnsignedShort();

            var leftClassTableOffset  = data.ReadUnsignedShort();
            var rightClassTableOffset = data.ReadUnsignedShort();

            var kerningArrayOffset = data.ReadUnsignedShort();

            data.Seek(tableStartOffset + leftClassTableOffset);

            var leftTableFirstGlyph = data.ReadUnsignedShort();
            var numberOfLeftGlyphs  = data.ReadUnsignedShort();

            var leftGlyphClassValues = new int[numberOfLeftGlyphs];

            for (var i = 0; i < numberOfLeftGlyphs; i++)
            {
                leftGlyphClassValues[i] = data.ReadUnsignedShort();
            }

            data.Seek(tableStartOffset + rightClassTableOffset);

            var rightTableFirstGlyph = data.ReadUnsignedShort();
            var numberOfRightGlyphs  = data.ReadUnsignedShort();

            var rightGlyphClassValues = new int[numberOfRightGlyphs];

            for (var i = 0; i < numberOfRightGlyphs; i++)
            {
                rightGlyphClassValues[i] = data.ReadUnsignedShort();
            }

            data.Seek(tableStartOffset + kerningArrayOffset);

            var pairs = new List <KernPair>(numberOfRightGlyphs * numberOfLeftGlyphs);

            // Data is a [left glyph count, right glyph count] array:
            for (int i = 0; i < numberOfLeftGlyphs; i++)
            {
                var leftClassValue = leftGlyphClassValues[i];
                for (int j = 0; j < numberOfRightGlyphs; j++)
                {
                    var rightClassValue = rightGlyphClassValues[j];

                    pairs.Add(new KernPair(leftClassValue, rightClassValue, data.ReadSignedShort()));
                }
            }

            return(new KerningSubTable(version, coverage, pairs));

#pragma warning restore 162
        }
Ejemplo n.º 6
0
        private static KerningSubTable ReadFormat0Table(int version, TrueTypeDataBytes data, KernCoverage coverage)
        {
            var numberOfPairs = data.ReadUnsignedShort();
            // ReSharper disable once UnusedVariable
            var searchRange = data.ReadUnsignedShort();
            // ReSharper disable once UnusedVariable
            var entrySelector = data.ReadUnsignedShort();
            // ReSharper disable once UnusedVariable
            var rangeShift = data.ReadUnsignedShort();

            var pairs = new KernPair[numberOfPairs];

            for (int i = 0; i < numberOfPairs; i++)
            {
                var leftGlyphIndex  = data.ReadUnsignedShort();
                var rightGlyphIndex = data.ReadUnsignedShort();

                var value = data.ReadSignedShort();

                pairs[i] = new KernPair(leftGlyphIndex, rightGlyphIndex, value);
            }

            return(new KerningSubTable(version, coverage, pairs));
        }