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 94
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 72
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.each_key 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 100
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