public FFNT(byte[] Data)
        {
            EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.BigEndian);
            Header = new FFNTHeader(er);
            FontInfo = new FINF(er);
            er.BaseStream.Position = FontInfo.TGLPOffset - 8;
            TextureGlyph = new TGLP(er);

            List<CWDH> tmp = new List<CWDH>();
            er.BaseStream.Position = FontInfo.CWDHOffset - 8;
            CWDH Last;
            do
            {
                Last = new CWDH(er);
                tmp.Add(Last);
                if (Last.NextCWDHOffset != 0) er.BaseStream.Position = Last.NextCWDHOffset - 8;
            }
            while (Last.NextCWDHOffset != 0);
            CharWidths = tmp.ToArray();

            List<CMAP> tmp2 = new List<CMAP>();
            er.BaseStream.Position = FontInfo.CMAPOffset - 8;
            CMAP Last2;
            do
            {
                Last2 = new CMAP(er);
                tmp2.Add(Last2);
                if (Last2.NextCMAPOffset != 0) er.BaseStream.Position = Last2.NextCMAPOffset - 8;
            }
            while (Last2.NextCMAPOffset != 0);
            CharMaps = tmp2.ToArray();
            er.Close();
        }
        public CFNT(byte[] Data)
        {
            EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.LittleEndian);

            try
            {
                Header   = new CFNTHeader(er);
                FontInfo = new FINF(er);
                er.BaseStream.Position = FontInfo.TGLPOffset - 8;
                TextureGlyph           = new TGLP(er);

                List <CWDH> tmp = new List <CWDH>();
                er.BaseStream.Position = FontInfo.CWDHOffset - 8;
                CWDH Last;
                do
                {
                    Last = new CWDH(er);
                    tmp.Add(Last);
                    if (Last.NextCWDHOffset != 0)
                    {
                        er.BaseStream.Position = Last.NextCWDHOffset - 8;
                    }
                }while (Last.NextCWDHOffset != 0);
                CharWidths = tmp.ToArray();

                List <CMAP> tmp2 = new List <CMAP>();
                er.BaseStream.Position = FontInfo.CMAPOffset - 8;
                CMAP Last2;
                do
                {
                    Last2 = new CMAP(er);
                    tmp2.Add(Last2);
                    if (Last2.NextCMAPOffset != 0)
                    {
                        er.BaseStream.Position = Last2.NextCMAPOffset - 8;
                    }
                }while (Last2.NextCMAPOffset != 0);
                CharMaps = tmp2.ToArray();
            }
            finally
            {
                er.Close();
            }
        }