Skip to main content

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() > to_usize(u16::MAX) {
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 ReadArgs for Gasp {
76    type Args = ();
77}
78
79impl<'a> FontRead<'a> for Gasp {
80    fn read_with_args(data: FontData<'a>, _: ()) -> Result<Self, ReadError> {
81        <read_fonts::tables::gasp::Gasp as FontRead>::read(data).map(|x| x.to_owned_table())
82    }
83}
84
85#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
86#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
87pub struct GaspRange {
88    /// Upper limit of range, in PPEM
89    pub range_max_ppem: u16,
90    /// Flags describing desired rasterizer behavior.
91    pub range_gasp_behavior: GaspRangeBehavior,
92}
93
94impl GaspRange {
95    /// Construct a new `GaspRange`
96    pub fn new(range_max_ppem: u16, range_gasp_behavior: GaspRangeBehavior) -> Self {
97        Self {
98            range_max_ppem,
99            range_gasp_behavior,
100        }
101    }
102}
103
104impl FontWrite for GaspRange {
105    fn write_into(&self, writer: &mut TableWriter) {
106        self.range_max_ppem.write_into(writer);
107        self.range_gasp_behavior.write_into(writer);
108    }
109    fn table_type(&self) -> TableType {
110        TableType::Named("GaspRange")
111    }
112}
113
114impl Validate for GaspRange {
115    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
116}
117
118impl FromObjRef<read_fonts::tables::gasp::GaspRange> for GaspRange {
119    fn from_obj_ref(obj: &read_fonts::tables::gasp::GaspRange, _: FontData) -> Self {
120        GaspRange {
121            range_max_ppem: obj.range_max_ppem(),
122            range_gasp_behavior: obj.range_gasp_behavior(),
123        }
124    }
125}
126
127impl FontWrite for GaspRangeBehavior {
128    fn write_into(&self, writer: &mut TableWriter) {
129        writer.write_slice(&self.bits().to_be_bytes())
130    }
131}