class TTFunk::Subset::CodePage

A subset that uses standard code page encoding.

def covers?(character)

Returns:
  • (Boolean) -

Parameters:
  • character (Integer) -- Unicode codepoint
def covers?(character)
  !from_unicode(character).nil?
end

def from_unicode(character)

Returns:
  • (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)

Returns:
  • (Boolean) -

Parameters:
  • character (Integer) -- Unicode codepoint
def includes?(character)
  code = from_unicode(character)
  code && @subset[code]
end

def initialize(original, code_page, encoding)

Parameters:
  • 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

Returns:
  • (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

Returns:
  • (Array) -
def original_glyph_ids
  ([0] + @subset.map { |unicode| unicode && unicode_cmap[unicode] })
    .compact.uniq.sort
end

def space_char_code

Returns:
  • (Integer, nil) -
def space_char_code
  @space_char_code ||= from_unicode(Unicode::SPACE_CHAR)
end

def to_unicode_map

Returns:
  • (Hash) -
def to_unicode_map
  self.class.unicode_mapping_for(encoding)
    .select { |codepoint, _unicode| @subset[codepoint] }
end

def unicode_mapping_for(encoding)

Returns:
  • (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)

Returns:
  • (void) -

Parameters:
  • character (Integer) -- Unicode codepoint
def use(character)
  @subset[from_unicode(character)] = character
end