Browse Source

Removed fallback mechanism in AbstractCodePointMapping. This is superfluous now that SingleByteFont handles all substitutions. This actually fixes a bug: the glyph "minus" was painted using "hyphen" but used the width of "minus" due to this fallback mechanism.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1142188 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-1_1rc1old
Jeremias Maerki 13 years ago
parent
commit
20dd19ff66
1 changed files with 2 additions and 40 deletions
  1. 2
    40
      src/java/org/apache/fop/fonts/AbstractCodePointMapping.java

+ 2
- 40
src/java/org/apache/fop/fonts/AbstractCodePointMapping.java View File

package org.apache.fop.fonts; package org.apache.fop.fonts;


import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;


import org.apache.fop.util.CharUtilities;
import org.apache.xmlgraphics.fonts.Glyphs; import org.apache.xmlgraphics.fonts.Glyphs;


import org.apache.fop.util.CharUtilities;

/** /**
* Abstract base class for code point mapping classes (1-byte character encodings). * Abstract base class for code point mapping classes (1-byte character encodings).
*/ */
private char[] codepoints; private char[] codepoints;
private char[] unicodeMap; //code point to Unicode char private char[] unicodeMap; //code point to Unicode char
private String[] charNameMap; //all character names in the encoding private String[] charNameMap; //all character names in the encoding
//Here we accumulate all mappings we have found through substitution
private Map<Character, Character> fallbackMap;


/** /**
* Main constructor. * Main constructor.
bot = mid + 1; bot = mid + 1;
} }
} }

//Fallback: using cache
synchronized (this) {
if (fallbackMap != null) {
Character fallback = fallbackMap.get(new Character(c));
if (fallback != null) {
return fallback.charValue();
}
}
}
//Fallback: find alternatives (slow!)
String glyphName = Glyphs.charToGlyphName(c);
if (glyphName.length() > 0) {
String[] alternatives = Glyphs.getCharNameAlternativesFor(glyphName);
if (alternatives != null) {
for (int i = 0, ic = alternatives.length; i < ic; i++) {
int idx = getCodePointForGlyph(alternatives[i]);
if (idx >= 0) {
putFallbackCharacter(c, (char)idx);
return (char)idx;
}
}
}
}

putFallbackCharacter(c, NOT_FOUND_CODE_POINT);
return NOT_FOUND_CODE_POINT; return NOT_FOUND_CODE_POINT;
} }


private void putFallbackCharacter(char c, char mapTo) {
synchronized (this) {
if (this.fallbackMap == null) {
this.fallbackMap = new HashMap<Character, Character>();
}
this.fallbackMap.put(new Character(c), new Character(mapTo));
}
}

/** /**
* Returns the main Unicode value that is associated with the given code point in the encoding. * Returns the main Unicode value that is associated with the given code point in the encoding.
* Note that multiple Unicode values can theoretically be mapped to one code point in the * Note that multiple Unicode values can theoretically be mapped to one code point in the

Loading…
Cancel
Save