git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1570362 13f79535-47bb-0310-9956-ffa450edef68tags/fop-2_0
@@ -22,6 +22,8 @@ package org.apache.fop.afp.svg; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import org.apache.batik.gvt.font.GVTFontFace; | |||
import org.apache.fop.afp.AFPEventProducer; | |||
import org.apache.fop.afp.fonts.DoubleByteFont; | |||
import org.apache.fop.events.EventBroadcaster; | |||
@@ -69,7 +71,8 @@ public class AFPFontFamilyResolver extends FilteringFontFamilyResolver { | |||
notifyDBFontRejection(font.getFontName()); | |||
} else { | |||
return new FOPGVTFontFamily(fontInfo, fontFamily, | |||
new FontTriplet(fontFamily, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL)); | |||
new FontTriplet(fontFamily, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL), | |||
new GVTFontFace(fontFamily)); | |||
} | |||
} |
@@ -19,9 +19,11 @@ | |||
package org.apache.fop.svg.font; | |||
import java.io.InputStream; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import org.apache.batik.bridge.FontFace; | |||
import org.apache.batik.gvt.font.FontFamilyResolver; | |||
import org.apache.batik.gvt.font.GVTFontFamily; | |||
@@ -33,19 +35,19 @@ public class AggregatingFontFamilyResolver implements FontFamilyResolver { | |||
this.resolvers = Arrays.<FontFamilyResolver>asList(resolvers); | |||
} | |||
public String lookup(String familyName) { | |||
public GVTFontFamily resolve(String familyName) { | |||
for (FontFamilyResolver resolver : resolvers) { | |||
String lookup = resolver.lookup(familyName); | |||
if (lookup != null) { | |||
return lookup; | |||
GVTFontFamily family = resolver.resolve(familyName); | |||
if (family != null) { | |||
return family; | |||
} | |||
} | |||
return null; | |||
} | |||
public GVTFontFamily resolve(String familyName) { | |||
public GVTFontFamily resolve(String familyName, FontFace fontFace) { | |||
for (FontFamilyResolver resolver : resolvers) { | |||
GVTFontFamily family = resolver.resolve(familyName); | |||
GVTFontFamily family = resolver.resolve(familyName, fontFace); | |||
if (family != null) { | |||
return family; | |||
} | |||
@@ -53,6 +55,17 @@ public class AggregatingFontFamilyResolver implements FontFamilyResolver { | |||
return null; | |||
} | |||
public GVTFontFamily loadFont(InputStream in, FontFace fontFace) throws Exception { | |||
for (FontFamilyResolver resolver : resolvers) { | |||
try { | |||
return resolver.loadFont(in, fontFace); | |||
} catch (Exception e) { | |||
// Try the next one | |||
} | |||
} | |||
return null; | |||
} | |||
public GVTFontFamily getDefault() { | |||
return resolve("any"); | |||
} |
@@ -19,8 +19,13 @@ | |||
package org.apache.fop.svg.font; | |||
import java.io.InputStream; | |||
import java.util.Map; | |||
import org.apache.batik.bridge.FontFace; | |||
import org.apache.batik.gvt.font.GVTFontFace; | |||
import org.apache.batik.gvt.font.GVTFontFamily; | |||
import org.apache.fop.fonts.Font; | |||
import org.apache.fop.fonts.FontInfo; | |||
import org.apache.fop.fonts.FontTriplet; | |||
@@ -34,20 +39,27 @@ public class FOPFontFamilyResolverImpl implements FOPFontFamilyResolver { | |||
this.fontInfo = fontInfo; | |||
} | |||
public String lookup(String familyName) { | |||
// TODO Auto-generated method stub | |||
throw new UnsupportedOperationException(); | |||
public FOPGVTFontFamily resolve(String familyName) { | |||
return resolve(familyName, new GVTFontFace(familyName)); | |||
} | |||
public FOPGVTFontFamily resolve(String familyName) { | |||
public FOPGVTFontFamily resolve(String familyName, FontFace fontFace) { | |||
return resolve(familyName, (GVTFontFace) FontFace.createFontFace(familyName, fontFace)); | |||
} | |||
private FOPGVTFontFamily resolve(String familyName, GVTFontFace fontFace) { | |||
FOPGVTFontFamily gvtFontFamily = null; | |||
FontTriplet triplet = fontInfo.fontLookup(familyName, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL); | |||
if (fontInfo.hasFont(familyName, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL)) { | |||
gvtFontFamily = new FOPGVTFontFamily(fontInfo, familyName, triplet); | |||
gvtFontFamily = new FOPGVTFontFamily(fontInfo, familyName, triplet, fontFace); | |||
} | |||
return gvtFontFamily; | |||
} | |||
public GVTFontFamily loadFont(InputStream in, FontFace fontFace) throws Exception { | |||
throw new UnsupportedOperationException("Not implemented"); | |||
} | |||
public FOPGVTFontFamily getDefault() { | |||
return resolve("any"); | |||
} | |||
@@ -58,7 +70,8 @@ public class FOPFontFamilyResolverImpl implements FOPFontFamilyResolver { | |||
if (font.hasChar(c)) { | |||
String fontFamily = font.getFamilyNames().iterator().next(); | |||
return new FOPGVTFontFamily(fontInfo, fontFamily, | |||
new FontTriplet(fontFamily, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL)); | |||
new FontTriplet(fontFamily, Font.STYLE_NORMAL, Font.WEIGHT_NORMAL), | |||
new GVTFontFace(fontFamily)); | |||
} | |||
} | |||
return null; |
@@ -38,10 +38,13 @@ public class FOPGVTFontFamily implements GVTFontFamily { | |||
private final String familyName; | |||
public FOPGVTFontFamily(FontInfo fontInfo, String familyName, FontTriplet triplet) { | |||
private GVTFontFace fontFace; | |||
public FOPGVTFontFamily(FontInfo fontInfo, String familyName, FontTriplet triplet, GVTFontFace fontFace) { | |||
this.fontInfo = fontInfo; | |||
this.fontTriplet = triplet; | |||
this.familyName = familyName; | |||
this.fontFace = fontFace; | |||
} | |||
public String getFamilyName() { | |||
@@ -49,8 +52,7 @@ public class FOPGVTFontFamily implements GVTFontFamily { | |||
} | |||
public GVTFontFace getFontFace() { | |||
// TODO Auto-generated method stub | |||
throw new UnsupportedOperationException(); | |||
return fontFace; | |||
} | |||
public FOPGVTFont deriveFont(float size, AttributedCharacterIterator aci) { |
@@ -19,6 +19,11 @@ | |||
package org.apache.fop.svg.font; | |||
import java.io.InputStream; | |||
import org.apache.batik.bridge.FontFace; | |||
import org.apache.batik.gvt.font.GVTFontFamily; | |||
public class FilteringFontFamilyResolver implements FOPFontFamilyResolver { | |||
@@ -28,14 +33,18 @@ public class FilteringFontFamilyResolver implements FOPFontFamilyResolver { | |||
this.delegate = delegate; | |||
} | |||
public String lookup(String familyName) { | |||
return delegate.lookup(familyName); | |||
} | |||
public FOPGVTFontFamily resolve(String familyName) { | |||
return delegate.resolve(familyName); | |||
} | |||
public GVTFontFamily resolve(String familyName, FontFace fontFace) { | |||
return delegate.resolve(familyName, fontFace); | |||
} | |||
public GVTFontFamily loadFont(InputStream in, FontFace fontFace) throws Exception { | |||
return delegate.loadFont(in, fontFace); | |||
} | |||
public FOPGVTFontFamily getDefault() { | |||
return delegate.getDefault(); | |||
} |
@@ -81,7 +81,7 @@ public class FOPFontFamilyResolverTestCase { | |||
@Test | |||
public void testDeriveFont() { | |||
FOPGVTFontFamily family = (FOPGVTFontFamily) resolver.resolve(FontInfoBuilder.DEJAVU_LGC_SERIF); | |||
FOPGVTFontFamily family = resolver.resolve(FontInfoBuilder.DEJAVU_LGC_SERIF); | |||
FOPGVTFont font = family.deriveFont(10, Collections.emptyMap()); | |||
assertEquals(10, font.getSize(), 0); | |||
assertTrue(font.canDisplay('\u01F6')); | |||
@@ -91,7 +91,7 @@ public class FOPFontFamilyResolverTestCase { | |||
@Test | |||
@Ignore("FOP metrics don't match AWT, but not sure who is right and who is wrong") | |||
public void testLineMetrics() throws FontFormatException, IOException { | |||
FOPGVTFontFamily family = (FOPGVTFontFamily) resolver.resolve(FontInfoBuilder.DEJAVU_LGC_SERIF); | |||
FOPGVTFontFamily family = resolver.resolve(FontInfoBuilder.DEJAVU_LGC_SERIF); | |||
FOPGVTFont font = family.deriveFont(10, Collections.emptyMap()); | |||
GVTLineMetrics fopMetrics = font.getLineMetrics("", null); | |||
LineMetrics awtMetrics = getAWTLineMetrics(); |