svn commit: r1901699 - in /xmlgraphics/fop/trunk/fop-core/src: main/java/org/apache/fop/complexscripts/scripts/ test/java/org/apache/fop/complexscripts/scripts/

[email protected] Mon, 06 Jun 2022 12:56:20 -0000
Newsgroups gmane.text.xml.fop.cvs
Message-ID <[email protected]>
Author: ssteiner
Date: Mon Jun  6 12:56:20 2022
New Revision: 1901699

URL: http://svn.apache.org/viewvc?rev=1901699&view=rev
Log:
FOP-3074: Reorder glyphs based on gpa value

Modified:
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/DefaultScriptProcessor.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/HebrewScriptProcessor.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ThaiScriptProcessor.java
    xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/DefaultScriptTestCase.java

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/DefaultScriptProcessor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/DefaultScriptProcessor.java?rev=1901699&r1=1901698&r2=1901699&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/DefaultScriptProcessor.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/DefaultScriptProcessor.java Mon Jun  6 12:56:20 2022
@@ -88,7 +88,8 @@ public class DefaultScriptProcessor exte
         for (int i = 0; i < ng; i++) {
             int gid = ga [ i ];
             int gw = unscaledWidths [ i ];
-            if (isReorderedMark(gdef, ga, unscaledWidths, i)) {
+            int[] pa = (gpa != null) ? gpa[i] : null;
+            if (isReorderedMark(gdef, ga, unscaledWidths, i, pa)) {
                 nm++;
             }
         }
@@ -106,7 +107,7 @@ public class DefaultScriptProcessor exte
                 int gid = ga [ i ];
                 int[] pa = (gpa != null) ? gpa [ i ] : null;
                 CharAssociation ca = aa [ i ];
-                if (isReorderedMark(gdef, ga, unscaledWidths, i)) {
+                if (isReorderedMark(gdef, ga, unscaledWidths, i, pa)) {
                     nga [ k ] = gid;
                     naa [ k ] = ca;
                     if (npa != null) {
@@ -150,8 +151,9 @@ public class DefaultScriptProcessor exte
         }
     }
 
-    protected boolean isReorderedMark(GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index) {
-        return gdef.isGlyphClass(glyphs[index], GlyphDefinitionTable.GLYPH_CLASS_MARK);
+    protected boolean isReorderedMark(GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index, int[] pa) {
+        pa = (pa != null) ? pa : new int[1];
+        return gdef.isGlyphClass(glyphs[index], GlyphDefinitionTable.GLYPH_CLASS_MARK) && pa[0] != 0;
     }
 
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/HebrewScriptProcessor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/HebrewScriptProcessor.java?rev=1901699&r1=1901698&r2=1901699&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/HebrewScriptProcessor.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/HebrewScriptProcessor.java Mon Jun  6 12:56:20 2022
@@ -25,7 +25,9 @@ public class HebrewScriptProcessor exten
         super(script);
     }
 
-    protected boolean isReorderedMark(GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index) {
+    @Override
+    protected boolean isReorderedMark(
+            GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index, int[] pa) {
         return gdef.isGlyphClass(glyphs[index], GlyphDefinitionTable.GLYPH_CLASS_MARK) && (unscaledWidths[index] != 0);
     }
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ThaiScriptProcessor.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ThaiScriptProcessor.java?rev=1901699&r1=1901698&r2=1901699&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ThaiScriptProcessor.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/complexscripts/scripts/ThaiScriptProcessor.java Mon Jun  6 12:56:20 2022
@@ -25,7 +25,9 @@ public class ThaiScriptProcessor extends
         super(script);
     }
 
-    protected boolean isReorderedMark(GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index) {
+    @Override
+    protected boolean isReorderedMark(
+            GlyphDefinitionTable gdef, int[] glyphs, int[] unscaledWidths, int index, int[] pa) {
         return gdef.isGlyphClass(glyphs[index], GlyphDefinitionTable.GLYPH_CLASS_MARK);
     }
 }

Modified: xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/DefaultScriptTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/DefaultScriptTestCase.java?rev=1901699&r1=1901698&r2=1901699&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/DefaultScriptTestCase.java (original)
+++ xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/complexscripts/scripts/DefaultScriptTestCase.java Mon Jun  6 12:56:20 2022
@@ -35,8 +35,24 @@ import org.apache.fop.fonts.MultiByteFon
 
 public class DefaultScriptTestCase {
     @Test
-    public void testProcessor() {
+    public void testProcessorReorder() {
         String in = "\u00F6\u0323";
+        int[][] gpa = new int[2][1];
+        gpa[0][0] = 1;
+        gpa[1][0] = 1;
+        String actual = getFont().reorderCombiningMarks(in, gpa, OTFScript.DEFAULT, null, null).toString();
+        Assert.assertEquals(actual.charAt(0), 803);
+    }
+
+    @Test
+    public void testProcessorNoReorder() {
+        String in = "\u00F6\u0323";
+        int[][] gpa = new int[2][1];
+        String actual = getFont().reorderCombiningMarks(in, gpa, OTFScript.DEFAULT, null, null).toString();
+        Assert.assertEquals(actual.charAt(0), 57344);
+    }
+
+    private MultiByteFont getFont() {
         MultiByteFont font = new MultiByteFont(null, null);
         font.setWidthArray(new int[0]);
         font.setCMap(new CMapSegment[]{new CMapSegment('\u0323', '\u0323', 1)});
@@ -46,7 +62,6 @@ public class DefaultScriptTestCase {
                 GlyphClassTable.createClassTable(entries), null);
         font.setGDEF(
                 new GlyphDefinitionTable(Collections.singletonList(table), new HashMap<String, ScriptProcessor>()));
-        String actual = font.reorderCombiningMarks(in, null, OTFScript.DEFAULT, null, null).toString();
-        Assert.assertEquals(actual.charAt(0), 803);
+        return font;
     }
 }