コード例 #1
0
ファイル: CmapReader.cs プロジェクト: RainsSoft/NRasterizer
        internal static List<CharacterMap> From(TableEntry table)
        {
            var input = table.GetDataReader();

            var version = input.ReadUInt16(); // 0
            var tableCount = input.ReadUInt16();

            var entries = new List<CMapEntry>(tableCount);
            for (int i = 0; i < tableCount; i++)
            {
                var platformId = input.ReadUInt16();
                var encodingId = input.ReadUInt16();
                var offset = input.ReadUInt32();
                entries.Add(new CMapEntry(platformId, encodingId, offset));
            }

            var result = new List<CharacterMap>(tableCount);
            foreach (var entry in entries)
            {
                var subtable = table.GetDataReader();
                subtable.BaseStream.Seek(entry.Offset, SeekOrigin.Current);
                result.Add(ReadCharacterMap(entry, subtable));
            }

            return result;
        }
コード例 #2
0
ファイル: Glyf.cs プロジェクト: RainsSoft/NRasterizer
        internal static List<Glyph> From(TableEntry table, GlyphLocations locations)
        {
            var glyphCount = locations.GlyphCount;

            var glyphs = new List<Glyph>(glyphCount);
            for (int i = 0; i < glyphCount; i++)
            {
                var input = table.GetDataReader();
                input.BaseStream.Seek(locations.Offsets[i], SeekOrigin.Current);

                var length = locations.Offsets[i + 1] - locations.Offsets[i];
                if (length > 0)
                {
                    var contoursCount = input.ReadInt16();
                    var bounds = BoundsReader.ReadFrom(input);
                    if (contoursCount >= 0)
                    {
                        glyphs.Add(ReadSimpleGlyph(input, contoursCount, bounds));
                    }
                    else
                    {
                        glyphs.Add(ReadCompositeGlyph(input, -contoursCount, bounds));
                    }
                }
                else
                {
                    glyphs.Add(Glyph.Empty);
                }
            }
            return glyphs;
        }
コード例 #3
0
        public GlyphLocations(TableEntry table, int glyphCount, bool wideLocations)
        {
            var input = table.GetDataReader();
            _offsets = new uint[glyphCount + 1];

            if (wideLocations)
            {
                for (int i = 0; i < glyphCount + 1; i++)
                {
                    _offsets[i] = input.ReadUInt32();
                }
            }
            else
            {
                for (int i = 0; i < glyphCount + 1; i++)
                {
                    _offsets[i] = (uint)(input.ReadUInt16() * 2);
                }
            }
        }
コード例 #4
0
ファイル: GlyphLocations.cs プロジェクト: tocsoft/NRasterizer
        public GlyphLocations(TableEntry table, int glyphCount, bool wideLocations)
        {
            var input = table.GetDataReader();

            _offsets = new uint[glyphCount + 1];

            if (wideLocations)
            {
                for (int i = 0; i < glyphCount + 1; i++)
                {
                    _offsets[i] = input.ReadUInt32();
                }
            }
            else
            {
                for (int i = 0; i < glyphCount + 1; i++)
                {
                    _offsets[i] = (uint)(input.ReadUInt16() * 2);
                }
            }
        }
コード例 #5
0
        public static HorizontalMetrics From(TableEntry table, UInt16 count, UInt16 numGlyphs)
        {
            var input            = table.GetDataReader();
            var advanceWidths    = new List <ushort>(numGlyphs);
            var leftSideBearings = new List <short>(numGlyphs);

            for (int i = 0; i < count; i++)
            {
                advanceWidths.Add(input.ReadUInt16());
                leftSideBearings.Add(input.ReadInt16());
            }

            var advanceWidth = advanceWidths[advanceWidths.Count - 1];

            for (int i = 0; i < numGlyphs - count; i++)
            {
                advanceWidths.Add(advanceWidth);
                leftSideBearings.Add(input.ReadInt16());
            }

            return(new HorizontalMetrics(advanceWidths.ToArray(), leftSideBearings.ToArray()));
        }
コード例 #6
0
 public static HorizontalMetrics From(TableEntry table, UInt16 count, UInt16 numGlyphs)
 {
     return new HorizontalMetrics(table.GetDataReader(), count, numGlyphs);
 }
コード例 #7
0
 public static HorizontalHeader From(TableEntry table)
 {
     return new HorizontalHeader(table.GetDataReader());
 }
コード例 #8
0
ファイル: MetricsTable.cs プロジェクト: masums/NRasterizer
        public static MetricsTable From(TableEntry table)
        {
            var input = table.GetDataReader();

            return(new MetricsTable(input));
        }
コード例 #9
0
 internal static MaxProfile From(TableEntry table)
 {
     return(new MaxProfile(table.GetDataReader()));
 }
コード例 #10
0
 public static HorizontalHeader From(TableEntry table)
 {
     return(new HorizontalHeader(table.GetDataReader()));
 }
コード例 #11
0
ファイル: Head.cs プロジェクト: RainsSoft/NRasterizer
 internal static Head From(TableEntry table)
 {
     return new Head(table.GetDataReader());
 }
コード例 #12
0
ファイル: Head.cs プロジェクト: tocsoft/NRasterizer
 internal static Head From(TableEntry table)
 {
     return(new Head(table.GetDataReader()));
 }
コード例 #13
0
ファイル: MaxProfile.cs プロジェクト: RainsSoft/NRasterizer
 internal static MaxProfile From(TableEntry table)
 {
     return new MaxProfile(table.GetDataReader());
 }