private void remapComposite ( FontFileReader in , Map glyphs , int glyphOffset , Integer glyphIdx ) throws IOException { int offset = glyphOffset + ( int ) mtxTab [ glyphIdx . intValue ( ) ] . getOffset ( ) + 10 ; Integer compositeIdx = null ; int flags = 0 ; boolean moreComposites = true ; while ( moreComposites ) { flags = in . readTTFUShort ( offset ) ; compositeIdx = new Integer ( in . readTTFUShort ( offset + 2 ) ) ; Integer newIdx = ( Integer ) glyphs . get ( compositeIdx ) ; if ( newIdx == null ) { // This errormessage would look much better // if the fontname was printed to //log.error("An embedded font " // + "contains bad glyph data. " // + "Characters might not display " // + "correctly."); moreComposites = false ; continue ; } in . writeTTFUShort ( offset + 2 , newIdx . intValue ( ) ) ; offset += 4 ; if ( ( flags & 1 ) > 0 ) { // ARG_1_AND_ARG_2_ARE_WORDS offset += 4 ; } else { offset += 2 ; } if ( ( flags & 8 ) > 0 ) { offset += 2 ; // WE_HAVE_A_SCALE } else if ( ( flags & 64 ) > 0 ) { offset += 4 ; // WE_HAVE_AN_X_AND_Y_SCALE } else if ( ( flags & 128 ) > 0 ) { offset += 8 ; // WE_HAVE_A_TWO_BY_TWO } if ( ( flags & 32 ) > 0 ) { moreComposites = true ; } else { moreComposites = false ; } } }
Rewrite all compositepointers in glyphindex glyphIdx