/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2006 - 2013 Pentaho Corporation and Contributors. All rights reserved.
*/
package org.pentaho.reporting.libraries.fonts.truetype;
import org.pentaho.reporting.libraries.fonts.ByteAccessUtilities;
import java.io.IOException;
/**
* Creation-Date: 06.11.2005, 20:24:42
*
* @author Thomas Morgner
*/
public class FontHeaderTable implements FontTable {
public static final long TABLE_ID =
( 'h' << 24 | 'e' << 16 | 'a' << 8 | 'd' );
private static final long MAGIC = 0x5F0F3CF5;
public static final int STYLE_BOLD = 0x01;
public static final int STYLE_ITALIC = 0x02;
public static final int STYLE_UNDERLINE = 0x04;
public static final int STYLE_OUTLINE = 0x08;
public static final int STYLE_SHADOW = 0x10;
public static final int STYLE_CONDENSED = 0x20;
public static final int STYLE_EXTENDED = 0x40;
public static final int FEATURE_BASELINE = 0x0001;
public static final int FEATURE_LSB = 0x0002;
public static final int FEATURE_EXPLICIT_POINTSIZE = 0x0004;
public static final int FEATURE_INTEGER_SCALING = 0x0008;
public static final int FEATURE_NONLINEAR_WIDTH = 0x0010;
public static final int FEATURE_VERTICAL = 0x0020;
public static final int FEATURE_LAYOUT_REQUIRED = 0x0080;
public static final int FEATURE_METAMORPH = 0x0100;
public static final int FEATURE_RTL_GLYPHS = 0x0200;
public static final int FEATURE_INDIC_REARRANGE = 0x0400;
public static final int FEATURE_COMPRESSED = 0x0800;
public static final int FEATURE_CLEARTYPE = 0x1000;
private long version;
private long revision;
private long checkSumAdjustment;
private int flags;
private int unitsPerEm;
private long createdDate;
private long modifiedDate;
private int xMin;
private int yMin;
private int xMax;
private int yMax;
private int macStyle;
private int lowestRecPPEM;
private short fontDirectionHint;
private short indexToLocFormat;
private short glyphDataFormat;
public FontHeaderTable( final byte[] data ) throws IOException {
version = ByteAccessUtilities.readULong( data, 0 );
revision = ByteAccessUtilities.readULong( data, 4 );
checkSumAdjustment = ByteAccessUtilities.readULong( data, 8 );
if ( ByteAccessUtilities.readULong( data, 12 ) != MAGIC ) {
throw new IOException( "MagicNumber missing" );
}
flags = ByteAccessUtilities.readUShort( data, 16 );
unitsPerEm = ByteAccessUtilities.readUShort( data, 18 );
createdDate = ByteAccessUtilities.readLongDateTime( data, 20 );
modifiedDate = ByteAccessUtilities.readLongDateTime( data, 28 );
xMin = ByteAccessUtilities.readShort( data, 36 );
yMin = ByteAccessUtilities.readShort( data, 38 );
xMax = ByteAccessUtilities.readShort( data, 40 );
yMax = ByteAccessUtilities.readShort( data, 42 );
macStyle = ByteAccessUtilities.readUShort( data, 44 );
lowestRecPPEM = ByteAccessUtilities.readUShort( data, 46 );
fontDirectionHint = ByteAccessUtilities.readShort( data, 48 );
indexToLocFormat = ByteAccessUtilities.readShort( data, 50 );
glyphDataFormat = ByteAccessUtilities.readShort( data, 52 );
}
public long getVersion() {
return version;
}
public long getRevision() {
return revision;
}
public long getCheckSumAdjustment() {
return checkSumAdjustment;
}
public int getFlags() {
return flags;
}
public int getUnitsPerEm() {
return unitsPerEm;
}
public long getCreatedDate() {
return createdDate;
}
public long getModifiedDate() {
return modifiedDate;
}
public int getxMin() {
return xMin;
}
public int getyMin() {
return yMin;
}
public int getxMax() {
return xMax;
}
public int getyMax() {
return yMax;
}
public int getMacStyle() {
return macStyle;
}
public int getLowestRecPPEM() {
return lowestRecPPEM;
}
public short getFontDirectionHint() {
return fontDirectionHint;
}
public short getIndexToLocFormat() {
return indexToLocFormat;
}
public short getGlyphDataFormat() {
return glyphDataFormat;
}
public boolean isBold() {
return ( macStyle & STYLE_BOLD ) == STYLE_BOLD;
}
public boolean isItalic() {
return ( macStyle & STYLE_ITALIC ) == STYLE_ITALIC;
}
public long getName() {
return TABLE_ID;
}
}