Class: Fontisan::Export::Transformers::NameTransformer

Inherits:
Object
  • Object
show all
Defined in:
lib/fontisan/export/transformers/name_transformer.rb

Overview

NameTransformer transforms name table to TTX format

Converts Fontisan::Tables::Name to Models::Ttx::Tables::NameTable following proper model-to-model transformation principles.

Class Method Summary collapse

Class Method Details

.format_hex(value, width: 8) ⇒ String

Format hex value

Parameters:

  • value (Integer)

    Integer value

  • width (Integer) (defaults to: 8)

    Minimum hex width

Returns:

  • (String)

    Hex string (e.g., “0x1234”)



57
58
59
# File 'lib/fontisan/export/transformers/name_transformer.rb', line 57

def self.format_hex(value, width: 8)
  "0x#{value.to_s(16).rjust(width, '0')}"
end

.to_int(value) ⇒ Integer

Convert BinData value to native Ruby integer

Parameters:

  • value (Object)

    BinData value or integer

Returns:

  • (Integer)

    Native integer



48
49
50
# File 'lib/fontisan/export/transformers/name_transformer.rb', line 48

def self.to_int(value)
  value.respond_to?(:to_i) ? value.to_i : value
end

.transform(name_table) ⇒ Models::Ttx::Tables::NameTable

Transform name table to TTX model

Parameters:

Returns:



17
18
19
20
21
22
23
# File 'lib/fontisan/export/transformers/name_transformer.rb', line 17

def self.transform(name_table)
  return nil unless name_table

  Models::Ttx::Tables::NameTable.new.tap do |ttx|
    ttx.name_records = transform_name_records(name_table.name_records)
  end
end

.transform_name_records(records) ⇒ Array<Models::Ttx::Tables::NameRecord>

Transform name records

Parameters:

  • records (Array)

    Name records from source table

Returns:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fontisan/export/transformers/name_transformer.rb', line 29

def self.transform_name_records(records)
  return [] unless records

  records.map do |record|
    Models::Ttx::Tables::NameRecord.new.tap do |ttx_record|
      ttx_record.name_id = to_int(record.name_id)
      ttx_record.platform_id = to_int(record.platform_id)
      ttx_record.plat_enc_id = to_int(record.encoding_id)
      ttx_record.lang_id = format_hex(to_int(record.language_id),
                                      width: 3)
      ttx_record.string = record.string
    end
  end
end