Class: Fontisan::Tables::Hhea
- Inherits:
-
Binary::BaseRecord
- Object
- BinData::Record
- Binary::BaseRecord
- Fontisan::Tables::Hhea
- Defined in:
- lib/fontisan/tables/hhea.rb
Overview
BinData structure for the 'hhea' (Horizontal Header) table
The hhea table contains horizontal layout metrics for the entire font. It defines font-wide horizontal metrics such as ascent, descent, line gap, and the number of horizontal metrics in the hmtx table.
Reference: OpenType specification, hhea table https://docs.microsoft.com/en-us/typography/opentype/spec/hhea
Constant Summary collapse
- TABLE_SIZE =
Table size in bytes (fixed size)
36
Instance Method Summary collapse
-
#valid? ⇒ Boolean
Check if the table is valid.
-
#valid_advance_width_max? ⇒ Boolean
Validation helper: Check if advance width max is positive.
-
#valid_ascent_descent? ⇒ Boolean
Validation helper: Check if ascent/descent values are reasonable.
-
#valid_caret_slope? ⇒ Boolean
Validation helper: Check if caret slope is valid.
-
#valid_line_gap? ⇒ Boolean
Validation helper: Check if line gap is non-negative.
-
#valid_metric_data_format? ⇒ Boolean
Validation helper: Check if metric data format is valid.
-
#valid_number_of_h_metrics? ⇒ Boolean
Validation helper: Check if number of h metrics is valid.
-
#valid_version? ⇒ Boolean
Validation helper: Check if version is valid.
-
#valid_x_max_extent? ⇒ Boolean
Validation helper: Check if extent is reasonable.
-
#validate! ⇒ Object
Validate the table and raise error if invalid.
-
#version ⇒ Float
Convert version from fixed-point to float.
Methods inherited from Binary::BaseRecord
Instance Method Details
#valid? ⇒ Boolean
Check if the table is valid
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/fontisan/tables/hhea.rb', line 85 def valid? # Version should be 1.0 (0x00010000) return false unless version_raw == 0x00010000 # Metric data format must be 0 return false unless metric_data_format.zero? # Number of metrics must be at least 1 return false unless number_of_h_metrics >= 1 true end |
#valid_advance_width_max? ⇒ Boolean
Validation helper: Check if advance width max is positive
Maximum advance width should be > 0
148 149 150 |
# File 'lib/fontisan/tables/hhea.rb', line 148 def valid_advance_width_max? advance_width_max&.positive? end |
#valid_ascent_descent? ⇒ Boolean
Validation helper: Check if ascent/descent values are reasonable
Ascent should be positive, descent should be negative
130 131 132 |
# File 'lib/fontisan/tables/hhea.rb', line 130 def valid_ascent_descent? ascent.positive? && descent.negative? end |
#valid_caret_slope? ⇒ Boolean
Validation helper: Check if caret slope is valid
For vertical text: rise=1, run=0 For horizontal italic: both should be non-zero
158 159 160 161 |
# File 'lib/fontisan/tables/hhea.rb', line 158 def valid_caret_slope? # At least one should be non-zero caret_slope_rise != 0 || caret_slope_run != 0 end |
#valid_line_gap? ⇒ Boolean
Validation helper: Check if line gap is non-negative
Line gap should be >= 0
139 140 141 |
# File 'lib/fontisan/tables/hhea.rb', line 139 def valid_line_gap? line_gap >= 0 end |
#valid_metric_data_format? ⇒ Boolean
Validation helper: Check if metric data format is valid
Must be 0 for current format
112 113 114 |
# File 'lib/fontisan/tables/hhea.rb', line 112 def valid_metric_data_format? metric_data_format.zero? end |
#valid_number_of_h_metrics? ⇒ Boolean
Validation helper: Check if number of h metrics is valid
Must be at least 1
121 122 123 |
# File 'lib/fontisan/tables/hhea.rb', line 121 def valid_number_of_h_metrics? number_of_h_metrics && number_of_h_metrics >= 1 end |
#valid_version? ⇒ Boolean
Validation helper: Check if version is valid
OpenType spec requires version to be 1.0
103 104 105 |
# File 'lib/fontisan/tables/hhea.rb', line 103 def valid_version? version_raw == 0x00010000 end |
#valid_x_max_extent? ⇒ Boolean
Validation helper: Check if extent is reasonable
x_max_extent should be positive
168 169 170 |
# File 'lib/fontisan/tables/hhea.rb', line 168 def valid_x_max_extent? x_max_extent.positive? end |
#validate! ⇒ Object
Validate the table and raise error if invalid
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/fontisan/tables/hhea.rb', line 175 def validate! unless version_raw == 0x00010000 = "Invalid hhea version: expected 0x00010000 (1.0), " \ "got 0x#{version_raw.to_i.to_s(16).upcase}" raise Fontisan::CorruptedTableError, end unless metric_data_format.zero? = "Invalid metric data format: expected 0, " \ "got #{metric_data_format.to_i}" raise Fontisan::CorruptedTableError, end unless number_of_h_metrics >= 1 = "Invalid number of h metrics: must be >= 1, " \ "got #{number_of_h_metrics.to_i}" raise Fontisan::CorruptedTableError, end end |
#version ⇒ Float
Convert version from fixed-point to float
78 79 80 |
# File 'lib/fontisan/tables/hhea.rb', line 78 def version fixed_to_float(version_raw) end |