1
+ use crate :: hb:: set_digest:: { hb_set_digest_ext, hb_set_digest_t} ;
2
+
1
3
use super :: super :: SetDigest ;
2
4
use alloc:: vec:: Vec ;
3
5
use core:: ops:: Range ;
@@ -206,8 +208,10 @@ impl LookupCache {
206
208
}
207
209
let subtable = subtable_info. materialize ( data. table_data . as_bytes ( ) ) ?;
208
210
let ( coverage, coverage_offset) = subtable. coverage_and_offset ( ) ?;
209
- subtable_info. digest . insert_coverage ( & coverage) ;
210
- entry. digest . insert_coverage ( & coverage) ;
211
+ add_coverage_to_digest ( & coverage, & mut subtable_info. digest ) ;
212
+ add_coverage_to_digest ( & coverage, & mut entry. digest ) ;
213
+ // subtable_info.digest.insert_coverage(&coverage);
214
+ // entry.digest.insert_coverage(&coverage);
211
215
subtable_info. coverage_offset = coverage_offset;
212
216
self . subtables . push ( subtable_info) ;
213
217
entry. subtables_count += 1 ;
@@ -241,6 +245,24 @@ fn is_reversed(table_data: FontData, lookup: &Lookup<()>, lookup_offset: usize)
241
245
}
242
246
}
243
247
248
+ fn add_coverage_to_digest ( coverage : & CoverageTable , digest : & mut hb_set_digest_t ) {
249
+ match coverage {
250
+ CoverageTable :: Format1 ( table) => {
251
+ for glyph in table. glyph_array ( ) {
252
+ digest. add ( ttf_parser:: GlyphId ( glyph. get ( ) . to_u32 ( ) as _ ) ) ;
253
+ }
254
+ }
255
+ CoverageTable :: Format2 ( table) => {
256
+ for range in table. range_records ( ) {
257
+ let first = range. start_glyph_id ( ) . to_u32 ( ) ;
258
+ let last = range. end_glyph_id ( ) . to_u32 ( ) ;
259
+ let [ first, last] = [ first, last] . map ( |gid| ttf_parser:: GlyphId ( gid as _ ) ) ;
260
+ digest. add_range ( first, last) ;
261
+ }
262
+ }
263
+ }
264
+ }
265
+
244
266
/// Current state of a lookup cache entry.
245
267
#[ derive( Copy , Clone , PartialEq , Eq , Default , Debug ) ]
246
268
#[ repr( u8 ) ]
@@ -256,7 +278,7 @@ pub enum LookupState {
256
278
}
257
279
258
280
/// Cached information about a lookup.
259
- #[ derive( Copy , Clone , Default , Debug ) ]
281
+ #[ derive( Clone , Default , Debug ) ]
260
282
pub struct LookupInfo {
261
283
/// Current state of this lookup info entry.
262
284
pub state : LookupState ,
@@ -272,7 +294,7 @@ pub struct LookupInfo {
272
294
pub subtables_count : u16 ,
273
295
/// Bloom filter representing the set of glyphs from the primary
274
296
/// coverage of all subtables in the lookup.
275
- pub digest : SetDigest ,
297
+ pub digest : hb_set_digest_t ,
276
298
}
277
299
278
300
impl LookupInfo {
@@ -283,7 +305,7 @@ impl LookupInfo {
283
305
}
284
306
285
307
/// Cached information about a subtable.
286
- #[ derive( Copy , Clone , Debug ) ]
308
+ #[ derive( Clone , Debug ) ]
287
309
pub struct SubtableInfo {
288
310
/// Byte offset to the subtable from the base of the GSUB or GPOS
289
311
/// table.
@@ -296,7 +318,7 @@ pub struct SubtableInfo {
296
318
pub is_subst : bool ,
297
319
/// Original lookup type.
298
320
pub lookup_type : u8 ,
299
- pub digest : SetDigest ,
321
+ pub digest : hb_set_digest_t ,
300
322
}
301
323
302
324
impl SubtableInfo {
0 commit comments