@@ -310,14 +310,16 @@ private int createPrivateUseMapping(int gi) {
310
310
* @return unicode scalar value
311
311
*/
312
312
// [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 ) {
314
314
int cc = 0 ;
315
315
for (CMapSegment segment : cmap ) {
316
316
int s = segment .getGlyphStartIndex ();
317
317
int e = s + (segment .getUnicodeEnd () - segment .getUnicodeStart ());
318
318
if ((gi >= s ) && (gi <= e )) {
319
319
cc = segment .getUnicodeStart () + (gi - s );
320
- break ;
320
+ if (origChar == -1 || cc == origChar ) {
321
+ break ;
322
+ }
321
323
}
322
324
}
323
325
if ((cc == 0 ) && augment ) {
@@ -327,7 +329,7 @@ private int findCharacterFromGlyphIndex(int gi, boolean augment) {
327
329
}
328
330
329
331
private int findCharacterFromGlyphIndex (int gi ) {
330
- return findCharacterFromGlyphIndex (gi , true );
332
+ return findCharacterFromGlyphIndex (gi , true , - 1 );
331
333
}
332
334
333
335
protected BitSet getGlyphIndices () {
@@ -704,11 +706,13 @@ private GlyphSequence mapCharsToGlyphs(CharSequence cs, List associations) {
704
706
private CharSequence mapGlyphsToChars (GlyphSequence gs ) {
705
707
int ng = gs .getGlyphCount ();
706
708
int ccMissing = Typeface .NOT_FOUND ;
709
+ int [] charArr = gs .getCharacterArray (false );
707
710
List <Character > chars = new ArrayList <Character >(gs .getUTF16CharacterCount ());
708
711
709
712
for (int i = 0 , n = ng ; i < n ; i ++) {
710
713
int gi = gs .getGlyph (i );
711
- int cc = findCharacterFromGlyphIndex (gi );
714
+ //int cc = findCharacterFromGlyphIndex(gi);
715
+ int cc = findCharacterFromGlyphIndex (gi , true , charArr [i ]);
712
716
if ((cc == 0 ) || (cc > 0x10FFFF )) {
713
717
cc = ccMissing ;
714
718
log .warn ("Unable to map glyph index " + gi
0 commit comments