lib/ttfunk/table/name.rb in ttfunk-1.4.0 vs lib/ttfunk/table/name.rb in ttfunk-1.5.0
- old
+ new
@@ -1,6 +1,7 @@
require_relative '../table'
+require 'digest/sha1'
module TTFunk
class Table
class Name < Table
class String < ::String
@@ -14,13 +15,13 @@
@encoding_id = encoding_id
@language_id = language_id
end
def strip_extended
- stripped = gsub(/[\x00-\x19\x80-\xff]/n, "")
- stripped = "[not-postscript]" if stripped.empty?
- return stripped
+ stripped = gsub(/[\x00-\x19\x80-\xff]/n, '')
+ stripped = '[not-postscript]' if stripped.empty?
+ stripped
end
end
attr_reader :strings
@@ -41,85 +42,93 @@
attr_reader :preferred_family
attr_reader :preferred_subfamily
attr_reader :compatible_full
attr_reader :sample_text
- @@subset_tag = "AAAAAA"
+ def self.encode(names, key = '')
+ tag = Digest::SHA1.hexdigest(key)[0, 6]
- def self.encode(names)
- tag = @@subset_tag.dup
- @@subset_tag.succ!
+ postscript_name = Name::String.new(
+ "#{tag}+#{names.postscript_name}", 1, 0, 0
+ )
- 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, (_, list)| sum + list.length }
- table = [0, str_count, 6 + 12 * str_count].pack("n*")
- strtable = ""
+ 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*")
+ table << [
+ string.platform_id, string.encoding_id, string.language_id, id,
+ string.length, strtable.length
+ ].pack('n*')
strtable << string
end
end
table << strtable
end
def postscript_name
return @postscript_name if @postscript_name
- font_family.first || "unnamed"
+ font_family.first || 'unnamed'
end
private
- def parse!
- count, string_offset = read(6, "x2n*")
+ def parse!
+ count, string_offset = read(6, 'x2n*')
- 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
+ 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] = [] }
+ @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]
+ 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]
+ # should only be ONE postscript name
+ @postscript_name = @strings[6].first.strip_extended
+ @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
end
end
end