module Fontina::Formats::FON
Constants
- IMAGE_DOS_SIGNATURE
- IMAGE_OS2_SIGNATURE
- RT_FONT
- RT_FONTDIR
- RT_VERSION
- WORD_HIGHBIT
Public Class Methods
read(io)
click to toggle source
# File lib/fontina/formats/fon.rb, line 8 def read(io) package container.read io end
Private Class Methods
container()
click to toggle source
# File lib/fontina/formats/fon.rb, line 14 def container @container ||= begin %w[ ../windows/language_codes shared/p_string fon/constants fon/dos_header fon/ne_header fon/ne_exported_name_table fon/ne_font_dir fon/ne_vs_version_info fon/ne_resource fon/ne_resource_name_info fon/ne_resource_type_info fon/ne_resource_table fon/container ].each { |file| require_relative file } Class.new(FON_Container) { auto_call_delayed_io } end end
get_language(fon)
click to toggle source
# File lib/fontina/formats/fon.rb, line 61 def get_language(fon) language_id = get_rsrc_data(fon, RT_VERSION) .flat_map(&:children).find_all { |c| c.name == 'VarFileInfo' } .flat_map(&:children).find_all { |c| c.name == 'Translation' } .flat_map(&:data).map(&:locale) .first Windows::LANGUAGE_CODES[language_id] end
get_rsrc_data(fon, type)
click to toggle source
# File lib/fontina/formats/fon.rb, line 71 def get_rsrc_data(fon, type) fon.rsrctab .types.find_all { |t| t.type_id == WORD_HIGHBIT | type } .flat_map(&:name_info) .map(&:data) end
package(fon)
click to toggle source
# File lib/fontina/formats/fon.rb, line 36 def package(fon) language = get_language(fon) Package[ [QualifiedName[ fon.nrestab.first.name.sub(/^.*:\s*/, ''), :windows, language ]], get_rsrc_data(fon, RT_FONTDIR) .flat_map(&:dir).map(&:entry) .map do |e| Font[ [], [QualifiedName[e.face_name, :windows, language]], e.font_type[0] == 1 ? :vector : :raster, e.points, e.weight, e.italic[0] == 1, e.underline[0] == 1, e.strikeout[0] == 1, ] end ] end