# File lib/ttfunk/table/cmap/format12.rb, line 9 def self.encode(charmap) next_id = 0 glyph_map = { 0 => 0 } range_firstglyphs, range_firstcodes, range_lengths = [], [], [] last_glyph = last_code = -999 new_map = charmap.keys.sort.inject({}) do |map, code| glyph_map[charmap[code]] ||= next_id += 1 map[code] = { :old => charmap[code], :new => glyph_map[charmap[code]] } if code > last_code+1 || glyph_map[charmap[code]] > last_glyph+1 range_firstcodes << code range_firstglyphs << glyph_map[charmap[code]] range_lengths << 1 else range_lengths.push(range_lengths.pop) + 1 end last_code = code last_glyph = glyph_map[charmap[code]] map end subtable = [12, 0, 16+12*range_lengths.size, 0, range_lengths.size].pack('nnNNN') range_lengths.each_with_index do |length, i| firstglyph, firstcode = range_firstglyphs[i], range_firstcodes[i] subtable << [firstcode, firstcode+length-1, firstglyph].pack('NNN') end { :charmap => new_map, :subtable => subtable, :max_glyph_id => next_id+1 } end
Generated with the Darkfish Rdoc Generator 2.