From 50b87080cb7797492de81bfa2b4f3f98bc5db1d3 Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Wed, 8 Jan 2003 13:56:37 +0000 Subject: [PATCH] Adjustments for the font refactoring Removal/commenting out of some dead code Lots of Javadocs Fixed Checkstyle errors git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195821 13f79535-47bb-0310-9956-ffa450edef68 --- src/org/apache/fop/layout/FontDescriptor.java | 34 ----- src/org/apache/fop/layout/FontInfo.java | 118 ++++++++++++---- src/org/apache/fop/layout/FontMetric.java | 35 ----- src/org/apache/fop/layout/FontState.java | 131 ++++++++++++------ 4 files changed, 181 insertions(+), 137 deletions(-) delete mode 100644 src/org/apache/fop/layout/FontDescriptor.java delete mode 100644 src/org/apache/fop/layout/FontMetric.java diff --git a/src/org/apache/fop/layout/FontDescriptor.java b/src/org/apache/fop/layout/FontDescriptor.java deleted file mode 100644 index 5e05703f0..000000000 --- a/src/org/apache/fop/layout/FontDescriptor.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * $Id$ - * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. - * For details on use and redistribution please refer to the - * LICENSE file included with these sources. - */ - -package org.apache.fop.layout; - -import java.util.HashMap; - -public interface FontDescriptor { - - // Required - public int getAscender(); // Ascent in pdf spec - public int getCapHeight(); - public int getDescender(); // Descent in pdf spec - public int getFlags(); - public int[] getFontBBox(); - public String fontName(); // should be getFontName(). not? - public int getItalicAngle(); - public int getStemV(); - - public boolean hasKerningInfo(); - public HashMap getKerningInfo(); - public boolean isEmbeddable(); - public byte getSubType(); - public org.apache.fop.pdf.PDFStream getFontFile(int objNum); - // Optional - but needed to calculate font-size-adjust... - // public int getXHeight(); - -} - - diff --git a/src/org/apache/fop/layout/FontInfo.java b/src/org/apache/fop/layout/FontInfo.java index 93971d6fc..92872d4a9 100644 --- a/src/org/apache/fop/layout/FontInfo.java +++ b/src/org/apache/fop/layout/FontInfo.java @@ -1,41 +1,70 @@ /* * $Id$ - * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. + * Copyright (C) 2001-2003 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.layout; -import java.util.HashMap; +// Java +import java.util.Map; + +// FOP +import org.apache.fop.fonts.FontMetrics; /** - * The fontinfo for the layout and rendering of a fo document. + * The FontInfo for the layout and rendering of a fo document. * This stores the list of available fonts that are setup by * the renderer. The font name can be retrieved for the * family style and weight. + *
* Currently font supported font-variant small-caps is not * implemented. */ public class FontInfo { + + /** Default fallback key */ public static final String DEFAULT_FONT = "any,normal,400"; + /** Normal font weight */ public static final int NORMAL = 400; + /** Bold font weight */ public static final int BOLD = 700; - private HashMap usedFonts; - private HashMap triplets; // look up a font-triplet to find a font-name - private HashMap fonts; // look up a font-name to get a font (that implements FontMetric at least) + /** Map containing fonts that have been used */ + private Map usedFonts; + + /** look up a font-triplet to find a font-name */ + private Map triplets; + + /** look up a font-name to get a font (that implements FontMetrics at least) */ + private Map fonts; + /** + * Main constructor + */ public FontInfo() { - this.triplets = new HashMap(); - this.fonts = new HashMap(); - this.usedFonts = new HashMap(); + this.triplets = new java.util.HashMap(); + this.fonts = new java.util.HashMap(); + this.usedFonts = new java.util.HashMap(); } + /** + * Checks if the font setup is valid (At least the ultimate fallback font + * must be registered.) + * @return True if valid + */ public boolean isSetupValid() { return triplets.containsKey(DEFAULT_FONT); } + /** + * Adds a new font triplet. + * @param name internal key + * @param family font family name + * @param style font style (normal, italic, oblique...) + * @param weight font weight + */ public void addFontProperties(String name, String family, String style, int weight) { /* @@ -47,7 +76,12 @@ public class FontInfo { this.triplets.put(key, name); } - public void addMetrics(String name, FontMetric metrics) { + /** + * Adds font metrics for a specific font. + * @param name internal key + * @param metrics metrics to register + */ + public void addMetrics(String name, FontMetrics metrics) { // add the given metrics as a font with the given name this.fonts.put(name, metrics); @@ -55,10 +89,15 @@ public class FontInfo { /** * Lookup a font. - * Locate the font name for a given familyi, style and weight. + *
+ * Locate the font name for a given family, style and weight. * The font name can then be used as a key as it is unique for * the associated document. * This also adds the font to the list of used fonts. + * @param family font family + * @param style font style + * @param weight font weight + * @return internal key */ public String fontLookup(String family, String style, int weight) { @@ -66,18 +105,18 @@ public class FontInfo { // first try given parameters key = createFontKey(family, style, weight); String f = (String)triplets.get(key); - if(f == null) { + if (f == null) { // then adjust weight, favouring normal or bold f = findAdjustWeight(family, style, weight); // then try any family with orig weight - if(f == null) { + if (f == null) { key = createFontKey("any", style, weight); f = (String)triplets.get(key); } // then try any family with adjusted weight - if(f == null) { + if (f == null) { f = findAdjustWeight(family, style, weight); } @@ -93,35 +132,39 @@ public class FontInfo { /** * Find a font with a given family and style by trying * different font weights according to the spec. + * @param family font family + * @param style font style + * @param weight font weight + * @return internal key */ public String findAdjustWeight(String family, String style, int weight) { String key; String f = null; int newWeight = weight; - if(newWeight < 400) { - while(f == null && newWeight > 0) { + if (newWeight < 400) { + while (f == null && newWeight > 0) { newWeight -= 100; key = createFontKey(family, style, newWeight); f = (String)triplets.get(key); } - } else if(newWeight == 500) { + } else if (newWeight == 500) { key = createFontKey(family, style, 400); f = (String)triplets.get(key); - } else if(newWeight > 500) { - while(f == null && newWeight < 1000) { + } else if (newWeight > 500) { + while (f == null && newWeight < 1000) { newWeight += 100; key = createFontKey(family, style, newWeight); f = (String)triplets.get(key); } newWeight = weight; - while(f == null && newWeight > 400) { + while (f == null && newWeight > 400) { newWeight -= 100; key = createFontKey(family, style, newWeight); f = (String)triplets.get(key); } } - if(f == null) { + if (f == null) { key = createFontKey(family, style, 400); f = (String)triplets.get(key); } @@ -129,35 +172,56 @@ public class FontInfo { return f; } + /** + * Determines if a particular font is available. + * @param family font family + * @param style font style + * @param weight font weight + * @return True if available + */ public boolean hasFont(String family, String style, int weight) { String key = createFontKey(family, style, weight); return this.triplets.containsKey(key); } /** - * Creates a key from the given strings + * Creates a key from the given strings. + * @param family font family + * @param style font style + * @param weight font weight + * @return internal key */ public static String createFontKey(String family, String style, int weight) { return family + "," + style + "," + weight; } - public HashMap getFonts() { - return this.fonts; + /** + * Gets a Map of all registred fonts. + * @return a read-only Map with font key/FontMetrics pairs + */ + public Map getFonts() { + return java.util.Collections.unmodifiableMap(this.fonts); } /** * This is used by the renderers to retrieve all the * fonts used in the document. * This is for embedded font or creating a list of used fonts. + * @return a read-only Map with font key/FontMetrics pairs */ - public HashMap getUsedFonts() { + public Map getUsedFonts() { return this.usedFonts; } - public FontMetric getMetricsFor(String fontName) { + /** + * Returns the FontMetrics for a particular font + * @param fontName internal key + * @return font metrics + */ + public FontMetrics getMetricsFor(String fontName) { usedFonts.put(fontName, fonts.get(fontName)); - return (FontMetric)fonts.get(fontName); + return (FontMetrics)fonts.get(fontName); } } diff --git a/src/org/apache/fop/layout/FontMetric.java b/src/org/apache/fop/layout/FontMetric.java deleted file mode 100644 index 99c15b7f9..000000000 --- a/src/org/apache/fop/layout/FontMetric.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * $Id$ - * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. - * For details on use and redistribution please refer to the - * LICENSE file included with these sources. - */ - -package org.apache.fop.layout; - -/** - * interface for font metric classes - */ -public interface FontMetric { - - public int getAscender(int size); - public int getCapHeight(int size); - public int getDescender(int size); - public int getXHeight(int size); - - public int getFirstChar(); - public int getLastChar(); - - /** - * return width (in 1/1000ths of point size) of character at - * code point i - */ - public int width(int i, int size); - - /** - * Return the array of widths. - * This is used to get an array for inserting in an output format. - * It should not be used for lookup. - */ - public int[] getWidths(int size); -} diff --git a/src/org/apache/fop/layout/FontState.java b/src/org/apache/fop/layout/FontState.java index 6349e049a..37e7b1dd0 100644 --- a/src/org/apache/fop/layout/FontState.java +++ b/src/org/apache/fop/layout/FontState.java @@ -1,85 +1,129 @@ /* * $Id$ - * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. + * Copyright (C) 2001-2003 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.layout; -import java.util.HashMap; -import org.apache.fop.render.pdf.CodePointMapping; +import java.util.Map; +import org.apache.fop.fonts.CodePointMapping; +import org.apache.fop.fonts.FontMetrics; + +/** + * This class holds font state information and provides access to the font + * metrics. + */ public class FontState { - private String _fontName; - private int _fontSize; - private String _fontFamily; - private String _fontStyle; - private int _fontWeight; + private String fontName; + private int fontSize; + //private String fontFamily; + //private String fontStyle; + //private int fontWeight; /** * normal or small-caps font */ - private int _fontVariant; - - private FontMetric _metric; - - private static HashMap EMPTY_HASHMAP = new HashMap(); + //private int fontVariant; + private FontMetrics metric; - public FontState(String key, FontMetric met, int fontSize) { - _fontSize = fontSize; - _fontName = key; - _metric = met; + /** + * Main constructor + * @param key key of the font + * @param met font metrics + * @param fontSize font size + */ + public FontState(String key, FontMetrics met, int fontSize) { + this.fontName = key; + this.metric = met; + this.fontSize = fontSize; } + /** + * Returns the font's ascender. + * @return the ascender + */ public int getAscender() { - return _metric.getAscender(_fontSize) / 1000; + return metric.getAscender(fontSize) / 1000; } + /** + * Returns the font's CapHeight. + * @return the capital height + */ public int getCapHeight() { - return _metric.getCapHeight(_fontSize) / 1000; + return metric.getCapHeight(fontSize) / 1000; } + /** + * Returns the font's Descender. + * @return the descender + */ public int getDescender() { - return _metric.getDescender(_fontSize) / 1000; + return metric.getDescender(fontSize) / 1000; } + /** + * Returns the font's name. + * @return the font name + */ public String getFontName() { - return _fontName; + return fontName; } + /** + * Returns the font size + * @return the font size + */ public int getFontSize() { - return _fontSize; + return fontSize; } + /** + * Returns the XHeight + * @return the XHeight + */ public int getXHeight() { - return _metric.getXHeight(_fontSize) / 1000; + return metric.getXHeight(fontSize) / 1000; } - public HashMap getKerning() { - if (_metric instanceof FontDescriptor) { - HashMap ret = ((FontDescriptor)_metric).getKerningInfo(); - if (ret != null) - return ret; + /** + * Returns the font's kerning table + * @return the kerning table + */ + public Map getKerning() { + Map ret = metric.getKerningInfo(); + if (ret != null) { + return ret; + } else { + return java.util.Collections.EMPTY_MAP; } - return EMPTY_HASHMAP; } - public int width(int charnum) { + /** + * Returns the width of a character + * @param charnum character to look up + * @return width of the character + */ + public int getWidth(int charnum) { // returns width of given character number in millipoints - return (_metric.width(charnum, _fontSize) / 1000); + return (metric.getWidth(charnum, fontSize) / 1000); } /** - * Map a java character (unicode) to a font character - * Default uses CodePointMapping + * Map a java character (unicode) to a font character. + * Default uses CodePointMapping. + * @param c character to map + * @return the mapped character */ public char mapChar(char c) { - if (_metric instanceof org.apache.fop.render.pdf.Font) { - return ((org.apache.fop.render.pdf.Font)_metric).mapChar(c); + if (metric instanceof org.apache.fop.fonts.Font) { + return ((org.apache.fop.fonts.Font)metric).mapChar(c); } // Use default CodePointMapping @@ -93,18 +137,23 @@ public class FontState { return c; } + /** + * @see java.lang.Object#toString() + */ public String toString() { StringBuffer sbuf = new StringBuffer(); sbuf.append('('); - sbuf.append(_fontFamily); - sbuf.append(','); - sbuf.append(_fontName); + /* + sbuf.append(fontFamily); + sbuf.append(',');*/ + sbuf.append(fontName); sbuf.append(','); - sbuf.append(_fontSize); + sbuf.append(fontSize); + /* sbuf.append(','); - sbuf.append(_fontStyle); + sbuf.append(fontStyle); sbuf.append(','); - sbuf.append(_fontWeight); + sbuf.append(fontWeight);*/ sbuf.append(')'); return sbuf.toString(); } -- 2.39.5