class TTFunk::Subset::Unicode8Bit
An 8-bit Unicode-based subset. It can include any Unicode
character but limits number of characters so that the could be encoded by a single byte.
Public Class Methods
new(original)
click to toggle source
@param original [TTFunk::File]
Calls superclass method
TTFunk::Subset::Base::new
# File lib/ttfunk/subset/unicode_8bit.rb, line 12 def initialize(original) super @subset = { 0x20 => 0x20 } @unicodes = { 0x20 => 0x20 } @next = 0x21 # apparently, PDF's don't like to use chars between 0-31 end
Public Instance Methods
covers?(character)
click to toggle source
Can this subset include the character?
@param character [Integer] Unicode
codepoint @return [Boolean]
# File lib/ttfunk/subset/unicode_8bit.rb, line 49 def covers?(character) @unicodes.key?(character) || @next < 256 end
from_unicode(character)
click to toggle source
includes?(character)
click to toggle source
Does this subset actually has the character?
@param character [Integer] Unicode
codepoint @return [Boolean]
# File lib/ttfunk/subset/unicode_8bit.rb, line 57 def includes?(character) @unicodes.key?(character) end
new_cmap_table()
click to toggle source
Get ‘cmap` table for this subset.
@return [TTFunk::Table::Cmap]
# File lib/ttfunk/subset/unicode_8bit.rb, line 72 def new_cmap_table @new_cmap_table ||= begin mapping = @subset.each_with_object({}) do |(code, unicode), map| map[code] = unicode_cmap[unicode] map end # since we're mapping a subset of the unicode glyphs into an # arbitrary 256-character space, the actual encoding we're # using is irrelevant. We choose MacRoman because it's a 256-character # encoding that happens to be well-supported in both TTF and # PDF formats. TTFunk::Table::Cmap.encode(mapping, :mac_roman) end end
original_glyph_ids()
click to toggle source
Get the list of Glyph IDs from the original font that are in this subset.
@return [Array<Integer>]
# File lib/ttfunk/subset/unicode_8bit.rb, line 94 def original_glyph_ids ([0] + @unicodes.keys.map { |unicode| unicode_cmap[unicode] }).uniq.sort end
to_unicode_map()
click to toggle source
Get a mapping from this subset to Unicode
.
@return [Hash{Integer => Integer}]
# File lib/ttfunk/subset/unicode_8bit.rb, line 29 def to_unicode_map @subset.dup end
unicode?()
click to toggle source
Is this a Unicode-based subset?
@return [true]
# File lib/ttfunk/subset/unicode_8bit.rb, line 22 def unicode? true end
use(character)
click to toggle source
Add a character to subset.
@param character [Integer] Unicode
codepoint @return [void]
# File lib/ttfunk/subset/unicode_8bit.rb, line 37 def use(character) unless @unicodes.key?(character) @subset[@next] = character @unicodes[character] = @next @next += 1 end end