Module: TTFunk::Table::Cmap::Format06
- Defined in:
- lib/ttfunk/table/cmap/format06.rb
Overview
Format 6: Trimmed table mapping.
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 6.
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/format06.rb', line 16 def code_map @code_map end |
#language ⇒ Integer (readonly)
Language.
12 13 14 |
# File 'lib/ttfunk/table/cmap/format06.rb', line 12 def language @language end |
Class Method Details
.encode(charmap) ⇒ Hash
Encode the encoding record to format 6.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/ttfunk/table/cmap/format06.rb', line 30 def self.encode(charmap) next_id = 0 glyph_map = { 0 => 0 } sorted_chars = charmap.keys.sort low_char = sorted_chars.first high_char = sorted_chars.last entry_count = 1 + high_char - low_char glyph_indexes = Array.new(entry_count, 0) 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]] } glyph_indexes[code - low_char] = glyph_map[charmap[code]] end subtable = [ 6, 10 + (entry_count * 2), 0, low_char, entry_count, *glyph_indexes, ].pack('n*') { charmap: new_map, subtable: subtable, max_glyph_id: next_id + 1 } end |
Instance Method Details
#[](code) ⇒ Integer
Get glyph ID for character code.
58 59 60 |
# File 'lib/ttfunk/table/cmap/format06.rb', line 58 def [](code) @code_map[code] || 0 end |
#supported? ⇒ true
Is this encoding record format supported?
65 66 67 |
# File 'lib/ttfunk/table/cmap/format06.rb', line 65 def supported? true end |