Module: Fontisan::Ufo::Compile::ItemVariationStore
- Defined in:
- lib/fontisan/ufo/compile/item_variation_store.rb
Overview
Shared builder for the ItemVariationStore structure used by HVAR, MVAR, and other variation tables.
The ItemVariationStore consists of:
1. A VariationRegionList (defines axis regions)
2. One or more ItemVariationData (delta sets per item)
Class Method Summary collapse
-
.build(axis_count:, master_count:, item_count:, deltas:) ⇒ String
ItemVariationStore bytes.
Class Method Details
.build(axis_count:, master_count:, item_count:, deltas:) ⇒ String
Returns ItemVariationStore bytes.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fontisan/ufo/compile/item_variation_store.rb', line 20 def self.build(axis_count:, master_count:, item_count:, deltas:) # Build regions: one per master, each with peak=1.0 on its axis regions = build_regions(axis_count, master_count) region_list = serialize_region_list(regions, axis_count) # Build ItemVariationData: one data block covering all items var_data = serialize_variation_data(item_count, master_count, deltas) # Assemble the store # Header layout: format(uint16) + variationRegionListOffset(uint32) # + itemVariationDataCount(uint16) + itemVariationDataOffsets[1](uint32) # = 2 + 4 + 2 + 4 = 12 bytes total before region list header_size = 8 # format(2) + regionListOffset(4) + itemVariationDataCount(2) offsets_array_size = 4 # one data block → one offset region_list_offset = header_size + offsets_array_size var_data_offset = region_list_offset + region_list.bytesize store = +"" store << [1].pack("n") # format = 1 store << [region_list_offset].pack("N") # variationRegionListOffset store << [1].pack("n") # itemVariationDataCount store << [var_data_offset].pack("N") # itemVariationDataOffsets[0] store << region_list store << var_data store end |