Class: Fontisan::Tables::VariationCommon::ItemVariationStore
- Inherits:
-
Binary::BaseRecord
- Object
- BinData::Record
- Binary::BaseRecord
- Fontisan::Tables::VariationCommon::ItemVariationStore
- Defined in:
- lib/fontisan/tables/variation_common.rb
Overview
Item variation store
Hierarchical storage for delta values. Contains variation data entries and a region list that defines variation regions in design space.
Used by: HVAR, VVAR, MVAR tables
Instance Method Summary collapse
-
#delta_set(outer_index, inner_index) ⇒ Array<Integer>?
Get delta set for specific item.
-
#item_variation_data_entries ⇒ Array<ItemVariationData>
Parse all item variation data entries.
-
#item_variation_data_offsets ⇒ Array<Integer>
Parse item variation data offsets.
-
#variation_region_list ⇒ VariationRegionList?
Parse variation region list.
Methods inherited from Binary::BaseRecord
Instance Method Details
#delta_set(outer_index, inner_index) ⇒ Array<Integer>?
Get delta set for specific item
263 264 265 266 267 268 269 270 |
# File 'lib/fontisan/tables/variation_common.rb', line 263 def delta_set(outer_index, inner_index) return nil if outer_index >= item_variation_data_count entry = item_variation_data_entries[outer_index] return nil if entry.nil? || inner_index >= entry.item_count entry.delta_sets[inner_index] end |
#item_variation_data_entries ⇒ Array<ItemVariationData>
Parse all item variation data entries
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/fontisan/tables/variation_common.rb', line 241 def item_variation_data_entries return @data_entries if @data_entries return @data_entries = [] if item_variation_data_count.zero? data = raw_data offsets = item_variation_data_offsets @data_entries = offsets.map do |data_offset| next nil if data_offset >= data.bytesize entry_data = data.byteslice(data_offset..-1) ItemVariationData.read(entry_data) end.compact rescue StandardError @data_entries = [] end |
#item_variation_data_offsets ⇒ Array<Integer>
Parse item variation data offsets
223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
# File 'lib/fontisan/tables/variation_common.rb', line 223 def item_variation_data_offsets return @data_offsets if @data_offsets return @data_offsets = [] if item_variation_data_count.zero? data = raw_data offset = 8 # After header fields @data_offsets = Array.new(item_variation_data_count) do |i| offset_pos = offset + (i * 4) next nil if offset_pos + 4 > data.bytesize data.byteslice(offset_pos, 4).unpack1("N") end.compact end |
#variation_region_list ⇒ VariationRegionList?
Parse variation region list
205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/fontisan/tables/variation_common.rb', line 205 def variation_region_list return @variation_region_list if defined?(@variation_region_list) return @variation_region_list = nil if variation_region_list_offset.zero? data = raw_data offset = variation_region_list_offset return @variation_region_list = nil if offset >= data.bytesize region_data = data.byteslice(offset..-1) @variation_region_list = VariationRegionList.read(region_data) rescue StandardError @variation_region_list = nil end |