chrisg 2002/06/10 16:56:30 Modified: . Tag: fop-0_20_2-maintain CHANGES src/org/apache/fop/layout Tag: fop-0_20_2-maintain FontInfo.java FontState.java Log: added support for comma-separated values for the font-family property Submitted by: Oleg Tkachenko <[EMAIL PROTECTED]> Revision Changes Path No revision No revision 1.10.2.19 +3 -0 xml-fop/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/xml-fop/CHANGES,v retrieving revision 1.10.2.18 retrieving revision 1.10.2.19 diff -u -r1.10.2.18 -r1.10.2.19 --- CHANGES 10 Jun 2002 22:10:30 -0000 1.10.2.18 +++ CHANGES 10 Jun 2002 23:56:30 -0000 1.10.2.19 @@ -51,6 +51,9 @@ - Fixed letter-spacing (Jeremias Maerki) - BaseDir property is now used for loading custom fonts (Bug #7608) (thanks to Arnd Beissner and Brian O'Kelley) +- Added support for comma-separated values for the font-family property + Submitted by: Oleg Tkachenko <[EMAIL PROTECTED]> + ============================================================================== Done since 0.20.2 release No revision No revision 1.12.2.1 +5 -1 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.12 retrieving revision 1.12.2.1 diff -u -r1.12 -r1.12.2.1 --- FontInfo.java 11 Sep 2001 10:04:25 -0000 1.12 +++ FontInfo.java 10 Jun 2002 23:56:30 -0000 1.12.2.1 @@ -73,6 +73,10 @@ return this.triplets.get(key) != null; } + public boolean hasFont(String key) { + return this.triplets.get(key) != null; + } + /** * Creates a key from the given strings */ 1.14.2.4 +47 -2 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.14.2.3 retrieving revision 1.14.2.4 diff -u -r1.14.2.3 -r1.14.2.4 --- FontState.java 12 Feb 2002 01:02:24 -0000 1.14.2.3 +++ FontState.java 10 Jun 2002 23:56:30 -0000 1.14.2.4 @@ -8,6 +8,7 @@ package org.apache.fop.layout; import java.util.Hashtable; +import java.util.StringTokenizer; import org.apache.fop.apps.FOPException; import org.apache.fop.fo.properties.FontVariant; @@ -37,7 +38,43 @@ _fontStyle = fontStyle; _fontWeight = fontWeight; _fontSize = fontSize; - _fontName = fontInfo.fontLookup(fontFamily, fontStyle, fontWeight); + String _fontKey = FontInfo.createFontKey(_fontFamily, _fontStyle, _fontWeight); + //Quick check-out for simple font family + if (!fontInfo.hasFont(_fontKey)) { + //Tokenizes font-family list + StringTokenizer st = new StringTokenizer(_fontFamily, ","); + while (st.hasMoreTokens()) { + String token = st.nextToken().trim(); + //Checks for quoted font family name + if (token.charAt(0) == '"' || token.charAt(0) == '\'') + token = token.substring(1, token.length()-1); + else { + //In a nonquoted font family name any sequence of whitespace + //inside should be converted to a single space + StringBuffer sb = new StringBuffer(); + boolean spaced = false; + for (int i=0; i<token.length(); i++) { + char c = token.charAt(i); + if (!isWhitespace(c)) { + sb.append(c); + spaced = false; + } + else if (!spaced) { + sb.append(c); + spaced = true; + } + } + token = sb.toString(); + } + //Checks found font family name for existence + _fontKey = FontInfo.createFontKey(token, _fontStyle, _fontWeight); + if (fontInfo.hasFont(_fontKey)) { + _fontFamily = token; + break; + } + } + } + _fontName = fontInfo.fontLookup(_fontKey); _metric = fontInfo.getMetricsFor(_fontName); _fontVariant = fontVariant; _letterSpacing = 0; @@ -51,6 +88,14 @@ _letterSpacing = letterSpacing; } + private static boolean isWhitespace(char ch) { + return (ch <= 0x0020) && + (((((1L << 0x0009) | + (1L << 0x000A) | + (1L << 0x000C) | + (1L << 0x000D) | + (1L << 0x0020)) >> ch) & 1L) != 0); + } public int getAscender() { return _metric.getAscender(_fontSize) / 1000;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]