read_fonts/generated/
generated_vhea.rs1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8#[derive(Debug, Clone, Copy)]
10#[doc(hidden)]
11pub struct VheaMarker {}
12
13impl VheaMarker {
14 pub fn version_byte_range(&self) -> Range<usize> {
15 let start = 0;
16 start..start + Version16Dot16::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_height_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_top_side_bearing_byte_range(&self) -> Range<usize> {
40 let start = self.advance_height_max_byte_range().end;
41 start..start + FWord::RAW_BYTE_LEN
42 }
43
44 pub fn min_bottom_side_bearing_byte_range(&self) -> Range<usize> {
45 let start = self.min_top_side_bearing_byte_range().end;
46 start..start + FWord::RAW_BYTE_LEN
47 }
48
49 pub fn y_max_extent_byte_range(&self) -> Range<usize> {
50 let start = self.min_bottom_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.y_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_long_ver_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 VheaMarker {
101 fn min_byte_range(&self) -> Range<usize> {
102 0..self.number_of_long_ver_metrics_byte_range().end
103 }
104}
105
106impl TopLevelTable for Vhea<'_> {
107 const TAG: Tag = Tag::new(b"vhea");
109}
110
111impl<'a> FontRead<'a> for Vhea<'a> {
112 fn read(data: FontData<'a>) -> Result<Self, ReadError> {
113 let mut cursor = data.cursor();
114 cursor.advance::<Version16Dot16>();
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(VheaMarker {})
132 }
133}
134
135pub type Vhea<'a> = TableRef<'a, VheaMarker>;
137
138#[allow(clippy::needless_lifetimes)]
139impl<'a> Vhea<'a> {
140 pub fn version(&self) -> Version16Dot16 {
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_height_max(&self) -> UfWord {
167 let range = self.shape.advance_height_max_byte_range();
168 self.data.read_at(range.start).unwrap()
169 }
170
171 pub fn min_top_side_bearing(&self) -> FWord {
174 let range = self.shape.min_top_side_bearing_byte_range();
175 self.data.read_at(range.start).unwrap()
176 }
177
178 pub fn min_bottom_side_bearing(&self) -> FWord {
180 let range = self.shape.min_bottom_side_bearing_byte_range();
181 self.data.read_at(range.start).unwrap()
182 }
183
184 pub fn y_max_extent(&self) -> FWord {
186 let range = self.shape.y_max_extent_byte_range();
187 self.data.read_at(range.start).unwrap()
188 }
189
190 pub fn caret_slope_rise(&self) -> i16 {
193 let range = self.shape.caret_slope_rise_byte_range();
194 self.data.read_at(range.start).unwrap()
195 }
196
197 pub fn caret_slope_run(&self) -> i16 {
199 let range = self.shape.caret_slope_run_byte_range();
200 self.data.read_at(range.start).unwrap()
201 }
202
203 pub fn caret_offset(&self) -> i16 {
207 let range = self.shape.caret_offset_byte_range();
208 self.data.read_at(range.start).unwrap()
209 }
210
211 pub fn metric_data_format(&self) -> i16 {
213 let range = self.shape.metric_data_format_byte_range();
214 self.data.read_at(range.start).unwrap()
215 }
216
217 pub fn number_of_long_ver_metrics(&self) -> u16 {
219 let range = self.shape.number_of_long_ver_metrics_byte_range();
220 self.data.read_at(range.start).unwrap()
221 }
222}
223
224#[cfg(feature = "experimental_traverse")]
225impl<'a> SomeTable<'a> for Vhea<'a> {
226 fn type_name(&self) -> &str {
227 "Vhea"
228 }
229 fn get_field(&self, idx: usize) -> Option<Field<'a>> {
230 match idx {
231 0usize => Some(Field::new("version", self.version())),
232 1usize => Some(Field::new("ascender", self.ascender())),
233 2usize => Some(Field::new("descender", self.descender())),
234 3usize => Some(Field::new("line_gap", self.line_gap())),
235 4usize => Some(Field::new("advance_height_max", self.advance_height_max())),
236 5usize => Some(Field::new(
237 "min_top_side_bearing",
238 self.min_top_side_bearing(),
239 )),
240 6usize => Some(Field::new(
241 "min_bottom_side_bearing",
242 self.min_bottom_side_bearing(),
243 )),
244 7usize => Some(Field::new("y_max_extent", self.y_max_extent())),
245 8usize => Some(Field::new("caret_slope_rise", self.caret_slope_rise())),
246 9usize => Some(Field::new("caret_slope_run", self.caret_slope_run())),
247 10usize => Some(Field::new("caret_offset", self.caret_offset())),
248 11usize => Some(Field::new("metric_data_format", self.metric_data_format())),
249 12usize => Some(Field::new(
250 "number_of_long_ver_metrics",
251 self.number_of_long_ver_metrics(),
252 )),
253 _ => None,
254 }
255 }
256}
257
258#[cfg(feature = "experimental_traverse")]
259#[allow(clippy::needless_lifetimes)]
260impl<'a> std::fmt::Debug for Vhea<'a> {
261 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
262 (self as &dyn SomeTable<'a>).fmt(f)
263 }
264}