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)

Returns:
  • (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?

Returns:
  • (Boolean) -
def fixed_pitch?
  @fixed_pitch != 0
end

def glyph_for(_code)

Returns:
  • (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)

Returns:
  • (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