/*
* 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.pfm;
import org.pentaho.reporting.libraries.fonts.LEByteAccessUtilities;
/**
* Creation-Date: 21.07.2007, 15:43:15
*
* @author Thomas Morgner
*/
public class PfmFontHeader {
public static final int LENGTH = 117;
// header information
private short version;
private long size;
private short type;
private short point;
private short vertRes;
private short horizRes;
private short ascent;
private short internalLeading;
private short externalLeading;
private boolean italic;
private boolean underline;
private boolean strikeout;
private short weight;
private byte charset;
private short pixelWidth;
private short pixelHeight;
private byte pitchAndFamily;
private short avgWidth;
private short maxWidth;
private short firstChar; // between 0 and 255
private short lastChar; // between 0 and 255
private short defaultChar; // between 0 and 255
private short breakChar; // between 0 and 255
private short widthBytes;
private int devicePtr;
private int facePtr;
public PfmFontHeader( final byte[] data ) {
version = LEByteAccessUtilities.readShort( data, 0 );
size = LEByteAccessUtilities.readULong( data, 2 );
// skip the copyright, we dont care about that ...
type = LEByteAccessUtilities.readShort( data, 66 );
point = LEByteAccessUtilities.readShort( data, 68 );
vertRes = LEByteAccessUtilities.readShort( data, 70 );
horizRes = LEByteAccessUtilities.readShort( data, 72 );
ascent = LEByteAccessUtilities.readShort( data, 74 );
internalLeading = LEByteAccessUtilities.readShort( data, 76 );
externalLeading = LEByteAccessUtilities.readShort( data, 78 );
italic = data[ 80 ] != 0;
underline = data[ 81 ] != 0;
strikeout = data[ 82 ] != 0;
weight = LEByteAccessUtilities.readShort( data, 83 );
charset = data[ 85 ];
pixelWidth = LEByteAccessUtilities.readShort( data, 86 );
pixelHeight = LEByteAccessUtilities.readShort( data, 88 );
pitchAndFamily = data[ 90 ];
avgWidth = LEByteAccessUtilities.readShort( data, 91 );
maxWidth = LEByteAccessUtilities.readShort( data, 93 );
firstChar = (short) ( 0xff & data[ 95 ] );
lastChar = (short) ( 0xff & data[ 96 ] );
defaultChar = (short) ( 0xff & data[ 97 ] );
breakChar = (short) ( 0xff & data[ 98 ] );
widthBytes = LEByteAccessUtilities.readShort( data, 99 );
devicePtr = LEByteAccessUtilities.readLong( data, 101 );
facePtr = LEByteAccessUtilities.readLong( data, 105 );
}
public int getDevicePtr() {
return devicePtr;
}
public int getFacePtr() {
return facePtr;
}
public short getVersion() {
return version;
}
public long getSize() {
return size;
}
public short getType() {
return type;
}
public short getPoint() {
return point;
}
public short getVertRes() {
return vertRes;
}
public short getHorizRes() {
return horizRes;
}
public short getAscent() {
return ascent;
}
public short getInternalLeading() {
return internalLeading;
}
public short getExternalLeading() {
return externalLeading;
}
public boolean isItalic() {
return italic;
}
public boolean isUnderline() {
return underline;
}
public boolean isStrikeout() {
return strikeout;
}
public short getWeight() {
return weight;
}
public byte getCharset() {
return charset;
}
public short getPixelWidth() {
return pixelWidth;
}
public short getPixelHeight() {
return pixelHeight;
}
public byte getPitchAndFamily() {
return pitchAndFamily;
}
public short getAvgWidth() {
return avgWidth;
}
public short getMaxWidth() {
return maxWidth;
}
public short getFirstChar() {
return firstChar;
}
public short getLastChar() {
return lastChar;
}
public short getDefaultChar() {
return defaultChar;
}
public short getBreakChar() {
return breakChar;
}
public short getWidthBytes() {
return widthBytes;
}
public String getEncoding() {
switch( (int) charset ) {
case 128:
return "SJIS";
case 129:
return "EUC_KR";
case 134:
return "GBK";
case 136:
return "Big5";
default:
// Assume the western-european codepage if no other page has been specified.
return "Cp1252";
}
}
}