Author: vhennebert
Date: Thu Feb 20 21:29:15 2014
New Revision: 1570359
URL: http://svn.apache.org/r1570359
Log:
BATIK-1067: Defer font-face loading to FontFamilyResolver
Modified:
xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
Modified: xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
--- xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java
(original)
+++ xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java Thu
Feb 20 21:29:15 2014
@@ -18,23 +18,21 @@
*/
package org.apache.batik.bridge;
-import java.awt.Font;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.svg.SVGDocument;
+
import org.apache.batik.dom.AbstractNode;
-import org.apache.batik.gvt.font.AWTFontFamily;
import org.apache.batik.gvt.font.FontFamilyResolver;
import org.apache.batik.gvt.font.GVTFontFace;
import org.apache.batik.gvt.font.GVTFontFamily;
import org.apache.batik.util.ParsedURL;
import org.apache.batik.util.XMLConstants;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.svg.SVGDocument;
-
/**
* This class represents a <font-face> element or @font-face rule
*
@@ -94,21 +92,18 @@ public abstract class FontFace extends G
*/
public GVTFontFamily getFontFamily(BridgeContext ctx) {
final FontFamilyResolver fontFamilyResolver =
ctx.getFontFamilyResolver();
- String name = fontFamilyResolver.lookup(familyName);
- if (name != null) {
- GVTFontFace ff = createFontFace(name, this);
- return new AWTFontFamily(ff);
+ GVTFontFamily family = fontFamilyResolver.resolve(familyName, this);
+ if (family != null) {
+ return family;
}
Iterator iter = srcs.iterator();
while (iter.hasNext()) {
Object o = iter.next();
if (o instanceof String) {
- String str = (String)o;
- name = fontFamilyResolver.lookup(str);
- if (name != null) {
- GVTFontFace ff = createFontFace(str, this);
- return new AWTFontFamily(ff);
+ family = fontFamilyResolver.resolve((String) o, this);
+ if (family != null) {
+ return family;
}
} else if (o instanceof ParsedURL) {
try {
@@ -129,7 +124,7 @@ public abstract class FontFace extends G
}
}
- return new AWTFontFamily(this);
+ return null;
}
/**
@@ -198,7 +193,7 @@ public abstract class FontFace extends G
}
}
// todo : if the above loop fails to find a fontFaceElt, a null is
passed to createFontFace()
-
+
SVGFontFaceElementBridge fontFaceBridge;
fontFaceBridge = (SVGFontFaceElementBridge)ctx.getBridge
(SVG_NAMESPACE_URI, SVG_FONT_FACE_TAG);
@@ -208,11 +203,8 @@ public abstract class FontFace extends G
return new SVGFontFamily(gff, fontElt, ctx);
}
// Must be a reference to a 'Web Font'.
- // Let's see if JDK can parse it.
try {
- Font font = Font.createFont(Font.TRUETYPE_FONT,
- purl.openStream());
- return new AWTFontFamily(this, font);
+ return ctx.getFontFamilyResolver().loadFont(purl.openStream(),
this);
} catch (Exception ex) {
}
return null;
Modified:
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
---
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
(original)
+++
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
Thu Feb 20 21:29:15 2014
@@ -20,6 +20,7 @@ package org.apache.batik.gvt.font;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -28,6 +29,8 @@ import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
+import org.apache.batik.bridge.FontFace;
+
/**
* The is a utility class that is used for resolving UnresolvedFontFamilies.
*
@@ -130,9 +133,19 @@ public final class DefaultFontFamilyReso
*/
protected static final Map resolvedFontFamilies = new HashMap();
- /** {@inheritDoc} */
- public String lookup(String familyName) {
- return (String)fonts.get(familyName.toLowerCase());
+ public AWTFontFamily resolve(String familyName, FontFace fontFace) {
+ String fontName =
(String)fonts.get(fontFace.getFamilyName().toLowerCase());
+ if (fontName == null) {
+ return null;
+ } else {
+ GVTFontFace face = FontFace.createFontFace(fontName, fontFace);
+ return new AWTFontFamily(fontFace);
+ }
+ }
+
+ public GVTFontFamily loadFont(InputStream in, FontFace ff) throws
Exception {
+ Font font = Font.createFont(Font.TRUETYPE_FONT,
in.toURL().openStream());
+ return new AWTFontFamily(ff, font);
}
/** {@inheritDoc} */
Modified:
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
URL:
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
---
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
(original)
+++
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
Thu Feb 20 21:29:15 2014
@@ -19,9 +19,11 @@
package org.apache.batik.gvt.font;
-public interface FontFamilyResolver {
+import java.io.InputStream;
+
+import org.apache.batik.bridge.FontFace;
- String lookup(String familyName);
+public interface FontFamilyResolver {
/**
* Resolves a font family name into a GVTFontFamily. If the font
@@ -34,9 +36,12 @@ public interface FontFamilyResolver {
*/
GVTFontFamily resolve(String familyName);
+ GVTFontFamily resolve(String familyName, FontFace fontFace);
+
+ GVTFontFamily loadFont(InputStream in, FontFace fontFace) throws Exception;
+
GVTFontFamily getDefault();
GVTFontFamily getFamilyThatCanDisplay(char c);
-
}