1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct Hhea {
12 pub ascender: FWord,
14 pub descender: FWord,
16 pub line_gap: FWord,
19 pub advance_width_max: UfWord,
21 pub min_left_side_bearing: FWord,
24 pub min_right_side_bearing: FWord,
27 pub x_max_extent: FWord,
29 pub caret_slope_rise: i16,
32 pub caret_slope_run: i16,
34 pub caret_offset: i16,
38 pub number_of_h_metrics: u16,
40}
41
42impl Hhea {
43 #[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#[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 pub number_of_h_metrics: u32,
155}
156
157impl HheaExtended {
158 #[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}