class TTFunk::Subset::Base

Constants

MICROSOFT_PLATFORM_ID
MS_SYMBOL_ENCODING_ID

Attributes

original[R]

Public Class Methods

new(original) click to toggle source
# File lib/ttfunk/subset/base.rb, line 23
def initialize(original)
  @original = original
end

Public Instance Methods

collect_glyphs(glyph_ids) click to toggle source
# File lib/ttfunk/subset/base.rb, line 56
def collect_glyphs(glyph_ids)
  collected = glyph_ids.each_with_object({}) do |id, h|
    h[id] = glyph_for(id)
  end

  additional_ids = collected.values
                            .select { |g| g && g.compound? }
                            .map(&:glyph_ids)
                            .flatten

  collected.update(collect_glyphs(additional_ids)) if additional_ids.any?

  collected
end
encode(options = {}) click to toggle source
# File lib/ttfunk/subset/base.rb, line 40
def encode(options = {})
  encoder_klass.new(original, self, options).encode
end
encoder_klass() click to toggle source
# File lib/ttfunk/subset/base.rb, line 44
def encoder_klass
  original.cff.exists? ? OTFEncoder : TTFEncoder
end
glyphs() click to toggle source
# File lib/ttfunk/subset/base.rb, line 52
def glyphs
  @glyphs ||= collect_glyphs(original_glyph_ids)
end
microsoft_symbol?() click to toggle source
# File lib/ttfunk/subset/base.rb, line 31
def microsoft_symbol?
  new_cmap_table[:platform_id] == MICROSOFT_PLATFORM_ID &&
    new_cmap_table[:encoding_id] == MS_SYMBOL_ENCODING_ID
end
new_to_old_glyph() click to toggle source
# File lib/ttfunk/subset/base.rb, line 91
def new_to_old_glyph
  @new_to_old_glyph ||= old_to_new_glyph.invert
end
old_to_new_glyph() click to toggle source
# File lib/ttfunk/subset/base.rb, line 71
def old_to_new_glyph
  @old_to_new_glyph ||= begin
    charmap = new_cmap_table[:charmap]
    old_to_new = charmap.each_with_object(0 => 0) do |(_, ids), map|
      map[ids[:old]] = ids[:new]
    end

    next_glyph_id = new_cmap_table[:max_glyph_id]

    glyphs.keys.each do |old_id|
      unless old_to_new.key?(old_id)
        old_to_new[old_id] = next_glyph_id
        next_glyph_id += 1
      end
    end

    old_to_new
  end
end
to_unicode_map() click to toggle source
# File lib/ttfunk/subset/base.rb, line 36
def to_unicode_map
  {}
end
unicode?() click to toggle source
# File lib/ttfunk/subset/base.rb, line 27
def unicode?
  false
end
unicode_cmap() click to toggle source
# File lib/ttfunk/subset/base.rb, line 48
def unicode_cmap
  @unicode_cmap ||= @original.cmap.unicode.first
end

Private Instance Methods

glyph_for(glyph_id) click to toggle source
# File lib/ttfunk/subset/base.rb, line 97
def glyph_for(glyph_id)
  if original.cff.exists?
    original
      .cff
      .top_index[0]
      .charstrings_index[glyph_id]
      .glyph
  else
    original.glyph_outlines.for(glyph_id)
  end
end