Ejemplo n.º 1
0
        public static WoffHeader ReadHeader(WoffVersionReader version, BigEndianReader reader)
        {
            uint   flavour       = reader.ReadUInt32();
            uint   length        = reader.ReadUInt32();
            ushort numTables     = reader.ReadUInt16();
            var    reserved      = reader.ReadUInt16();
            var    totalFontSize = reader.ReadUInt32();
            var    major         = reader.ReadUInt16();
            var    minor         = reader.ReadUInt16();

            WoffHeader header = new WoffHeader(version, numTables);


            header.Flavour          = flavour;
            header.Length           = length;
            header.TotalFontSize    = totalFontSize;
            header.WoffInnerVersion = new Version(major, minor);

            header.MetaDataOffset         = reader.ReadUInt32();
            header.MetaDataLength         = reader.ReadUInt32();
            header.MetaDataOriginalLength = reader.ReadUInt32();

            header.PrivateDataOffset = reader.ReadUInt32();
            header.PrivateDataLength = reader.ReadUInt32();

            return(header);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets a version reader for a typeface from the reader at the current position
        /// </summary>
        /// <param name="reader">The bigendian reader to read the version from</param>
        /// <param name="vers">Set to the version reader if known</param>
        /// <returns>True if the version is known, otherwise false</returns>
        /// <remarks>This will check the current reader for a known version and move the position on 4 bytes</remarks>
        public static bool TryGetVersion(BigEndianReader reader, out TypefaceVersionReader vers, bool thrownOnUnsupported = false)
        {
            vers = null;
            byte[] data  = reader.Read(4);
            char[] chars = ConvertToChars(data, 4);

            if (chars[0] == 'O' && chars[1] == 'T' && chars[2] == 'T' && chars[3] == 'O')        //OTTO
            {
                vers = new OTTO.CCFOpenTypeVersionReader(new string(chars), data);
            }
            else if (chars[0] == 't' && chars[1] == 'r' && chars[2] == 'u' && chars[3] == 'e')   //true
            {
                vers = new TTF.TrueTypeVersionReader(new string(chars), data);
            }

            else if (chars[0] == 't' && chars[1] == 'y' && chars[2] == 'p' && chars[3] == '1')   //typ1
            {
                vers = new TTF.TrueTypeVersionReader(new string(chars), data);
            }

            else if (chars[0] == 't' && chars[1] == 't' && chars[2] == 'c' && chars[3] == 'f')   //ttcf
            {
                vers = new TTC.TTCollectionVersionReader(new string(chars), data);
            }

            else if (chars[0] == 'w' && chars[1] == 'O' && chars[2] == 'F' && chars[3] == 'F')   //wOFF
            {
                vers = new Woff.WoffVersionReader(new string(chars), data);
            }

            else if (chars[0] == 'w' && chars[1] == 'O' && chars[2] == 'F' && chars[3] == '2') //wOF2
            {
                vers = null;                                                                   // new Woff2.Woff2VersionReader(new string(chars), data);
            }
            //throw new NotSupportedException("The Woff2 format is not currently supported.");
            else                                                                                 //1.0
            {
                BigEnd16 wrd1 = new BigEnd16(data, 0);
                BigEnd16 wrd2 = new BigEnd16(data, 2);

                if (((int)wrd1.UnsignedValue) == 1 && ((int)wrd2.UnsignedValue) == 0)
                {
                    vers = new OTTO.OpenType1VersionReader(wrd1.UnsignedValue, wrd2.UnsignedValue, data);
                }
            }

            return(vers != null);
        }
Ejemplo n.º 3
0
 public WoffHeader(WoffVersionReader version, int numTables)
     : base(version, numTables)
 {
 }