class TTFunk::Subset::Base
Base
subset.
@api private
Constants
- MICROSOFT_PLATFORM_ID
-
Microsoft Platform ID
- MS_SYMBOL_ENCODING_ID
-
Symbol Encoding ID for Microsoft Platform
Attributes
Original font
@return [TTFunk::File]
Public Class Methods
Source
# File lib/ttfunk/subset/base.rb, line 33 def initialize(original) @original = original end
@param original [TTFunk::File]
Public Instance Methods
Source
# File lib/ttfunk/subset/base.rb, line 98 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
Get glyphs by their IDs in the original font.
@param glyph_ids [Array<Integer>] @return [Hash{Integer => TTFunk::Table::Glyf::Simple
,
TTFunk::Table::Glyf::Compound>] if original is a TrueType font
@return [Hash{Integer => TTFunk::Table::Cff::Charstring
}] if original is
a CFF-based OpenType font
Source
# File lib/ttfunk/subset/base.rb, line 63 def encode(options = {}) encoder_klass.new(original, self, options).encode end
Encode this subset into a binary font representation.
@param options [Hash] @return [String]
Source
# File lib/ttfunk/subset/base.rb, line 70 def encoder_klass original.cff.exists? ? OTFEncoder : TTFEncoder end
Encoder class for this subset.
@return [TTFunk::TTFEncoder, TTFunk::OTFEncoder
]
Source
# File lib/ttfunk/subset/base.rb, line 87 def glyphs @glyphs ||= collect_glyphs(original_glyph_ids) end
Get glyphs in this subset.
@return [Hash{Integer => TTFunk::Table::Glyf::Simple
,
TTFunk::Table::Glyf::Compound}] if original is a TrueType font
@return [Hash{Integer => TTFunk::Table::Cff::Charstring
] if original is
a CFF-based OpenType font
Source
# File lib/ttfunk/subset/base.rb, line 47 def microsoft_symbol? new_cmap_table[:platform_id] == MICROSOFT_PLATFORM_ID && new_cmap_table[:encoding_id] == MS_SYMBOL_ENCODING_ID end
Does this subset use Microsoft Symbolic encoding?
@return [Boolean]
Source
# File lib/ttfunk/subset/base.rb, line 142 def new_to_old_glyph @new_to_old_glyph ||= old_to_new_glyph.invert end
Glyph ID mapping from this subset to the original font.
@return [Hash{Integer => Integer}]
Source
# File lib/ttfunk/subset/base.rb, line 117 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
Glyph ID mapping from the original font to this subset.
@return [Hash{Integer => Integer}]
Source
# File lib/ttfunk/subset/base.rb, line 55 def to_unicode_map {} end
Get a mapping from this subset to Unicode
.
@return [Hash{Integer => Integer}]
Source
# File lib/ttfunk/subset/base.rb, line 40 def unicode? false end
Is this Unicode-based subset?
@return [Boolean]
Source
# File lib/ttfunk/subset/base.rb, line 77 def unicode_cmap @unicode_cmap ||= @original.cmap.unicode.first end
Get the first Unicode
cmap from the original font.
@return [TTFunk::Table::Cmap::Subtable]
Private Instance Methods
Source
# File lib/ttfunk/subset/base.rb, line 148 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