class TTFunk::Table::Post
@see TTFunk::Table::Post::Format40
@see TTFunk::Table::Post::Format30
@see TTFunk::Table::Post::Format20
@see TTFunk::Table::Post::Format10
This class can be extended with version-specific modules.
PostScript (‘post`) table.
def self.encode(post, mapping)
-
(String, nil)
-
Parameters:
-
mapping
(Hash{Integer => Integer}
) -- keys are new glyph IDs, values -
post
(TTFunk::Table::Post
) --
def self.encode(post, mapping) return if post.nil? post.recode(mapping) end
def fixed_pitch?
-
(Boolean)
-
def fixed_pitch? @fixed_pitch != 0 end
def glyph_for(_code)
-
(String)
-
Parameters:
-
_code
(Integer
) --
def glyph_for(_code) '.notdef' end
def parse!
def parse! @format, @italic_angle, @underline_position, @underline_thickness, @fixed_pitch, @min_mem_type42, @max_mem_type42, @min_mem_type1, @max_mem_type1 = read(32, 'N2n2N*') @subtable = case @format when 0x00010000 extend(Post::Format10) when 0x00020000 extend(Post::Format20) when 0x00025000 raise NotImplementedError, 'Post format 2.5 is not supported by TTFunk' when 0x00030000 extend(Post::Format30) when 0x00040000 extend(Post::Format40) end parse_format! end
def parse_format!
def parse_format! warn(Kernel.format('postscript table format 0x%08X is not supported', @format)) end
def recode(mapping)
-
(String)
-
Parameters:
-
mapping
(Hash{Integer => Integer}
) -- keys are new glyph IDs, values
def recode(mapping) return raw if format == 0x00030000 table = raw[0, 32] table[0, 4] = [0x00020000].pack('N') index = [] strings = [] mapping.keys.sort.each do |new_id| post_glyph = glyph_for(mapping[new_id]) position = Format10::POSTSCRIPT_GLYPHS.index(post_glyph) if position index << position else index << (257 + strings.length) strings << post_glyph end end table << [mapping.length, *index].pack('n*') strings.each do |string| table << [string.length, string].pack('CA*') end table end