module HexaPDF::Font::TrueType::Table::CmapSubtable::Format12
def self.mapper(groups) #:nodoc:
arrays.
The parameter +groups+ is an array containing [start_code, end_code, start_glyph_id]
def self.mapper(groups) #:nodoc: code_map = Hash.new do |h, code| group = groups.bsearch {|g| g[1] >= code } h[code] = group[2] + (code - group[0]) if group && group[0] <= code end groups_by_gid = groups.sort_by {|g| g[2] } gid_map = Hash.new do |h, gid| group = groups_by_gid.bsearch {|g| g[2] + g[1] - g[0] >= gid } h[gid] = group[0] + (gid - group[2]) if group && group[2] <= gid end [code_map, gid_map] end
def self.parse(io, _length)
returns the contained code map.
Parses the format 12 cmap subtable from the given IO at the current position and
Format12.parse(io, length) -> code_map
:call-seq:
def self.parse(io, _length) mapper(Array.new(io.read(4).unpack1('N')) { io.read(12).unpack('N3') }) end