/* * 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.afm; import java.io.IOException; /** * Creation-Date: 21.07.2007, 20:20:07 * * @author Thomas Morgner */ public class AfmHeader { private static final double[] EMPTY_DOUBLES = new double[ 0 ]; private static final String METRICS_SETS = "MetricsSets "; private static final String FONT_NAME = "FontName "; private static final String FULL_NAME = "FullName "; private static final String FAMILY_NAME = "FamilyName "; private static final String WEIGHT = "Weight "; private static final String FONT_BBOX = "FontBBox "; private static final String VERSION = "Version "; private static final String NOTICE = "Notice "; private static final String ENCODING_SCHEME = "EncodingScheme "; private static final String MAPPING_SCHEME = "MappingScheme "; private static final String ESC_CHAR = "EscChar "; private static final String CHARACTERSET = "CharacterSet "; private static final String CHARACTERS = "Characters "; private static final String ISBASEFONT = "IsBaseFont "; private static final String VVECTOR = "VVector "; private static final String ISFIXEDV = "IsFixedV "; private static final String CAPHEIGHT = "CapHeight "; private static final String XHEIGHT = "XHeight "; private static final String ASCENDER = "Ascender "; private static final String DESCENDER = "Descender "; private String fontName; private int metricsSets; private String familyName; private String fullName; private int weight; private double[] bbox; private String version; private String notice; private String encodingScheme; private int mappingScheme; private int escChar; private String characterSet; private int characters; private boolean baseFont; private double[] vvector; private boolean fixedV; private double capHeight; private double xHeight; private double ascender; private double descender; public AfmHeader() { bbox = new double[ 4 ]; } public void addData( final String line ) throws IOException { if ( line.startsWith( METRICS_SETS ) ) { metricsSets = AfmParseUtilities.parseInt( METRICS_SETS, line ); } else if ( line.startsWith( FONT_NAME ) ) { fontName = line.substring( FONT_NAME.length() ); } else if ( line.startsWith( FULL_NAME ) ) { fullName = line.substring( FULL_NAME.length() ); } else if ( line.startsWith( FAMILY_NAME ) ) { familyName = line.substring( FAMILY_NAME.length() ); } else if ( line.startsWith( WEIGHT ) ) { final String weightText = line.substring( WEIGHT.length() ); if ( "bold".equalsIgnoreCase( weightText ) ) { weight = 700; } else if ( "light".equalsIgnoreCase( weightText ) ) { weight = 200; } else { weight = 400; } } else if ( line.startsWith( FONT_BBOX ) ) { bbox = AfmParseUtilities.parseDoubleArray( line, 4 ); } else if ( line.startsWith( VERSION ) ) { version = line.substring( VERSION.length() ); } else if ( line.startsWith( NOTICE ) ) { notice = line.substring( NOTICE.length() ); } else if ( line.startsWith( ENCODING_SCHEME ) ) { encodingScheme = line.substring( ENCODING_SCHEME.length() ); } else if ( line.startsWith( MAPPING_SCHEME ) ) { mappingScheme = AfmParseUtilities.parseInt( MAPPING_SCHEME, line ); } else if ( line.startsWith( ESC_CHAR ) ) { escChar = AfmParseUtilities.parseInt( ESC_CHAR, line ); } else if ( line.startsWith( CHARACTERSET ) ) { characterSet = line.substring( CHARACTERSET.length() ); } else if ( line.startsWith( CHARACTERS ) ) { characters = AfmParseUtilities.parseInt( CHARACTERS, line ); } else if ( line.startsWith( ISBASEFONT ) ) { final String baseFontText = line.substring( ISBASEFONT.length() ); baseFont = "true".equalsIgnoreCase( baseFontText ); } else if ( line.startsWith( VVECTOR ) ) { vvector = AfmParseUtilities.parseDoubleArray( line, 2 ); } else if ( line.startsWith( ISFIXEDV ) ) { final String boolText = line.substring( ISFIXEDV.length() ); fixedV = "true".equalsIgnoreCase( boolText ); } else if ( line.startsWith( CAPHEIGHT ) ) { capHeight = AfmParseUtilities.parseDouble( CAPHEIGHT, line ); } else if ( line.startsWith( XHEIGHT ) ) { xHeight = AfmParseUtilities.parseDouble( XHEIGHT, line ); } else if ( line.startsWith( ASCENDER ) ) { ascender = AfmParseUtilities.parseDouble( ASCENDER, line ); } else if ( line.startsWith( DESCENDER ) ) { descender = AfmParseUtilities.parseDouble( DESCENDER, line ); } } public double getDescender() { return descender; } public double getAscender() { return ascender; } public double getxHeight() { return xHeight; } public double getCapHeight() { return capHeight; } public boolean isFixedV() { return fixedV; } public double[] getVvector() { if ( vvector == null ) { return EMPTY_DOUBLES; } return (double[]) vvector.clone(); } public boolean isBaseFont() { return baseFont; } public int getCharacters() { return characters; } public String getCharacterSet() { return characterSet; } public int getEscChar() { return escChar; } public int getMappingScheme() { return mappingScheme; } public String getEncodingScheme() { return encodingScheme; } public String getNotice() { return notice; } public String getVersion() { return version; } public double[] getBbox() { return (double[]) bbox.clone(); } public int getWeight() { return weight; } public String getFullName() { return fullName; } public String getFamilyName() { return familyName; } public int getMetricsSets() { return metricsSets; } public String getFontName() { return fontName; } }