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]

Reply via email to