@Override
	public void init()
	{
		super.init();
		dyHeight = ByteTools.readShort( getByteAt( 0 ), getByteAt( 1 ) );// Height
		// in
		// 1/20
		// point
		grbit = ByteTools.readShort( getByteAt( 2 ), getByteAt( 3 ) );// attributes
		icv = ByteTools.readShort( getByteAt( 4 ), getByteAt( 5 ) );// index
		// to
		// color
		// palette
		bls = ByteTools.readShort( getByteAt( 6 ), getByteAt( 7 ) );// bold
		// style
		// (weight)
		// 100-1000
		// default
		// is
		// 190h
		// norm
		// 2bch
		// bold
		sss = ByteTools.readShort( getByteAt( 8 ), getByteAt( 9 ) );// super/sub
		// (0 =
		// none,
		// 1 =
		// super,
		// 2 =
		// sub)
		uls = getByteAt( 10 );// Underline Style (0 = none, 1 = single, 2 =
		// double, 21h = single acctg, 22h = dble
		// acctg)
		bFamily = getByteAt( 11 );// Font Family (WinAPI LOGFONT struct)
		/**
		 * lfCharSet
		 *
		 * The character set. The following values are predefined.
		 *
		 * ANSI_CHARSET BALTIC_CHARSET xx CHINESEBIG5_CHARSET xx DEFAULT_CHARSET
		 * xx EASTEUROPE_CHARSET GB2312_CHARSET xx GREEK_CHARSET xx
		 * HANGUL_CHARSET xx MAC_CHARSET xx OEM_CHARSET xx RUSSIAN_CHARSET xx
		 * SHIFTJIS_CHARSET xx SYMBOL_CHARSET xx TURKISH_CHARSET xx
		 * VIETNAMESE_CHARSET
		 *
		 *
		 * Korean language edition of Windows: JOHAB_CHARSET
		 *
		 * Middle East language edition of Windows: ARABIC_CHARSET
		 * HEBREW_CHARSET
		 *
		 * Thai language edition of Windows: THAI_CHARSET
		 *
		 * The OEM_CHARSET value specifies a character set that is
		 * operating-system dependent.
		 *
		 * DEFAULT_CHARSET is set to a value based on the current system locale.
		 * For example, when the system locale is English (United States), it is
		 * set as ANSI_CHARSET.
		 *
		 * Fonts with other character sets may exist in the operating system. If
		 * an application uses a font with an unknown character set, it should
		 * not attempt to translate or interpret strings that are rendered with
		 * that font.
		 *
		 * This parameter is important in the font mapping process. To ensure
		 * consistent results, specify a specific character set. If you specify
		 * a typeface name in the lfFaceName member, make sure that the
		 * lfCharSet value matches the character set of the typeface specified
		 * in lfFaceName.
		 */
		bCharSet = (short) ByteTools.readUnsignedShort( getByteAt( 12 ), (byte) 0 );// Characterset (WinAPI LOGFONT struct)

		// this.getData()[13]= 0;// set byte to 0 for comparisons
		// get the Name
		int pos = 14;
		cch = getByteAt( pos++ );
		int buflen = cch * 2;
		pos++;
		boolean compressed = false;

		if( (buflen + pos) >= getLength() )
		{
			buflen = getLength() - pos;
			compressed = true;
		}

		if( buflen < 0 )
		{
			log.warn( "could not parse font: length reported as " + buflen );
			return;
		}

		byte[] namebytes = getBytesAt( pos, buflen );
		if( !compressed )
		{
			pos = 0;
			try
			{
				fontName = new String( namebytes, XLSConstants.UNICODEENCODING );
			}
			catch( UnsupportedEncodingException e )
			{
				log.error( "Font name decoding failed.", e );
			}
		}
		else
		{ // compressed
			fontName = new String( namebytes );
		}
	}