class TTFunk::Table::Post

Attributes

fixed_pitch[R]
format[R]
italic_angle[R]
max_mem_type1[R]
max_mem_type42[R]
min_mem_type1[R]
min_mem_type42[R]
subtable[R]
underline_position[R]
underline_thickness[R]

Public Class Methods

encode(post, mapping) click to toggle source
# File lib/ttfunk/table/post.rb, line 20
def self.encode(post, mapping)
  return unless post.exists?

  post.recode(mapping)
end

Public Instance Methods

fixed_pitch?() click to toggle source
# File lib/ttfunk/table/post.rb, line 26
def fixed_pitch?
  @fixed_pitch != 0
end
glyph_for(_code) click to toggle source
# File lib/ttfunk/table/post.rb, line 30
def glyph_for(_code)
  '.notdef'
end
recode(mapping) click to toggle source
# File lib/ttfunk/table/post.rb, line 34
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

Private Instance Methods

parse!() click to toggle source
# File lib/ttfunk/table/post.rb, line 64
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
parse_format!() click to toggle source
# File lib/ttfunk/table/post.rb, line 87
def parse_format!
  warn(
    Kernel.format(
      'postscript table format 0x%08X is not supported', @format
    )
  )
end