write_fonts/generated/
generated_gasp.rs1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8pub use read_fonts::tables::gasp::GaspRangeBehavior;
9
10#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct Gasp {
14 pub version: u16,
16 pub num_ranges: u16,
18 pub gasp_ranges: Vec<GaspRange>,
20}
21
22impl Gasp {
23 pub fn new(version: u16, num_ranges: u16, gasp_ranges: Vec<GaspRange>) -> Self {
25 Self {
26 version,
27 num_ranges,
28 gasp_ranges,
29 }
30 }
31}
32
33impl FontWrite for Gasp {
34 fn write_into(&self, writer: &mut TableWriter) {
35 self.version.write_into(writer);
36 self.num_ranges.write_into(writer);
37 self.gasp_ranges.write_into(writer);
38 }
39 fn table_type(&self) -> TableType {
40 TableType::TopLevel(Gasp::TAG)
41 }
42}
43
44impl Validate for Gasp {
45 fn validate_impl(&self, ctx: &mut ValidationCtx) {
46 ctx.in_table("Gasp", |ctx| {
47 ctx.in_field("gasp_ranges", |ctx| {
48 if self.gasp_ranges.len() > (u16::MAX as usize) {
49 ctx.report("array exceeds max length");
50 }
51 self.gasp_ranges.validate_impl(ctx);
52 });
53 })
54 }
55}
56
57impl TopLevelTable for Gasp {
58 const TAG: Tag = Tag::new(b"gasp");
59}
60
61impl<'a> FromObjRef<read_fonts::tables::gasp::Gasp<'a>> for Gasp {
62 fn from_obj_ref(obj: &read_fonts::tables::gasp::Gasp<'a>, _: FontData) -> Self {
63 let offset_data = obj.offset_data();
64 Gasp {
65 version: obj.version(),
66 num_ranges: obj.num_ranges(),
67 gasp_ranges: obj.gasp_ranges().to_owned_obj(offset_data),
68 }
69 }
70}
71
72#[allow(clippy::needless_lifetimes)]
73impl<'a> FromTableRef<read_fonts::tables::gasp::Gasp<'a>> for Gasp {}
74
75impl<'a> FontRead<'a> for Gasp {
76 fn read(data: FontData<'a>) -> Result<Self, ReadError> {
77 <read_fonts::tables::gasp::Gasp as FontRead>::read(data).map(|x| x.to_owned_table())
78 }
79}
80
81#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
82#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
83pub struct GaspRange {
84 pub range_max_ppem: u16,
86 pub range_gasp_behavior: GaspRangeBehavior,
88}
89
90impl GaspRange {
91 pub fn new(range_max_ppem: u16, range_gasp_behavior: GaspRangeBehavior) -> Self {
93 Self {
94 range_max_ppem,
95 range_gasp_behavior,
96 }
97 }
98}
99
100impl FontWrite for GaspRange {
101 fn write_into(&self, writer: &mut TableWriter) {
102 self.range_max_ppem.write_into(writer);
103 self.range_gasp_behavior.write_into(writer);
104 }
105 fn table_type(&self) -> TableType {
106 TableType::Named("GaspRange")
107 }
108}
109
110impl Validate for GaspRange {
111 fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
112}
113
114impl FromObjRef<read_fonts::tables::gasp::GaspRange> for GaspRange {
115 fn from_obj_ref(obj: &read_fonts::tables::gasp::GaspRange, _: FontData) -> Self {
116 GaspRange {
117 range_max_ppem: obj.range_max_ppem(),
118 range_gasp_behavior: obj.range_gasp_behavior(),
119 }
120 }
121}
122
123impl FontWrite for GaspRangeBehavior {
124 fn write_into(&self, writer: &mut TableWriter) {
125 writer.write_slice(&self.bits().to_be_bytes())
126 }
127}