예제 #1
0
        public static MaxpTable Read(BinaryReaderFont reader)
        {
            MaxpTable value = new MaxpTable {
                version   = reader.ReadFixed(),
                numGlyphs = reader.ReadUInt16()
            };

            if (value.version >= 0x10000)
            {
                value.maxPoints             = reader.ReadUInt16();
                value.maxContours           = reader.ReadUInt16();
                value.maxCompositePoints    = reader.ReadUInt16();
                value.maxCompositeContours  = reader.ReadUInt16();
                value.maxZones              = reader.ReadUInt16();
                value.maxTwilightPoints     = reader.ReadUInt16();
                value.maxStorage            = reader.ReadUInt16();
                value.maxFunctionDefs       = reader.ReadUInt16();
                value.maxInstructionDefs    = reader.ReadUInt16();
                value.maxStackElements      = reader.ReadUInt16();
                value.maxSizeOfInstructions = reader.ReadUInt16();
                value.maxComponentElements  = reader.ReadUInt16();
                value.maxComponentDepth     = reader.ReadUInt16();
            }
            return(value);
        }
예제 #2
0
        public static PostTable Read(BinaryReaderFont reader, TableRecord record)
        {
            PostTable value = new PostTable {
                version            = reader.ReadFixed(),
                italicAngle        = reader.ReadFixed(),
                underlinePosition  = reader.ReadFWORD(),
                underlineThickness = reader.ReadFWORD(),
                isFixedPitch       = reader.ReadUInt32(),
                minMemType42       = reader.ReadUInt32(),
                maxMemType42       = reader.ReadUInt32(),
                minMemType1        = reader.ReadUInt32(),
                maxMemType1        = reader.ReadUInt32(),
            };

            if (value.version == 0x20000)
            {
                value.numGlyphs      = reader.ReadUInt16();
                value.glyphNameIndex = reader.ReadUInt16Array(value.numGlyphs);
                int remain = (int)record.length - 34;
                remain -= value.numGlyphs * 2;
                List <string> names = new List <string>();
                while (remain > 0)
                {
                    byte nameLength = reader.ReadByte();
                    if (nameLength == 0)
                    {
                        break;
                    }
                    string name = reader.ReadString(nameLength);
                    remain -= nameLength + 1;
                    names.Add(name);
                }
                value.names = names.ToArray();
            }
            return(value);
        }
예제 #3
0
        public static VheaTable Read(BinaryReaderFont reader)
        {
            uint      version = reader.ReadFixed();
            VheaTable value   = null;

            if (version == 0x10000)
            {
                value         = VerticalHeader1.Read(reader);
                value.version = version;
            }
            else if (version == 0x18000)
            {
                value         = VerticalHeader1_1.Read(reader);
                value.version = version;
            }
            return(value);
        }
예제 #4
0
 public static HeadTable Read(BinaryReaderFont reader)
 {
     return(new HeadTable {
         majorVersion = reader.ReadUInt16(),
         minorVersion = reader.ReadUInt16(),
         fontRevision = reader.ReadFixed(),
         checkSumAdjustment = reader.ReadUInt32(),
         magicNumber = reader.ReadUInt32(),
         flags = (FontHeaderFlags)reader.ReadUInt16(),
         unitsPerEm = reader.ReadUInt16(),
         created = reader.ReadDateTime(),
         modified = reader.ReadDateTime(),
         xMin = reader.ReadInt16(),
         yMin = reader.ReadInt16(),
         xMax = reader.ReadInt16(),
         yMax = reader.ReadInt16(),
         macStyle = (FontHeaderMacStyle)reader.ReadUInt16(),
         lowestRecPPEM = reader.ReadUInt16(),
         fontDirectionHint = reader.ReadInt16(),
         indexToLocFormat = reader.ReadInt16(),
         glyphDataFormat = reader.ReadInt16()
     });
 }