def self.font_information(filename)
File.open(filename, "r") do |f|
x = f.read(12)
table_count = x[4] * 256 + x[5]
tables = f.read(table_count * 16)
offset, length = table_count.times do |index|
start = index * 16
if tables[start..start+3] == 'name'
break tables[start+8..start+15].unpack("NN")
end
end
return unless length
f.seek(offset)
data = f.read(length)
format, name_count, string_offset = data[0..5].unpack("nnn")
names = {}
name_count.times do |index|
start = 6 + index * 12
platform_id, platform_specific_id, language_id, name_id, length, offset = data[start..start+11].unpack("nnnnnn")
next unless language_id == 0
next unless name_id == 1 || name_id == 2
offset += string_offset
field = data[offset..offset+length-1]
names[name_id] = if platform_id == 0
begin
Iconv.iconv('UTF-8', 'UTF-16', field)
rescue
field
end
else
field
end
end
names
end
end