Class: Fontisan::Export::Transformers::HheaTransformer

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

Overview

HheaTransformer transforms hhea table to TTX format

Converts Fontisan horizontal header table to Models::Ttx::Tables::HheaTable following proper model-to-model transformation principles.

Class Method Summary collapse

Class Method Details

.format_hex(value) ⇒ String

Format hex value

Parameters:

  • value (Integer)

    Integer value

Returns:

  • (String)

    Hex string (e.g., "0x00010000")



51
52
53
# File 'lib/fontisan/export/transformers/hhea_transformer.rb', line 51

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

.to_int(value) ⇒ Integer

Convert BinData value to native Ruby integer

Parameters:

  • value (Object)

    BinData value or integer

Returns:

  • (Integer)

    Native integer



43
44
45
# File 'lib/fontisan/export/transformers/hhea_transformer.rb', line 43

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

.transform(hhea_table) ⇒ Models::Ttx::Tables::HheaTable

Transform hhea table to TTX model

Parameters:

  • hhea_table (Object)

    Source hhea table

Returns:



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/fontisan/export/transformers/hhea_transformer.rb', line 15

def self.transform(hhea_table)
  return nil unless hhea_table

  Models::Ttx::Tables::HheaTable.new.tap do |ttx|
    ttx.table_version = format_hex(to_int(hhea_table.version_raw))
    ttx.ascent = to_int(hhea_table.ascent)
    ttx.descent = to_int(hhea_table.descent)
    ttx.line_gap = to_int(hhea_table.line_gap)
    ttx.advance_width_max = to_int(hhea_table.advance_width_max)
    ttx.min_left_side_bearing = to_int(hhea_table.min_left_side_bearing)
    ttx.min_right_side_bearing = to_int(hhea_table.min_right_side_bearing)
    ttx.x_max_extent = to_int(hhea_table.x_max_extent)
    ttx.caret_slope_rise = to_int(hhea_table.caret_slope_rise)
    ttx.caret_slope_run = to_int(hhea_table.caret_slope_run)
    ttx.caret_offset = to_int(hhea_table.caret_offset)
    ttx.reserved0 = 0
    ttx.reserved1 = 0
    ttx.reserved2 = 0
    ttx.reserved3 = 0
    ttx.metric_data_format = to_int(hhea_table.metric_data_format)
    ttx.number_of_h_metrics = to_int(hhea_table.number_of_h_metrics)
  end
end