Module: TTFunk::Table::Cmap::Format12
- Defined in:
- lib/ttfunk/table/cmap/format12.rb
Overview
Format 12: Segmented coverage.
This module conditionally extends Subtable.
Instance Attribute Summary collapse
-
#code_map ⇒ Hash{Integer => Integer}
readonly
Code map.
-
#language ⇒ Integer
readonly
Language.
Class Method Summary collapse
-
.encode(charmap) ⇒ Hash
Encode the encoding record to format 12.
Instance Method Summary collapse
-
#[](code) ⇒ Integer
Get glyph ID for character code.
-
#supported? ⇒ true
Is this encoding record format supported?.
Instance Attribute Details
#code_map ⇒ Hash{Integer => Integer} (readonly)
Code map.
16 17 18 |
# File 'lib/ttfunk/table/cmap/format12.rb', line 16 def code_map @code_map end |
#language ⇒ Integer (readonly)
Language.
12 13 14 |
# File 'lib/ttfunk/table/cmap/format12.rb', line 12 def language @language end |
Class Method Details
.encode(charmap) ⇒ Hash
Encode the encoding record to format 12.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ttfunk/table/cmap/format12.rb', line 30 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.each_with_object({}) do |code, map| 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]] end subtable = [ 12, 0, 16 + (12 * range_lengths.size), 0, range_lengths.size, ].pack('nnNNN') range_lengths.each_with_index do |length, i| firstglyph = range_firstglyphs[i] firstcode = range_firstcodes[i] subtable << [ firstcode, firstcode + length - 1, firstglyph, ].pack('NNN') end { charmap: new_map, subtable: subtable, max_glyph_id: next_id + 1 } end |
Instance Method Details
#[](code) ⇒ Integer
Get glyph ID for character code.
72 73 74 |
# File 'lib/ttfunk/table/cmap/format12.rb', line 72 def [](code) @code_map[code] || 0 end |
#supported? ⇒ true
Is this encoding record format supported?
79 80 81 |
# File 'lib/ttfunk/table/cmap/format12.rb', line 79 def supported? true end |