Sha256: e997ad700b3e3e0a45ee64c5b9a6d6e7a1e74258153818328cc5bd54593887ef
Contents?: true
Size: 1.69 KB
Versions: 4
Compression:
Stored size: 1.69 KB
Contents
# frozen_string_literal: true require_relative '../../reader' module TTFunk class Table class Kern class Format0 include Reader attr_reader :attributes attr_reader :pairs def initialize(attributes = {}) @attributes = attributes num_pairs, *pairs = attributes.delete(:data).unpack('nx6n*') @pairs = {} num_pairs.times do |i| # sanity check, in case there's a bad length somewhere break if i * 3 + 2 > pairs.length left = pairs[i * 3] right = pairs[i * 3 + 1] value = to_signed(pairs[i * 3 + 2]) @pairs[[left, right]] = value end end def vertical? @attributes[:vertical] end def horizontal? !vertical? end def cross_stream? @attributes[:cross] end def recode(mapping) subset = [] pairs.each do |(left, right), value| if mapping[left] && mapping[right] subset << [mapping[left], mapping[right], value] end end return nil if subset.empty? num_pairs = subset.length search_range = 2 * 2**(Math.log(num_pairs) / Math.log(2)).to_i entry_selector = (Math.log(search_range / 2) / Math.log(2)).to_i range_shift = (2 * num_pairs) - search_range [ attributes[:version], num_pairs * 6 + 14, attributes[:coverage], num_pairs, search_range, entry_selector, range_shift, subset ].flatten.pack('n*') end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ttfunk-1.6.2.1 | lib/ttfunk/table/kern/format0.rb |
ttfunk-1.6.2 | lib/ttfunk/table/kern/format0.rb |
ttfunk-1.6.1 | lib/ttfunk/table/kern/format0.rb |
ttfunk-1.6.0 | lib/ttfunk/table/kern/format0.rb |