You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by ss...@apache.org on 2022/03/24 12:33:35 UTC
svn commit: r1899170 - in /xmlgraphics/fop/trunk/fop-core/src: main/java/org/apache/fop/render/intermediate/ main/java/org/apache/fop/render/pdf/ main/java/org/apache/fop/render/ps/ test/java/org/apache/fop/render/pdf/
Author: ssteiner
Date: Thu Mar 24 12:33:35 2022
New Revision: 1899170
URL: http://svn.apache.org/viewvc?rev=1899170&view=rev
Log:
FOP-3057: Allow fallback to non svg glyphs
Modified:
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java?rev=1899170&r1=1899169&r2=1899170&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/intermediate/AbstractIFPainter.java Thu Mar 24 12:33:35 2022
@@ -476,8 +476,18 @@ public abstract class AbstractIFPainter<
drawText(x, y, letterSpacing, wordSpacing, dp, text);
}
- protected void drawSVGText(MultiByteFont multiByteFont, FontTriplet triplet, int x, int y, String text,
- IFState state) throws IFException {
+ protected boolean drawSVGText(MultiByteFont multiByteFont, FontTriplet triplet, int x, int y, String text,
+ IFState state) throws IFException {
+ for (int i = 0; i < text.length();) {
+ int codepoint = text.codePointAt(i);
+ if (!Character.isWhitespace(codepoint)) {
+ SVGGlyphData svg = multiByteFont.getSVG(codepoint);
+ if (svg == null) {
+ return false;
+ }
+ }
+ i += Character.charCount(codepoint);
+ }
int sizeMillipoints = state.getFontSize();
Font font = getFontInfo().getFontInstance(triplet, sizeMillipoints);
int newx = x;
@@ -497,5 +507,6 @@ public abstract class AbstractIFPainter<
newx += font.getCharWidth(c);
i += Character.charCount(c);
}
+ return true;
}
}
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java?rev=1899170&r1=1899169&r2=1899170&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFPainter.java Thu Mar 24 12:33:35 2022
@@ -435,8 +435,12 @@ public class PDFPainter extends Abstract
String fontKey = getFontInfo().getInternalFontKey(triplet);
Typeface typeface = getTypeface(fontKey);
if (typeface instanceof MultiByteFont && ((MultiByteFont) typeface).hasSVG()) {
- drawSVGText((MultiByteFont) typeface, triplet, x, y, text, state);
- } else if ((dp == null) || IFUtil.isDPOnlyDX(dp)) {
+ boolean success = drawSVGText((MultiByteFont) typeface, triplet, x, y, text, state);
+ if (success) {
+ return;
+ }
+ }
+ if ((dp == null) || IFUtil.isDPOnlyDX(dp)) {
drawTextWithDX(x, y, text, triplet, letterSpacing,
wordSpacing, IFUtil.convertDPToDX(dp));
} else {
Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java?rev=1899170&r1=1899169&r2=1899170&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/ps/PSPainter.java Thu Mar 24 12:33:35 2022
@@ -363,8 +363,10 @@ public class PSPainter extends AbstractI
String fontKey = getFontKey(triplet);
Typeface typeface = getTypeface(fontKey);
if (typeface instanceof MultiByteFont && ((MultiByteFont) typeface).hasSVG()) {
- drawSVGText((MultiByteFont) typeface, triplet, x, y, text, state);
- return;
+ boolean success = drawSVGText((MultiByteFont) typeface, triplet, x, y, text, state);
+ if (success) {
+ return;
+ }
}
beginTextObject();
//TODO Ignored: state.getFontVariant()
Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java?rev=1899170&r1=1899169&r2=1899170&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/pdf/PDFPainterTestCase.java Thu Mar 24 12:33:35 2022
@@ -367,6 +367,20 @@ public class PDFPainterTestCase {
}
@Test
+ public void testSVGFontFallback() throws IFException, IOException {
+ String out = drawSVGFont(null);
+ Assert.assertEquals(out, "<< /Length 1 0 R >>\n"
+ + "stream\n"
+ + "q\n"
+ + "1 0 0 -1 0 0 cm\n"
+ + "BT\n"
+ + "/f1 0.012 Tf\n"
+ + "1 0 0 -1 0 0 Tm [<0000000000000000>] TJ\n"
+ + "\n"
+ + "endstream");
+ }
+
+ @Test
public void testSVGFontScale() throws IFException, IOException {
String out = drawSVGFont("<svg xmlns=\"http://www.w3.org/2000/svg\">\n"
+ "<g transform=\"translate(0 0) translate(0 0) scale(50)\"/>"
@@ -388,9 +402,11 @@ public class PDFPainterTestCase {
MultiByteFont font = new MultiByteFont(null, null);
font.setWidthArray(new int[1]);
Map<Integer, SVGGlyphData> svgs = new HashMap<>();
- SVGGlyphData svgGlyph = new SVGGlyphData();
- svgGlyph.setSVG(svg);
- svgs.put(0, svgGlyph);
+ if (svg != null) {
+ SVGGlyphData svgGlyph = new SVGGlyphData();
+ svgGlyph.setSVG(svg);
+ svgs.put(0, svgGlyph);
+ }
font.setSVG(svgs);
font.setBBoxArray(new Rectangle[] {new Rectangle()});
fi.addMetrics("f1", font);
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org