read_fonts/generated/
generated_hhea.rs1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8#[derive(Debug, Clone, Copy)]
10#[doc(hidden)]
11pub struct HheaMarker {}
12
13impl HheaMarker {
14 pub fn version_byte_range(&self) -> Range<usize> {
15 let start = 0;
16 start..start + MajorMinor::RAW_BYTE_LEN
17 }
18
19 pub fn ascender_byte_range(&self) -> Range<usize> {
20 let start = self.version_byte_range().end;
21 start..start + FWord::RAW_BYTE_LEN
22 }
23
24 pub fn descender_byte_range(&self) -> Range<usize> {
25 let start = self.ascender_byte_range().end;
26 start..start + FWord::RAW_BYTE_LEN
27 }
28
29 pub fn line_gap_byte_range(&self) -> Range<usize> {
30 let start = self.descender_byte_range().end;
31 start..start + FWord::RAW_BYTE_LEN
32 }
33
34 pub fn advance_width_max_byte_range(&self) -> Range<usize> {
35 let start = self.line_gap_byte_range().end;
36 start..start + UfWord::RAW_BYTE_LEN
37 }
38
39 pub fn min_left_side_bearing_byte_range(&self) -> Range<usize> {
40 let start = self.advance_width_max_byte_range().end;
41 start..start + FWord::RAW_BYTE_LEN
42 }
43
44 pub fn min_right_side_bearing_byte_range(&self) -> Range<usize> {
45 let start = self.min_left_side_bearing_byte_range().end;
46 start..start + FWord::RAW_BYTE_LEN
47 }
48
49 pub fn x_max_extent_byte_range(&self) -> Range<usize> {
50 let start = self.min_right_side_bearing_byte_range().end;
51 start..start + FWord::RAW_BYTE_LEN
52 }
53
54 pub fn caret_slope_rise_byte_range(&self) -> Range<usize> {
55 let start = self.x_max_extent_byte_range().end;
56 start..start + i16::RAW_BYTE_LEN
57 }
58
59 pub fn caret_slope_run_byte_range(&self) -> Range<usize> {
60 let start = self.caret_slope_rise_byte_range().end;
61 start..start + i16::RAW_BYTE_LEN
62 }
63
64 pub fn caret_offset_byte_range(&self) -> Range<usize> {
65 let start = self.caret_slope_run_byte_range().end;
66 start..start + i16::RAW_BYTE_LEN
67 }
68
69 pub fn reserved1_byte_range(&self) -> Range<usize> {
70 let start = self.caret_offset_byte_range().end;
71 start..start + i16::RAW_BYTE_LEN
72 }
73
74 pub fn reserved2_byte_range(&self) -> Range<usize> {
75 let start = self.reserved1_byte_range().end;
76 start..start + i16::RAW_BYTE_LEN
77 }
78
79 pub fn reserved3_byte_range(&self) -> Range<usize> {
80 let start = self.reserved2_byte_range().end;
81 start..start + i16::RAW_BYTE_LEN
82 }
83
84 pub fn reserved4_byte_range(&self) -> Range<usize> {
85 let start = self.reserved3_byte_range().end;
86 start..start + i16::RAW_BYTE_LEN
87 }
88
89 pub fn metric_data_format_byte_range(&self) -> Range<usize> {
90 let start = self.reserved4_byte_range().end;
91 start..start + i16::RAW_BYTE_LEN
92 }
93
94 pub fn number_of_h_metrics_byte_range(&self) -> Range<usize> {
95 let start = self.metric_data_format_byte_range().end;
96 start..start + u16::RAW_BYTE_LEN
97 }
98}
99
100impl MinByteRange for HheaMarker {
101 fn min_byte_range(&self) -> Range<usize> {
102 0..self.number_of_h_metrics_byte_range().end
103 }
104}
105
106impl TopLevelTable for Hhea<'_> {
107 const TAG: Tag = Tag::new(b"hhea");
109}
110
111impl<'a> FontRead<'a> for Hhea<'a> {
112 fn read(data: FontData<'a>) -> Result<Self, ReadError> {
113 let mut cursor = data.cursor();
114 cursor.advance::<MajorMinor>();
115 cursor.advance::<FWord>();
116 cursor.advance::<FWord>();
117 cursor.advance::<FWord>();
118 cursor.advance::<UfWord>();
119 cursor.advance::<FWord>();
120 cursor.advance::<FWord>();
121 cursor.advance::<FWord>();
122 cursor.advance::<i16>();
123 cursor.advance::<i16>();
124 cursor.advance::<i16>();
125 cursor.advance::<i16>();
126 cursor.advance::<i16>();
127 cursor.advance::<i16>();
128 cursor.advance::<i16>();
129 cursor.advance::<i16>();
130 cursor.advance::<u16>();
131 cursor.finish(HheaMarker {})
132 }
133}
134
135pub type Hhea<'a> = TableRef<'a, HheaMarker>;
137
138#[allow(clippy::needless_lifetimes)]
139impl<'a> Hhea<'a> {
140 pub fn version(&self) -> MajorMinor {
142 let range = self.shape.version_byte_range();
143 self.data.read_at(range.start).unwrap()
144 }
145
146 pub fn ascender(&self) -> FWord {
148 let range = self.shape.ascender_byte_range();
149 self.data.read_at(range.start).unwrap()
150 }
151
152 pub fn descender(&self) -> FWord {
154 let range = self.shape.descender_byte_range();
155 self.data.read_at(range.start).unwrap()
156 }
157
158 pub fn line_gap(&self) -> FWord {
161 let range = self.shape.line_gap_byte_range();
162 self.data.read_at(range.start).unwrap()
163 }
164
165 pub fn advance_width_max(&self) -> UfWord {
167 let range = self.shape.advance_width_max_byte_range();
168 self.data.read_at(range.start).unwrap()
169 }
170
171 pub fn min_left_side_bearing(&self) -> FWord {
174 let range = self.shape.min_left_side_bearing_byte_range();
175 self.data.read_at(range.start).unwrap()
176 }
177
178 pub fn min_right_side_bearing(&self) -> FWord {
181 let range = self.shape.min_right_side_bearing_byte_range();
182 self.data.read_at(range.start).unwrap()
183 }
184
185 pub fn x_max_extent(&self) -> FWord {
187 let range = self.shape.x_max_extent_byte_range();
188 self.data.read_at(range.start).unwrap()
189 }
190
191 pub fn caret_slope_rise(&self) -> i16 {
194 let range = self.shape.caret_slope_rise_byte_range();
195 self.data.read_at(range.start).unwrap()
196 }
197
198 pub fn caret_slope_run(&self) -> i16 {
200 let range = self.shape.caret_slope_run_byte_range();
201 self.data.read_at(range.start).unwrap()
202 }
203
204 pub fn caret_offset(&self) -> i16 {
208 let range = self.shape.caret_offset_byte_range();
209 self.data.read_at(range.start).unwrap()
210 }
211
212 pub fn metric_data_format(&self) -> i16 {
214 let range = self.shape.metric_data_format_byte_range();
215 self.data.read_at(range.start).unwrap()
216 }
217
218 pub fn number_of_h_metrics(&self) -> u16 {
220 let range = self.shape.number_of_h_metrics_byte_range();
221 self.data.read_at(range.start).unwrap()
222 }
223}
224
225#[cfg(feature = "experimental_traverse")]
226impl<'a> SomeTable<'a> for Hhea<'a> {
227 fn type_name(&self) -> &str {
228 "Hhea"
229 }
230 fn get_field(&self, idx: usize) -> Option<Field<'a>> {
231 match idx {
232 0usize => Some(Field::new("version", self.version())),
233 1usize => Some(Field::new("ascender", self.ascender())),
234 2usize => Some(Field::new("descender", self.descender())),
235 3usize => Some(Field::new("line_gap", self.line_gap())),
236 4usize => Some(Field::new("advance_width_max", self.advance_width_max())),
237 5usize => Some(Field::new(
238 "min_left_side_bearing",
239 self.min_left_side_bearing(),
240 )),
241 6usize => Some(Field::new(
242 "min_right_side_bearing",
243 self.min_right_side_bearing(),
244 )),
245 7usize => Some(Field::new("x_max_extent", self.x_max_extent())),
246 8usize => Some(Field::new("caret_slope_rise", self.caret_slope_rise())),
247 9usize => Some(Field::new("caret_slope_run", self.caret_slope_run())),
248 10usize => Some(Field::new("caret_offset", self.caret_offset())),
249 11usize => Some(Field::new("metric_data_format", self.metric_data_format())),
250 12usize => Some(Field::new(
251 "number_of_h_metrics",
252 self.number_of_h_metrics(),
253 )),
254 _ => None,
255 }
256 }
257}
258
259#[cfg(feature = "experimental_traverse")]
260#[allow(clippy::needless_lifetimes)]
261impl<'a> std::fmt::Debug for Hhea<'a> {
262 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
263 (self as &dyn SomeTable<'a>).fmt(f)
264 }
265}