class TTFunk::Table::Name

Attributes

compatible_full[R]
description[R]
designer[R]
designer_url[R]
font_family[R]
font_name[R]
font_subfamily[R]
license[R]
license_url[R]
manufacturer[R]
preferred_family[R]
preferred_subfamily[R]
sample_text[R]
strings[R]
trademark[R]
unique_subfamily[R]
vendor_url[R]
version[R]

Public Class Methods

encode(names) click to toggle source
# File lib/ttfunk/table/name.rb, line 48
def self.encode(names)
  tag = @@subset_tag.dup
  @@subset_tag.succ!

  postscript_name = Name::String.new("#{tag}+#{names.postscript_name}", 1, 0, 0)

  strings = names.strings.dup
  strings[6] = [postscript_name]
  str_count = strings.inject(0) { |sum, (id, list)| sum + list.length }

  table = [0, str_count, 6 + 12 * str_count].pack("n*")
  strtable = ""

  strings.each do |id, list|
    list.each do |string|
      table << [string.platform_id, string.encoding_id, string.language_id, id, string.length, strtable.length].pack("n*")
      strtable << string
    end
  end

  table << strtable
end

Public Instance Methods

postscript_name() click to toggle source
# File lib/ttfunk/table/name.rb, line 71
def postscript_name
  return @postscript_name if @postscript_name
  font_family.first || "unnamed"
end

Private Instance Methods

parse!() click to toggle source
# File lib/ttfunk/table/name.rb, line 78
def parse!
  format, count, string_offset = read(6, "n*")

  entries = []
  count.times do
    platform, encoding, language, id, length, start_offset = read(12, "n*")
    entries << {
      :platform_id => platform,
      :encoding_id => encoding,
      :language_id => language,
      :name_id => id,
      :length => length,
      :offset => offset + string_offset + start_offset
    }
  end

  @strings = Hash.new { |h,k| h[k] = [] }

  count.times do |i|
    io.pos = entries[i][:offset]
    text = io.read(entries[i][:length])
    @strings[entries[i][:name_id]] << Name::String.new(text,
      entries[i][:platform_id], entries[i][:encoding_id], entries[i][:language_id])
  end

  @copyright = @strings[0]
  @font_family = @strings[1]
  @font_subfamily = @strings[2]
  @unique_subfamily = @strings[3]
  @font_name = @strings[4]
  @version = @strings[5]
  @postscript_name = @strings[6].first.strip_extended # should only be ONE postscript name
  @trademark = @strings[7]
  @manufacturer = @strings[8]
  @designer = @strings[9]
  @description = @strings[10]
  @vendor_url = @strings[11]
  @designer_url = @strings[12]
  @license = @strings[13]
  @license_url = @strings[14]
  @preferred_family = @strings[16]
  @preferred_subfamily = @strings[17]
  @compatible_full = @strings[18]
  @sample_text = @strings[19]
end