class TTFunk::Subset::CodePage
A subset that uses standard code page encoding.
def covers?(character)
-
(Boolean)
-
Parameters:
-
character
(Integer
) -- Unicode codepoint
def covers?(character) !from_unicode(character).nil? end
def from_unicode(character)
-
(Integer, nil)
-
Parameters:
-
character
(Integer
) -- Unicode codepoint
def from_unicode(character) @from_unicode_cache[character] ||= (+'' << character).encode!(encoding).ord rescue Encoding::UndefinedConversionError nil end
def includes?(character)
-
(Boolean)
-
Parameters:
-
character
(Integer
) -- Unicode codepoint
def includes?(character) code = from_unicode(character) code && @subset[code] end
def initialize(original, code_page, encoding)
-
encoding
(Encoding, String, Symbol
) -- -
code_page
(Integer
) -- -
original
(TTFunk::File
) --
def initialize(original, code_page, encoding) super(original) @code_page = code_page @encoding = encoding @subset = Array.new(256) @from_unicode_cache = {} use(space_char_code) end
def mapping_cache
def mapping_cache @mapping_cache ||= {} end
def new_cmap_table
-
(TTFunk::Table::Cmap)
-
def new_cmap_table @new_cmap_table ||= begin mapping = {} @subset.each_with_index do |unicode, roman| mapping[roman] = unicode_cmap[unicode] end TTFunk::Table::Cmap.encode(mapping, :mac_roman) end end
def original_glyph_ids
-
(Array
-)
def original_glyph_ids ([0] + @subset.map { |unicode| unicode && unicode_cmap[unicode] }) .compact.uniq.sort end
def space_char_code
-
(Integer, nil)
-
def space_char_code @space_char_code ||= from_unicode(Unicode::SPACE_CHAR) end
def to_unicode_map
-
(Hash)
-
def to_unicode_map self.class.unicode_mapping_for(encoding) .select { |codepoint, _unicode| @subset[codepoint] } end
def unicode_mapping_for(encoding)
-
(Hash{Integer => Integer})
-
Parameters:
-
encoding
(Encoding, String, Symbol
) --
def unicode_mapping_for(encoding) mapping_cache[encoding] ||= (0..255).each_with_object({}) do |c, ret| codepoint = c.chr(encoding) .encode(Encoding::UTF_8, undef: :replace, replace: '') .codepoints .first ret[c] = codepoint if codepoint end end
def use(character)
-
(void)
-
Parameters:
-
character
(Integer
) -- Unicode codepoint
def use(character) @subset[from_unicode(character)] = character end