write_fonts/generated/
generated_gasp.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
8pub use read_fonts::tables::gasp::GaspRangeBehavior;
9
10/// [gasp](https://learn.microsoft.com/en-us/typography/opentype/spec/gasp#gasp-table-formats)
11#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct Gasp {
14    /// Version number (set to 1)
15    pub version: u16,
16    /// Number of records to follow
17    pub num_ranges: u16,
18    /// Sorted by ppem
19    pub gasp_ranges: Vec<GaspRange>,
20}
21
22impl Gasp {
23    /// Construct a new `Gasp`
24    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    /// Upper limit of range, in PPEM
85    pub range_max_ppem: u16,
86    /// Flags describing desired rasterizer behavior.
87    pub range_gasp_behavior: GaspRangeBehavior,
88}
89
90impl GaspRange {
91    /// Construct a new `GaspRange`
92    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}