Exemple #1
0
        public Glyph GetGlyphData(ushort glyphId)
        {
            if (GlyphCache.ContainsKey(glyphId))
            {
                return(GlyphCache[glyphId]);
            }

            var dataOffset = font.loca.Offsets[glyphId];

            var reader = new TrueTypeReader(Data);

            reader.Seek(dataOffset);

            var glyph = new Glyph()
            {
                NumberOfContours = reader.ReadShort(),
                XMin             = reader.ReadFWord(),
                YMin             = reader.ReadFWord(),
                XMax             = reader.ReadFWord(),
                YMax             = reader.ReadFWord()
            };

            reader.Dispose();

            GlyphCache[glyphId] = glyph;

            return(glyph);
        }
        public override void Process(TrueTypeFont font)
        {
            var reader = new TrueTypeReader(Data);

            var version  = reader.ReadUShort();
            var length   = reader.ReadUShort();
            var coverage = reader.ReadUShort();

            NumberOfPairs = reader.ReadUShort();
            SearchRange   = reader.ReadUShort();
            EntrySelector = reader.ReadUShort();
            RangeShift    = reader.ReadUShort();

            Kernpairs = new Dictionary <uint, short>(NumberOfPairs);

            for (var i = 0; i < NumberOfPairs; i++)
            {
                var glyphPair = reader.ReadULong();
                var kernUnits = reader.ReadFWord();

                Kernpairs[glyphPair] = kernUnits;
            }

            reader.Dispose();
        }
Exemple #3
0
        public override void Process(TrueTypeFont font)
        {
            var reader = new TrueTypeReader(Data);

            Version            = reader.ReadFixed();
            Revision           = reader.ReadFixed();
            ChecksumAdjustment = reader.ReadULong();
            Magic                 = reader.ReadULong();
            Flags                 = reader.ReadUShort();
            UnitsPerEm            = reader.ReadUShort();
            DateCreated           = reader.ReadLongDateTime();
            DateModified          = reader.ReadLongDateTime();
            XMin                  = reader.ReadFWord();
            YMin                  = reader.ReadFWord();
            XMax                  = reader.ReadFWord();
            YMax                  = reader.ReadFWord();
            MacStyle              = reader.ReadUShort();
            LowestRecommendedPPEM = reader.ReadUShort();
            FontDirectionHint     = reader.ReadShort();
            IndexToLocFormat      = reader.ReadShort();
            GlyphDataFormat       = reader.ReadShort();

            reader.Dispose();
        }
        public override void Process(TrueTypeFont font)
        {
            if (font.hhea == null)
            {
                throw new Exception("Table processing order error. Processing the hmtx table requires the hhea table.");
            }

            Metrics = new HorizontalMetric[font.hhea.NumberOfHorizontalMetrics];

            var reader = new TrueTypeReader(Data);

            for (var m = 0; m < Metrics.Length; m++)
            {
                Metrics[m] = new HorizontalMetric()
                {
                    AdvanceWidth    = reader.ReadUFWord(),
                    LeftSideBearing = reader.ReadFWord()
                };
            }

            reader.Dispose();
        }
        public override void Process(TrueTypeFont font)
        {
            var reader = new TrueTypeReader(Data);

            Version                   = reader.ReadFixed();
            Ascender                  = reader.ReadFWord();
            Descender                 = reader.ReadFWord();
            LineGap                   = reader.ReadFWord();
            AdvanceWidthMax           = reader.ReadUFWord();
            MinLeftSideBearing        = reader.ReadFWord();
            MinRightSideBearing       = reader.ReadFWord();
            XMaxExtent                = reader.ReadFWord();
            CaretSlopeRise            = reader.ReadShort();
            CaretSlopeRun             = reader.ReadShort();
            Reserved0                 = reader.ReadShort();
            Reserved1                 = reader.ReadShort();
            Reserved2                 = reader.ReadShort();
            Reserved3                 = reader.ReadShort();
            Reserved4                 = reader.ReadShort();
            MetricDataFormat          = reader.ReadShort();
            NumberOfHorizontalMetrics = reader.ReadUShort();

            reader.Dispose();
        }