Author: gadams
Date: Mon Aug 18 18:43:50 2014
New Revision: 1618701

URL: http://svn.apache.org/r1618701
Log:
FOP-2391: ensure mapping is non-null in CS SVG text

Modified:
    xmlgraphics/fop/trunk/src/java/org/apache/fop/fonts/GlyphMapping.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/font/FOPGVTGlyphVector.java

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/fonts/GlyphMapping.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/fonts/GlyphMapping.java?rev=1618701&r1=1618700&r2=1618701&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/fonts/GlyphMapping.java 
(original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/fonts/GlyphMapping.java Mon 
Aug 18 18:43:50 2014
@@ -83,22 +83,22 @@ public class GlyphMapping {
     public static GlyphMapping doGlyphMapping(TextFragment text, int 
startIndex, int endIndex,
             Font font, MinOptMax letterSpaceIPD, MinOptMax[] 
letterSpaceAdjustArray,
             char precedingChar, char breakOpportunityChar, final boolean 
endsWithHyphen, int level,
-            boolean retainAssociations) {
+            boolean dontOptimizeForIdentityMapping, boolean 
retainAssociations) {
         GlyphMapping mapping;
         if (font.performsSubstitution() || font.performsPositioning()) {
             mapping = processWordMapping(text, startIndex, endIndex, font,
-                    breakOpportunityChar, endsWithHyphen, level, 
retainAssociations);
+                breakOpportunityChar, endsWithHyphen, level, 
dontOptimizeForIdentityMapping, retainAssociations);
         } else {
             mapping = processWordNoMapping(text, startIndex, endIndex, font,
-                    letterSpaceIPD, letterSpaceAdjustArray, precedingChar, 
breakOpportunityChar, endsWithHyphen,
-                    level);
+                letterSpaceIPD, letterSpaceAdjustArray, precedingChar, 
breakOpportunityChar, endsWithHyphen, level);
         }
         return mapping;
     }
 
     private static GlyphMapping processWordMapping(TextFragment text, int 
startIndex,
             int endIndex, final Font font, final char breakOpportunityChar,
-            final boolean endsWithHyphen, int level, boolean 
retainAssociations) {
+            final boolean endsWithHyphen, int level,
+            boolean dontOptimizeForIdentityMapping, boolean 
retainAssociations) {
         int e = endIndex; // end index of word in FOText character buffer
         int nLS = 0; // # of letter spaces
         String script = text.getScript();
@@ -163,7 +163,8 @@ public class GlyphMapping {
 
         return new GlyphMapping(startIndex, e, 0, nLS, ipd, endsWithHyphen, 
false,
                 breakOpportunityChar != 0, font, level, gpa,
-                CharUtilities.isSameSequence(mcs, ics) ? null : 
mcs.toString(), associations);
+                !dontOptimizeForIdentityMapping && 
CharUtilities.isSameSequence(mcs, ics) ? null : mcs.toString(),
+                associations);
     }
 
     /**
@@ -320,6 +321,9 @@ public class GlyphMapping {
     }
 
     public void reverse() {
+        if (mapping == null) {
+            return;
+        }
         if (mapping.length() > 0) {
             mapping = new StringBuffer(mapping).reverse().toString();
         }

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java?rev=1618701&r1=1618700&r2=1618701&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
 Mon Aug 18 18:43:50 2014
@@ -934,7 +934,7 @@ public class TextLayoutManager extends L
                 && prevMapping.endIndex > 0 ? 
foText.charAt(prevMapping.endIndex - 1) : 0;
         GlyphMapping mapping = GlyphMapping.doGlyphMapping(foText, thisStart, 
lastIndex, font,
                 letterSpaceIPD, letterSpaceAdjustArray, precedingChar, 
breakOpportunityChar,
-                endsWithHyphen, level, false);
+                endsWithHyphen, level, false, false);
         prevMapping = mapping;
         addGlyphMapping(mapping);
         tempStart = nextStart;

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/font/FOPGVTGlyphVector.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/font/FOPGVTGlyphVector.java?rev=1618701&r1=1618700&r2=1618701&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/font/FOPGVTGlyphVector.java 
(original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/svg/font/FOPGVTGlyphVector.java 
Mon Aug 18 18:43:50 2014
@@ -90,7 +90,7 @@ class FOPGVTGlyphVector implements GVTGl
         MinOptMax letterSpaceIPD = MinOptMax.ZERO;
         MinOptMax[] letterSpaceAdjustments = new 
MinOptMax[charIter.getEndIndex() - charIter.getBeginIndex()];
         GlyphMapping mapping = GlyphMapping.doGlyphMapping(text, 
charIter.getBeginIndex(), charIter.getEndIndex(),
-            f, letterSpaceIPD, letterSpaceAdjustments, '\0', '\0', false, 0, 
true);
+            f, letterSpaceIPD, letterSpaceAdjustments, '\0', '\0', false, 0, 
true, true);
         maybeReverse(mapping);
         CharacterIterator glyphAsCharIter =
             mapping.mapping != null ? new 
StringCharacterIterator(mapping.mapping) : charIter;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to