@@ -115,26 +115,39 @@ protected function _parse(){
115115
116116 function _encode (){
117117 $ font = $ this ->getFont ();
118+
118119 $ subset = $ font ->getSubset ();
120+ $ glyphIndexArray = $ font ->getUnicodeCharMap ();
121+
122+ $ newGlyphIndexArray = array ();
123+ foreach ($ glyphIndexArray as $ code => $ gid ) {
124+ $ new_gid = array_search ($ gid , $ subset );
125+ if ($ new_gid !== false ) {
126+ $ newGlyphIndexArray [$ code ] = $ new_gid ;
127+ }
128+ }
129+
130+ ksort ($ newGlyphIndexArray ); // Sort by char code
119131
120132 $ segments = array ();
121-
122- $ i = count ($ segments )-1 ;
123- $ j = $ i +1 ;
124- $ prevCode = 0 ;
125- $ glyphIndexArray = array ();
126133
127- foreach ($ subset as $ code => $ gid ) {
128- if ($ prevCode + 1 != $ code ) {
134+ $ i = -1 ;
135+ $ prevCode = 0xFFFF ;
136+ $ prevGid = 0xFFFF ;
137+
138+ foreach ($ newGlyphIndexArray as $ code => $ gid ) {
139+ if (
140+ $ prevCode + 1 != $ code ||
141+ $ prevGid + 1 != $ gid
142+ ) {
129143 $ i ++;
130144 $ segments [$ i ] = array ();
131145 }
132146
133- $ segments [$ i ][] = array ($ code , $ j );
147+ $ segments [$ i ][] = array ($ code , $ gid );
134148
135- $ glyphIndexArray [] = $ code ;
136- $ j ++;
137149 $ prevCode = $ code ;
150+ $ prevGid = $ gid ;
138151 }
139152
140153 $ segments [][] = array (0xFFFF , 0xFFFF );
@@ -184,7 +197,7 @@ function _encode(){
184197 "endCode " => $ endCode ,
185198 "idDelta " => $ idDelta ,
186199 "idRangeOffset " => $ idRangeOffset ,
187- "glyphIndexArray " => $ glyphIndexArray ,
200+ "glyphIndexArray " => $ newGlyphIndexArray ,
188201 )
189202 );
190203
@@ -217,7 +230,7 @@ function _encode(){
217230 $ length += $ font ->w (array (self ::uint16, $ segCount ), $ subtable ["startCode " ]);
218231 $ length += $ font ->w (array (self ::int16, $ segCount ), $ subtable ["idDelta " ]);
219232 $ length += $ font ->w (array (self ::uint16, $ segCount ), $ subtable ["idRangeOffset " ]);
220- $ length += $ font ->w (array (self ::uint16, $ segCount ), $ subtable ["glyphIndexArray " ]);
233+ $ length += $ font ->w (array (self ::uint16, $ segCount ), array_values ( $ subtable ["glyphIndexArray " ]) );
221234
222235 $ after_subtable = $ font ->pos ();
223236
0 commit comments