org.apache.fontbox.afm.FontMetrics Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.fontbox.afm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.fontbox.util.BoundingBox;
/**
* This is the outermost AFM type. This can be created by the afmparser with a valid AFM document.
*
* @author Ben Litchfield
*/
public class FontMetrics
{
/**
* This is the version of the FontMetrics.
*/
private float afmVersion;
private int metricSets = 0;
private String fontName;
private String fullName;
private String familyName;
private String weight;
private BoundingBox fontBBox;
private String fontVersion;
private String notice;
private String encodingScheme;
private int mappingScheme;
private int escChar;
private String characterSet;
private int characters;
private boolean isBaseFont;
private float[] vVector;
private boolean isFixedV;
private float capHeight;
private float xHeight;
private float ascender;
private float descender;
private final List comments = new ArrayList();
private float underlinePosition;
private float underlineThickness;
private float italicAngle;
private float[] charWidth;
private boolean isFixedPitch;
private float standardHorizontalWidth;
private float standardVerticalWidth;
private List charMetrics = new ArrayList();
private Map charMetricsMap = new HashMap();
private List trackKern = new ArrayList();
private List composites = new ArrayList();
private List kernPairs = new ArrayList();
private List kernPairs0 = new ArrayList();
private List kernPairs1 = new ArrayList();
/**
* Constructor.
*/
public FontMetrics()
{
}
/**
* This will get the width of a character.
*
* @param name The character to get the width for.
*
* @return The width of the character.
*/
public float getCharacterWidth( String name )
{
float result = 0;
CharMetric metric = charMetricsMap.get( name );
if( metric != null )
{
result = metric.getWx();
}
return result;
}
/**
* This will get the width of a character.
*
* @param name The character to get the width for.
* @return The width of the character.
*/
public float getCharacterHeight( String name )
{
float result = 0;
CharMetric metric = charMetricsMap.get( name );
if( metric != null )
{
result = metric.getWy();
if( result == 0 )
{
result = metric.getBoundingBox().getHeight();
}
}
return result;
}
/**
* This will get the average width of a character.
*
* @return The width of the character.
*/
public float getAverageCharacterWidth()
{
float average = 0;
float totalWidths = 0;
float characterCount = 0;
for (CharMetric metric : charMetrics)
{
if( metric.getWx() > 0 )
{
totalWidths += metric.getWx();
characterCount += 1;
}
}
if( totalWidths > 0 )
{
average = totalWidths / characterCount;
}
return average;
}
/**
* This will add a new comment.
*
* @param comment The comment to add to this metric.
*/
public void addComment( String comment )
{
comments.add( comment );
}
/**
* This will get all comments.
*
* @return The list of all comments.
*/
public List getComments()
{
return Collections.unmodifiableList(comments);
}
/**
* This will get the version of the AFM document.
*
* @return The version of the document.
*/
public float getAFMVersion()
{
return afmVersion;
}
/**
* This will get the metricSets attribute.
*
* @return The value of the metric sets.
*/
public int getMetricSets()
{
return metricSets;
}
/**
* This will set the version of the AFM document.
*
* @param afmVersionValue The version of the document.
*/
public void setAFMVersion( float afmVersionValue )
{
afmVersion = afmVersionValue;
}
/**
* This will set the metricSets attribute. This value must be 0,1, or 2.
*
* @param metricSetsValue The new metric sets attribute.
* @throws IllegalArgumentException If the metricSets attribute is not 0,1, or 2.
*/
public void setMetricSets( int metricSetsValue )
{
if( metricSetsValue < 0 || metricSetsValue > 2 )
{
throw new IllegalArgumentException("The metricSets attribute must be in the "
+ "set {0,1,2} and not '" + metricSetsValue + "'");
}
metricSets = metricSetsValue;
}
/**
* Getter for property fontName.
*
* @return Value of property fontName.
*/
public String getFontName()
{
return fontName;
}
/**
* Setter for property fontName.
*
* @param name New value of property fontName.
*/
public void setFontName(String name)
{
fontName = name;
}
/**
* Getter for property fullName.
*
* @return Value of property fullName.
*/
public String getFullName()
{
return fullName;
}
/**
* Setter for property fullName.
*
* @param fullNameValue New value of property fullName.
*/
public void setFullName(String fullNameValue)
{
fullName = fullNameValue;
}
/**
* Getter for property familyName.
*
* @return Value of property familyName.
*/
public String getFamilyName()
{
return familyName;
}
/**
* Setter for property familyName.
*
* @param familyNameValue New value of property familyName.
*/
public void setFamilyName(String familyNameValue)
{
familyName = familyNameValue;
}
/**
* Getter for property weight.
*
* @return Value of property weight.
*/
public String getWeight()
{
return weight;
}
/**
* Setter for property weight.
*
* @param weightValue New value of property weight.
*/
public void setWeight(String weightValue)
{
weight = weightValue;
}
/**
* Getter for property fontBBox.
*
* @return Value of property fontBBox.
*/
public BoundingBox getFontBBox()
{
return fontBBox;
}
/**
* Setter for property fontBBox.
*
* @param bBox New value of property fontBBox.
*/
public void setFontBBox(BoundingBox bBox)
{
this.fontBBox = bBox;
}
/**
* Getter for property notice.
*
* @return Value of property notice.
*/
public String getNotice()
{
return notice;
}
/**
* Setter for property notice.
*
* @param noticeValue New value of property notice.
*/
public void setNotice(String noticeValue)
{
notice = noticeValue;
}
/**
* Getter for property encodingScheme.
*
* @return Value of property encodingScheme.
*/
public String getEncodingScheme()
{
return encodingScheme;
}
/**
* Setter for property encodingScheme.
*
* @param encodingSchemeValue New value of property encodingScheme.
*/
public void setEncodingScheme(String encodingSchemeValue)
{
encodingScheme = encodingSchemeValue;
}
/**
* Getter for property mappingScheme.
*
* @return Value of property mappingScheme.
*/
public int getMappingScheme()
{
return mappingScheme;
}
/**
* Setter for property mappingScheme.
*
* @param mappingSchemeValue New value of property mappingScheme.
*/
public void setMappingScheme(int mappingSchemeValue)
{
mappingScheme = mappingSchemeValue;
}
/**
* Getter for property escChar.
*
* @return Value of property escChar.
*/
public int getEscChar()
{
return escChar;
}
/**
* Setter for property escChar.
*
* @param escCharValue New value of property escChar.
*/
public void setEscChar(int escCharValue)
{
escChar = escCharValue;
}
/**
* Getter for property characterSet.
*
* @return Value of property characterSet.
*/
public String getCharacterSet()
{
return characterSet;
}
/**
* Setter for property characterSet.
*
* @param characterSetValue New value of property characterSet.
*/
public void setCharacterSet(String characterSetValue)
{
characterSet = characterSetValue;
}
/**
* Getter for property characters.
*
* @return Value of property characters.
*/
public int getCharacters()
{
return characters;
}
/**
* Setter for property characters.
*
* @param charactersValue New value of property characters.
*/
public void setCharacters(int charactersValue)
{
characters = charactersValue;
}
/**
* Getter for property isBaseFont.
*
* @return Value of property isBaseFont.
*/
public boolean isBaseFont()
{
return isBaseFont;
}
/**
* Setter for property isBaseFont.
*
* @param isBaseFontValue New value of property isBaseFont.
*/
public void setIsBaseFont(boolean isBaseFontValue)
{
isBaseFont = isBaseFontValue;
}
/**
* Getter for property vVector.
*
* @return Value of property vVector.
*/
public float[] getVVector()
{
return this.vVector;
}
/**
* Setter for property vVector.
*
* @param vVectorValue New value of property vVector.
*/
public void setVVector(float[] vVectorValue)
{
vVector = vVectorValue;
}
/**
* Getter for property isFixedV.
*
* @return Value of property isFixedV.
*/
public boolean isFixedV()
{
return isFixedV;
}
/**
* Setter for property isFixedV.
*
* @param isFixedVValue New value of property isFixedV.
*/
public void setIsFixedV(boolean isFixedVValue)
{
isFixedV = isFixedVValue;
}
/**
* Getter for property capHeight.
*
* @return Value of property capHeight.
*/
public float getCapHeight()
{
return capHeight;
}
/**
* Setter for property capHeight.
*
* @param capHeightValue New value of property capHeight.
*/
public void setCapHeight(float capHeightValue)
{
capHeight = capHeightValue;
}
/**
* Getter for property xHeight.
*
* @return Value of property xHeight.
*/
public float getXHeight()
{
return xHeight;
}
/**
* Setter for property xHeight.
*
* @param xHeightValue New value of property xHeight.
*/
public void setXHeight( float xHeightValue )
{
xHeight = xHeightValue;
}
/**
* Getter for property ascender.
*
* @return Value of property ascender.
*/
public float getAscender()
{
return ascender;
}
/**
* Setter for property ascender.
*
* @param ascenderValue New value of property ascender.
*/
public void setAscender( float ascenderValue )
{
ascender = ascenderValue;
}
/**
* Getter for property descender.
*
* @return Value of property descender.
*/
public float getDescender()
{
return descender;
}
/**
* Setter for property descender.
*
* @param descenderValue New value of property descender.
*/
public void setDescender( float descenderValue )
{
descender = descenderValue;
}
/**
* Getter for property fontVersion.
*
* @return Value of property fontVersion.
*/
public String getFontVersion()
{
return fontVersion;
}
/**
* Setter for property fontVersion.
*
* @param fontVersionValue New value of property fontVersion.
*/
public void setFontVersion(String fontVersionValue)
{
fontVersion = fontVersionValue;
}
/**
* Getter for property underlinePosition.
*
* @return Value of property underlinePosition.
*/
public float getUnderlinePosition()
{
return underlinePosition;
}
/**
* Setter for property underlinePosition.
*
* @param underlinePositionValue New value of property underlinePosition.
*/
public void setUnderlinePosition(float underlinePositionValue)
{
underlinePosition = underlinePositionValue;
}
/**
* Getter for property underlineThickness.
*
* @return Value of property underlineThickness.
*/
public float getUnderlineThickness()
{
return underlineThickness;
}
/**
* Setter for property underlineThickness.
*
* @param underlineThicknessValue New value of property underlineThickness.
*/
public void setUnderlineThickness(float underlineThicknessValue)
{
underlineThickness = underlineThicknessValue;
}
/**
* Getter for property italicAngle.
*
* @return Value of property italicAngle.
*/
public float getItalicAngle()
{
return italicAngle;
}
/**
* Setter for property italicAngle.
*
* @param italicAngleValue New value of property italicAngle.
*/
public void setItalicAngle(float italicAngleValue)
{
italicAngle = italicAngleValue;
}
/**
* Getter for property charWidth.
*
* @return Value of property charWidth.
*/
public float[] getCharWidth()
{
return this.charWidth;
}
/**
* Setter for property charWidth.
*
* @param charWidthValue New value of property charWidth.
*/
public void setCharWidth(float[] charWidthValue)
{
charWidth = charWidthValue;
}
/**
* Getter for property isFixedPitch.
*
* @return Value of property isFixedPitch.
*/
public boolean isFixedPitch()
{
return isFixedPitch;
}
/**
* Setter for property isFixedPitch.
*
* @param isFixedPitchValue New value of property isFixedPitch.
*/
public void setFixedPitch(boolean isFixedPitchValue)
{
isFixedPitch = isFixedPitchValue;
}
/** Getter for property charMetrics.
* @return Value of property charMetrics.
*/
public List getCharMetrics()
{
return Collections.unmodifiableList(charMetrics);
}
/** Setter for property charMetrics.
* @param charMetricsValue New value of property charMetrics.
*/
public void setCharMetrics(List charMetricsValue)
{
charMetrics = charMetricsValue;
charMetricsMap = new HashMap(charMetrics.size());
for (CharMetric metric : charMetricsValue)
{
charMetricsMap.put( metric.getName(), metric );
}
}
/**
* This will add another character metric.
*
* @param metric The character metric to add.
*/
public void addCharMetric( CharMetric metric )
{
charMetrics.add( metric );
charMetricsMap.put( metric.getName(), metric );
}
/** Getter for property trackKern.
* @return Value of property trackKern.
*/
public List getTrackKern()
{
return Collections.unmodifiableList(trackKern);
}
/** Setter for property trackKern.
* @param trackKernValue New value of property trackKern.
*/
public void setTrackKern(List trackKernValue)
{
trackKern = trackKernValue;
}
/**
* This will add another track kern.
*
* @param kern The track kerning data.
*/
public void addTrackKern( TrackKern kern )
{
trackKern.add( kern );
}
/** Getter for property composites.
* @return Value of property composites.
*/
public List getComposites()
{
return Collections.unmodifiableList(composites);
}
/** Setter for property composites.
* @param compositesList New value of property composites.
*/
public void setComposites(List compositesList)
{
composites = compositesList;
}
/**
* This will add a single composite part to the picture.
*
* @param composite The composite info to add.
*/
public void addComposite( Composite composite )
{
composites.add( composite );
}
/** Getter for property kernPairs.
* @return Value of property kernPairs.
*/
public List getKernPairs()
{
return Collections.unmodifiableList(kernPairs);
}
/**
* This will add a kern pair.
*
* @param kernPair The kern pair to add.
*/
public void addKernPair( KernPair kernPair )
{
kernPairs.add( kernPair );
}
/** Setter for property kernPairs.
* @param kernPairsList New value of property kernPairs.
*/
public void setKernPairs(List kernPairsList)
{
kernPairs = kernPairsList;
}
/** Getter for property kernPairs0.
* @return Value of property kernPairs0.
*/
public List getKernPairs0()
{
return Collections.unmodifiableList(kernPairs0);
}
/**
* This will add a kern pair.
*
* @param kernPair The kern pair to add.
*/
public void addKernPair0( KernPair kernPair )
{
kernPairs0.add( kernPair );
}
/** Setter for property kernPairs0.
* @param kernPairs0List New value of property kernPairs0.
*/
public void setKernPairs0(List kernPairs0List)
{
kernPairs0 = kernPairs0List;
}
/** Getter for property kernPairs1.
* @return Value of property kernPairs1.
*/
public List getKernPairs1()
{
return Collections.unmodifiableList(kernPairs1);
}
/**
* This will add a kern pair.
*
* @param kernPair The kern pair to add.
*/
public void addKernPair1( KernPair kernPair )
{
kernPairs1.add( kernPair );
}
/** Setter for property kernPairs1.
* @param kernPairs1List New value of property kernPairs1.
*/
public void setKernPairs1(List kernPairs1List)
{
kernPairs1 = kernPairs1List;
}
/** Getter for property standardHorizontalWidth.
* @return Value of property standardHorizontalWidth.
*/
public float getStandardHorizontalWidth()
{
return standardHorizontalWidth;
}
/** Setter for property standardHorizontalWidth.
* @param standardHorizontalWidthValue New value of property standardHorizontalWidth.
*/
public void setStandardHorizontalWidth(float standardHorizontalWidthValue)
{
standardHorizontalWidth = standardHorizontalWidthValue;
}
/** Getter for property standardVerticalWidth.
* @return Value of property standardVerticalWidth.
*/
public float getStandardVerticalWidth()
{
return standardVerticalWidth;
}
/** Setter for property standardVerticalWidth.
* @param standardVerticalWidthValue New value of property standardVerticalWidth.
*/
public void setStandardVerticalWidth(float standardVerticalWidthValue)
{
standardVerticalWidth = standardVerticalWidthValue;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy