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