Skip to content

Commit d6ddded

Browse files
patch from FOP-2529 applied, #22
1 parent baec92a commit d6ddded

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

fop-core/src/main/java/org/apache/fop/fonts/MultiByteFont.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,16 @@ private int createPrivateUseMapping(int gi) {
310310
* @return unicode scalar value
311311
*/
312312
// [TBD] - needs optimization, i.e., change from linear search to binary search
313-
private int findCharacterFromGlyphIndex(int gi, boolean augment) {
313+
private int findCharacterFromGlyphIndex(int gi, boolean augment, int origChar) {
314314
int cc = 0;
315315
for (CMapSegment segment : cmap) {
316316
int s = segment.getGlyphStartIndex();
317317
int e = s + (segment.getUnicodeEnd() - segment.getUnicodeStart());
318318
if ((gi >= s) && (gi <= e)) {
319319
cc = segment.getUnicodeStart() + (gi - s);
320-
break;
320+
if (origChar == -1 || cc == origChar) {
321+
break;
322+
}
321323
}
322324
}
323325
if ((cc == 0) && augment) {
@@ -327,7 +329,7 @@ private int findCharacterFromGlyphIndex(int gi, boolean augment) {
327329
}
328330

329331
private int findCharacterFromGlyphIndex(int gi) {
330-
return findCharacterFromGlyphIndex(gi, true);
332+
return findCharacterFromGlyphIndex(gi, true, -1);
331333
}
332334

333335
protected BitSet getGlyphIndices() {
@@ -704,11 +706,13 @@ private GlyphSequence mapCharsToGlyphs(CharSequence cs, List associations) {
704706
private CharSequence mapGlyphsToChars(GlyphSequence gs) {
705707
int ng = gs.getGlyphCount();
706708
int ccMissing = Typeface.NOT_FOUND;
709+
int[] charArr = gs.getCharacterArray(false);
707710
List<Character> chars = new ArrayList<Character>(gs.getUTF16CharacterCount());
708711

709712
for (int i = 0, n = ng; i < n; i++) {
710713
int gi = gs.getGlyph(i);
711-
int cc = findCharacterFromGlyphIndex(gi);
714+
//int cc = findCharacterFromGlyphIndex(gi);
715+
int cc = findCharacterFromGlyphIndex(gi, true, charArr[i]);
712716
if ((cc == 0) || (cc > 0x10FFFF)) {
713717
cc = ccMissing;
714718
log.warn("Unable to map glyph index " + gi

0 commit comments

Comments
 (0)