jeremias 2003/01/08 05:56:37 Modified: src/org/apache/fop/layout FontInfo.java FontState.java Removed: src/org/apache/fop/layout FontDescriptor.java FontMetric.java Log: Adjustments for the font refactoring Removal/commenting out of some dead code Lots of Javadocs Fixed Checkstyle errors Revision Changes Path 1.19 +92 -28 xml-fop/src/org/apache/fop/layout/FontInfo.java Index: FontInfo.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/FontInfo.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- FontInfo.java 19 Dec 2002 00:35:31 -0000 1.18 +++ FontInfo.java 8 Jan 2003 13:56:37 -0000 1.19 @@ -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. + * <br> * 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 @@ 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 @@ /** * Lookup a font. - * Locate the font name for a given familyi, style and weight. + * <br> + * 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 @@ // 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 @@ /** * 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 @@ 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); } } 1.22 +91 -42 xml-fop/src/org/apache/fop/layout/FontState.java Index: FontState.java =================================================================== RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/FontState.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- FontState.java 19 Dec 2002 00:35:31 -0000 1.21 +++ FontState.java 8 Jan 2003 13:56:37 -0000 1.22 @@ -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 @@ 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(); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]