@@ -115,26 +115,39 @@ protected function _parse(){
115
115
116
116
function _encode (){
117
117
$ font = $ this ->getFont ();
118
+
118
119
$ 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
119
131
120
132
$ segments = array ();
121
-
122
- $ i = count ($ segments )-1 ;
123
- $ j = $ i +1 ;
124
- $ prevCode = 0 ;
125
- $ glyphIndexArray = array ();
126
133
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
+ ) {
129
143
$ i ++;
130
144
$ segments [$ i ] = array ();
131
145
}
132
146
133
- $ segments [$ i ][] = array ($ code , $ j );
147
+ $ segments [$ i ][] = array ($ code , $ gid );
134
148
135
- $ glyphIndexArray [] = $ code ;
136
- $ j ++;
137
149
$ prevCode = $ code ;
150
+ $ prevGid = $ gid ;
138
151
}
139
152
140
153
$ segments [][] = array (0xFFFF , 0xFFFF );
@@ -184,7 +197,7 @@ function _encode(){
184
197
"endCode " => $ endCode ,
185
198
"idDelta " => $ idDelta ,
186
199
"idRangeOffset " => $ idRangeOffset ,
187
- "glyphIndexArray " => $ glyphIndexArray ,
200
+ "glyphIndexArray " => $ newGlyphIndexArray ,
188
201
)
189
202
);
190
203
@@ -217,7 +230,7 @@ function _encode(){
217
230
$ length += $ font ->w (array (self ::uint16, $ segCount ), $ subtable ["startCode " ]);
218
231
$ length += $ font ->w (array (self ::int16, $ segCount ), $ subtable ["idDelta " ]);
219
232
$ 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 " ]) );
221
234
222
235
$ after_subtable = $ font ->pos ();
223
236
0 commit comments