Skip to main content

write_fonts/generated/
generated_hhea.rs

1// THIS FILE IS AUTOGENERATED.
2// Any changes to this file will be overwritten.
3// For more information about how codegen works, see font-codegen/README.md
4
5#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8/// [hhea](https://docs.microsoft.com/en-us/typography/opentype/spec/hhea) Horizontal Header Table
9#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct Hhea {
12    /// Typographic ascent.
13    pub ascender: FWord,
14    /// Typographic descent.
15    pub descender: FWord,
16    /// Typographic line gap. Negative LineGap values are treated as
17    /// zero in some legacy platform implementations.
18    pub line_gap: FWord,
19    /// Maximum advance width value in 'hmtx' table.
20    pub advance_width_max: UfWord,
21    /// Minimum left sidebearing value in 'hmtx' table for glyphs with
22    /// contours (empty glyphs should be ignored).
23    pub min_left_side_bearing: FWord,
24    /// Minimum right sidebearing value; calculated as min(aw - (lsb +
25    /// xMax - xMin)) for glyphs with contours (empty glyphs should be ignored).
26    pub min_right_side_bearing: FWord,
27    /// Max(lsb + (xMax-xMin))
28    pub x_max_extent: FWord,
29    /// Used to calculate the slope of the cursor (rise/run); 1 for
30    /// vertical caret, 0 for horizontal.
31    pub caret_slope_rise: i16,
32    /// 0 for vertical caret, 1 for horizontal.
33    pub caret_slope_run: i16,
34    /// The amount by which a slanted highlight on a glyph needs to be
35    /// shifted to produce the best appearance. Set to 0 for
36    /// non-slanted fonts
37    pub caret_offset: i16,
38    /// Number of hMetric entries in 'hmtx' table
39    pub number_of_h_metrics: u16,
40}
41
42impl Hhea {
43    /// Construct a new `Hhea`
44    #[allow(clippy::too_many_arguments)]
45    pub fn new(
46        ascender: FWord,
47        descender: FWord,
48        line_gap: FWord,
49        advance_width_max: UfWord,
50        min_left_side_bearing: FWord,
51        min_right_side_bearing: FWord,
52        x_max_extent: FWord,
53        caret_slope_rise: i16,
54        caret_slope_run: i16,
55        caret_offset: i16,
56        number_of_h_metrics: u16,
57    ) -> Self {
58        Self {
59            ascender,
60            descender,
61            line_gap,
62            advance_width_max,
63            min_left_side_bearing,
64            min_right_side_bearing,
65            x_max_extent,
66            caret_slope_rise,
67            caret_slope_run,
68            caret_offset,
69            number_of_h_metrics,
70        }
71    }
72}
73
74impl FontWrite for Hhea {
75    #[allow(clippy::unnecessary_cast)]
76    fn write_into(&self, writer: &mut TableWriter) {
77        (MajorMinor::VERSION_1_0 as MajorMinor).write_into(writer);
78        self.ascender.write_into(writer);
79        self.descender.write_into(writer);
80        self.line_gap.write_into(writer);
81        self.advance_width_max.write_into(writer);
82        self.min_left_side_bearing.write_into(writer);
83        self.min_right_side_bearing.write_into(writer);
84        self.x_max_extent.write_into(writer);
85        self.caret_slope_rise.write_into(writer);
86        self.caret_slope_run.write_into(writer);
87        self.caret_offset.write_into(writer);
88        (0 as i16).write_into(writer);
89        (0 as i16).write_into(writer);
90        (0 as i16).write_into(writer);
91        (0 as i16).write_into(writer);
92        (0 as i16).write_into(writer);
93        self.number_of_h_metrics.write_into(writer);
94    }
95    fn table_type(&self) -> TableType {
96        TableType::TopLevel(Hhea::TAG)
97    }
98}
99
100impl Validate for Hhea {
101    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
102}
103
104impl TopLevelTable for Hhea {
105    const TAG: Tag = Tag::new(b"hhea");
106}
107
108impl<'a> FromObjRef<read_fonts::tables::hhea::Hhea<'a>> for Hhea {
109    fn from_obj_ref(obj: &read_fonts::tables::hhea::Hhea<'a>, _: FontData) -> Self {
110        Hhea {
111            ascender: obj.ascender(),
112            descender: obj.descender(),
113            line_gap: obj.line_gap(),
114            advance_width_max: obj.advance_width_max(),
115            min_left_side_bearing: obj.min_left_side_bearing(),
116            min_right_side_bearing: obj.min_right_side_bearing(),
117            x_max_extent: obj.x_max_extent(),
118            caret_slope_rise: obj.caret_slope_rise(),
119            caret_slope_run: obj.caret_slope_run(),
120            caret_offset: obj.caret_offset(),
121            number_of_h_metrics: obj.number_of_h_metrics(),
122        }
123    }
124}
125
126#[allow(clippy::needless_lifetimes)]
127impl<'a> FromTableRef<read_fonts::tables::hhea::Hhea<'a>> for Hhea {}
128
129impl ReadArgs for Hhea {
130    type Args = ();
131}
132
133impl<'a> FontRead<'a> for Hhea {
134    fn read_with_args(data: FontData<'a>, _: ()) -> Result<Self, ReadError> {
135        <read_fonts::tables::hhea::Hhea as FontRead>::read(data).map(|x| x.to_owned_table())
136    }
137}
138
139/// HHEA header table (ISO/IEC 14496-22:2026, 5.1.10).
140#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
141#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
142pub struct HheaExtended {
143    pub ascender: FWord,
144    pub descender: FWord,
145    pub line_gap: FWord,
146    pub advance_width_max: UfWord,
147    pub min_left_side_bearing: FWord,
148    pub min_right_side_bearing: FWord,
149    pub x_max_extent: FWord,
150    pub caret_slope_rise: i16,
151    pub caret_slope_run: i16,
152    pub caret_offset: i16,
153    /// Number of long metric records in HMTX.
154    pub number_of_h_metrics: u32,
155}
156
157impl HheaExtended {
158    /// Construct a new `HheaExtended`
159    #[allow(clippy::too_many_arguments)]
160    pub fn new(
161        ascender: FWord,
162        descender: FWord,
163        line_gap: FWord,
164        advance_width_max: UfWord,
165        min_left_side_bearing: FWord,
166        min_right_side_bearing: FWord,
167        x_max_extent: FWord,
168        caret_slope_rise: i16,
169        caret_slope_run: i16,
170        caret_offset: i16,
171        number_of_h_metrics: u32,
172    ) -> Self {
173        Self {
174            ascender,
175            descender,
176            line_gap,
177            advance_width_max,
178            min_left_side_bearing,
179            min_right_side_bearing,
180            x_max_extent,
181            caret_slope_rise,
182            caret_slope_run,
183            caret_offset,
184            number_of_h_metrics,
185        }
186    }
187}
188
189impl FontWrite for HheaExtended {
190    #[allow(clippy::unnecessary_cast)]
191    fn write_into(&self, writer: &mut TableWriter) {
192        (MajorMinor::VERSION_1_0 as MajorMinor).write_into(writer);
193        self.ascender.write_into(writer);
194        self.descender.write_into(writer);
195        self.line_gap.write_into(writer);
196        self.advance_width_max.write_into(writer);
197        self.min_left_side_bearing.write_into(writer);
198        self.min_right_side_bearing.write_into(writer);
199        self.x_max_extent.write_into(writer);
200        self.caret_slope_rise.write_into(writer);
201        self.caret_slope_run.write_into(writer);
202        self.caret_offset.write_into(writer);
203        (0 as i16).write_into(writer);
204        (0 as i16).write_into(writer);
205        (0 as i16).write_into(writer);
206        (0 as i16).write_into(writer);
207        (0 as i16).write_into(writer);
208        self.number_of_h_metrics.write_into(writer);
209    }
210    fn table_type(&self) -> TableType {
211        TableType::TopLevel(HheaExtended::TAG)
212    }
213}
214
215impl Validate for HheaExtended {
216    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
217}
218
219impl TopLevelTable for HheaExtended {
220    const TAG: Tag = Tag::new(b"HHEA");
221}
222
223impl<'a> FromObjRef<read_fonts::tables::hhea::HheaExtended<'a>> for HheaExtended {
224    fn from_obj_ref(obj: &read_fonts::tables::hhea::HheaExtended<'a>, _: FontData) -> Self {
225        HheaExtended {
226            ascender: obj.ascender(),
227            descender: obj.descender(),
228            line_gap: obj.line_gap(),
229            advance_width_max: obj.advance_width_max(),
230            min_left_side_bearing: obj.min_left_side_bearing(),
231            min_right_side_bearing: obj.min_right_side_bearing(),
232            x_max_extent: obj.x_max_extent(),
233            caret_slope_rise: obj.caret_slope_rise(),
234            caret_slope_run: obj.caret_slope_run(),
235            caret_offset: obj.caret_offset(),
236            number_of_h_metrics: obj.number_of_h_metrics(),
237        }
238    }
239}
240
241#[allow(clippy::needless_lifetimes)]
242impl<'a> FromTableRef<read_fonts::tables::hhea::HheaExtended<'a>> for HheaExtended {}
243
244impl ReadArgs for HheaExtended {
245    type Args = ();
246}
247
248impl<'a> FontRead<'a> for HheaExtended {
249    fn read_with_args(data: FontData<'a>, _: ()) -> Result<Self, ReadError> {
250        <read_fonts::tables::hhea::HheaExtended as FontRead>::read(data).map(|x| x.to_owned_table())
251    }
252}