Exemplo n.º 1
0
        public static HorizontalMetricsTable Load(FontReader reader)
        {
            // you should load all dependent tables prior to manipulating the reader
            HoizontalHeadTable  headTable    = reader.GetTable <HoizontalHeadTable>();
            MaximumProfileTable profileTable = reader.GetTable <MaximumProfileTable>();

            // move to start of table
            using (BinaryReader binaryReader = reader.GetReaderAtTablePosition(TableName))
            {
                return(Load(binaryReader, headTable.NumberOfHMetrics, profileTable.GlyphCount));
            }
        }
Exemplo n.º 2
0
        public static void WriteHoizontalHeadTable(this BinaryWriter writer, HoizontalHeadTable table)
        {
            // Type      | Name                 | Description
            // ----------|----------------------|----------------------------------------------------------------------------------------------------
            // uint16    | majorVersion         | Major version number of the horizontal header table — set to 1.
            // uint16    | minorVersion         | Minor version number of the horizontal header table — set to 0.
            // FWORD     | Ascender             | Typographic ascent (Distance from baseline of highest ascender).
            // FWORD     | Descender            | Typographic descent (Distance from baseline of lowest descender).
            // FWORD     | LineGap              | Typographic line gap. - Negative  LineGap values are treated as zero in Windows 3.1, and in Mac OS System 6 and System 7.
            // UFWORD    | advanceWidthMax      | Maximum advance width value in 'hmtx' table.
            // FWORD     | minLeftSideBearing   | Minimum left sidebearing value in 'hmtx' table.
            // FWORD     | minRightSideBearing  | Minimum right sidebearing value; calculated as Min(aw - lsb - (xMax - xMin)).
            // FWORD     | xMaxExtent           | Max(lsb + (xMax - xMin)).
            // int16     | caretSlopeRise       | Used to calculate the slope of the cursor (rise/run); 1 for vertical.
            // int16     | caretSlopeRun        | 0 for vertical.
            // int16     | caretOffset          | The amount by which a slanted highlight on a glyph needs to be shifted to produce the best appearance. Set to 0 for non-slanted fonts
            // int16     | (reserved)           | set to 0
            // int16     | (reserved)           | set to 0
            // int16     | (reserved)           | set to 0
            // int16     | (reserved)           | set to 0
            // int16     | metricDataFormat     | 0 for current format.
            // uint16    | numberOfHMetrics     | Number of hMetric entries in 'hmtx' table

            writer.WriteUInt16(1);
            writer.WriteUInt16(1);
            writer.WriteFWORD(table.Ascender);
            writer.WriteFWORD(table.Descender);
            writer.WriteFWORD(table.LineGap);
            writer.WriteUFWORD(table.AdvanceWidthMax);
            writer.WriteFWORD(table.MinLeftSideBearing);
            writer.WriteFWORD(table.MinRightSideBearing);
            writer.WriteFWORD(table.XMaxExtent);
            writer.WriteInt16(table.CaretSlopeRise);
            writer.WriteInt16(table.CaretSlopeRun);
            writer.WriteInt16(table.CaretOffset);
            writer.WriteInt16(0); // reserved
            writer.WriteInt16(0); // reserved
            writer.WriteInt16(0); // reserved
            writer.WriteInt16(0); // reserved
            writer.WriteInt16(0); // metricDataFormat should be 0
            writer.WriteUInt16(table.NumberOfHMetrics);
        }
Exemplo n.º 3
0
        public void LoadHoizontalHeadTable()
        {
            var writer = new BinaryWriter();

            writer.WriteHoizontalHeadTable(new HoizontalHeadTable(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11));

            HoizontalHeadTable tbl = HoizontalHeadTable.Load(writer.GetReader());

            Assert.Equal(1, tbl.Ascender);
            Assert.Equal(2, tbl.Descender);
            Assert.Equal(3, tbl.LineGap);
            Assert.Equal(4, tbl.AdvanceWidthMax);
            Assert.Equal(5, tbl.MinLeftSideBearing);
            Assert.Equal(6, tbl.MinRightSideBearing);
            Assert.Equal(7, tbl.XMaxExtent);
            Assert.Equal(8, tbl.CaretSlopeRise);
            Assert.Equal(9, tbl.CaretSlopeRun);
            Assert.Equal(10, tbl.CaretOffset);
            Assert.Equal(11, tbl.NumberOfHMetrics);
        }