Skip to main content

write_fonts/generated/
generated_postscript.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
8/// An array of variable-sized objects in a `CFF` table.
9#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct Index1 {
12    /// Number of objects stored in INDEX.
13    pub count: u16,
14    /// Object array element size.
15    pub off_size: u8,
16    /// Bytes containing `count + 1` offsets each of `off_size`.
17    pub offsets: Vec<u8>,
18    /// Array containing the object data.
19    pub data: Vec<u8>,
20}
21
22impl Index1 {
23    /// Construct a new `Index1`
24    pub fn new(count: u16, off_size: u8, offsets: Vec<u8>, data: Vec<u8>) -> Self {
25        Self {
26            count,
27            off_size,
28            offsets,
29            data,
30        }
31    }
32}
33
34impl FontWrite for Index1 {
35    fn write_into(&self, writer: &mut TableWriter) {
36        self.count.write_into(writer);
37        self.off_size.write_into(writer);
38        self.offsets.write_into(writer);
39        self.data.write_into(writer);
40    }
41    fn table_type(&self) -> TableType {
42        TableType::Named("Index1")
43    }
44}
45
46impl Validate for Index1 {
47    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
48}
49
50impl<'a> FromObjRef<read_fonts::tables::postscript::Index1<'a>> for Index1 {
51    fn from_obj_ref(obj: &read_fonts::tables::postscript::Index1<'a>, _: FontData) -> Self {
52        let offset_data = obj.offset_data();
53        Index1 {
54            count: obj.count(),
55            off_size: obj.off_size(),
56            offsets: obj.offsets().to_owned_obj(offset_data),
57            data: obj.data().to_owned_obj(offset_data),
58        }
59    }
60}
61
62#[allow(clippy::needless_lifetimes)]
63impl<'a> FromTableRef<read_fonts::tables::postscript::Index1<'a>> for Index1 {}
64
65impl<'a> FontRead<'a> for Index1 {
66    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
67        <read_fonts::tables::postscript::Index1 as FontRead>::read(data).map(|x| x.to_owned_table())
68    }
69}
70
71/// An array of variable-sized objects in a `CFF2` table.
72#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
73#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
74pub struct Index2 {
75    /// Number of objects stored in INDEX.
76    pub count: u32,
77    /// Object array element size.
78    pub off_size: u8,
79    /// Bytes containing `count + 1` offsets each of `off_size`.
80    pub offsets: Vec<u8>,
81    /// Array containing the object data.
82    pub data: Vec<u8>,
83}
84
85impl Index2 {
86    /// Construct a new `Index2`
87    pub fn new(count: u32, off_size: u8, offsets: Vec<u8>, data: Vec<u8>) -> Self {
88        Self {
89            count,
90            off_size,
91            offsets,
92            data,
93        }
94    }
95}
96
97impl FontWrite for Index2 {
98    fn write_into(&self, writer: &mut TableWriter) {
99        self.count.write_into(writer);
100        self.off_size.write_into(writer);
101        self.offsets.write_into(writer);
102        self.data.write_into(writer);
103    }
104    fn table_type(&self) -> TableType {
105        TableType::Named("Index2")
106    }
107}
108
109impl Validate for Index2 {
110    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
111}
112
113impl<'a> FromObjRef<read_fonts::tables::postscript::Index2<'a>> for Index2 {
114    fn from_obj_ref(obj: &read_fonts::tables::postscript::Index2<'a>, _: FontData) -> Self {
115        let offset_data = obj.offset_data();
116        Index2 {
117            count: obj.count(),
118            off_size: obj.off_size(),
119            offsets: obj.offsets().to_owned_obj(offset_data),
120            data: obj.data().to_owned_obj(offset_data),
121        }
122    }
123}
124
125#[allow(clippy::needless_lifetimes)]
126impl<'a> FromTableRef<read_fonts::tables::postscript::Index2<'a>> for Index2 {}
127
128impl<'a> FontRead<'a> for Index2 {
129    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
130        <read_fonts::tables::postscript::Index2 as FontRead>::read(data).map(|x| x.to_owned_table())
131    }
132}
133
134/// Associates a glyph identifier with a Font DICT.
135#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
136#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
137pub enum FdSelect {
138    Format0(FdSelectFormat0),
139    Format3(FdSelectFormat3),
140    Format4(FdSelectFormat4),
141}
142
143impl FdSelect {
144    /// Construct a new `FdSelectFormat0` subtable
145    pub fn format_0(fds: Vec<u8>) -> Self {
146        Self::Format0(FdSelectFormat0::new(fds))
147    }
148
149    /// Construct a new `FdSelectFormat3` subtable
150    pub fn format_3(ranges: Vec<FdSelectRange3>, sentinel: u16) -> Self {
151        Self::Format3(FdSelectFormat3::new(ranges, sentinel))
152    }
153
154    /// Construct a new `FdSelectFormat4` subtable
155    pub fn format_4(ranges: Vec<FdSelectRange4>, sentinel: u32) -> Self {
156        Self::Format4(FdSelectFormat4::new(ranges, sentinel))
157    }
158}
159
160impl Default for FdSelect {
161    fn default() -> Self {
162        Self::Format0(Default::default())
163    }
164}
165
166impl FontWrite for FdSelect {
167    fn write_into(&self, writer: &mut TableWriter) {
168        match self {
169            Self::Format0(item) => item.write_into(writer),
170            Self::Format3(item) => item.write_into(writer),
171            Self::Format4(item) => item.write_into(writer),
172        }
173    }
174    fn table_type(&self) -> TableType {
175        match self {
176            Self::Format0(item) => item.table_type(),
177            Self::Format3(item) => item.table_type(),
178            Self::Format4(item) => item.table_type(),
179        }
180    }
181}
182
183impl Validate for FdSelect {
184    fn validate_impl(&self, ctx: &mut ValidationCtx) {
185        match self {
186            Self::Format0(item) => item.validate_impl(ctx),
187            Self::Format3(item) => item.validate_impl(ctx),
188            Self::Format4(item) => item.validate_impl(ctx),
189        }
190    }
191}
192
193impl FromObjRef<read_fonts::tables::postscript::FdSelect<'_>> for FdSelect {
194    fn from_obj_ref(obj: &read_fonts::tables::postscript::FdSelect, _: FontData) -> Self {
195        use read_fonts::tables::postscript::FdSelect as ObjRefType;
196        match obj {
197            ObjRefType::Format0(item) => FdSelect::Format0(item.to_owned_table()),
198            ObjRefType::Format3(item) => FdSelect::Format3(item.to_owned_table()),
199            ObjRefType::Format4(item) => FdSelect::Format4(item.to_owned_table()),
200        }
201    }
202}
203
204impl FromTableRef<read_fonts::tables::postscript::FdSelect<'_>> for FdSelect {}
205
206impl<'a> FontRead<'a> for FdSelect {
207    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
208        <read_fonts::tables::postscript::FdSelect as FontRead>::read(data)
209            .map(|x| x.to_owned_table())
210    }
211}
212
213impl From<FdSelectFormat0> for FdSelect {
214    fn from(src: FdSelectFormat0) -> FdSelect {
215        FdSelect::Format0(src)
216    }
217}
218
219impl From<FdSelectFormat3> for FdSelect {
220    fn from(src: FdSelectFormat3) -> FdSelect {
221        FdSelect::Format3(src)
222    }
223}
224
225impl From<FdSelectFormat4> for FdSelect {
226    fn from(src: FdSelectFormat4) -> FdSelect {
227        FdSelect::Format4(src)
228    }
229}
230
231/// FdSelect format 0.
232#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
234pub struct FdSelectFormat0 {
235    /// FD selector array (one entry for each glyph).
236    pub fds: Vec<u8>,
237}
238
239impl FdSelectFormat0 {
240    /// Construct a new `FdSelectFormat0`
241    pub fn new(fds: Vec<u8>) -> Self {
242        Self { fds }
243    }
244}
245
246impl FontWrite for FdSelectFormat0 {
247    #[allow(clippy::unnecessary_cast)]
248    fn write_into(&self, writer: &mut TableWriter) {
249        (0 as u8).write_into(writer);
250        self.fds.write_into(writer);
251    }
252    fn table_type(&self) -> TableType {
253        TableType::Named("FdSelectFormat0")
254    }
255}
256
257impl Validate for FdSelectFormat0 {
258    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
259}
260
261impl<'a> FromObjRef<read_fonts::tables::postscript::FdSelectFormat0<'a>> for FdSelectFormat0 {
262    fn from_obj_ref(
263        obj: &read_fonts::tables::postscript::FdSelectFormat0<'a>,
264        _: FontData,
265    ) -> Self {
266        let offset_data = obj.offset_data();
267        FdSelectFormat0 {
268            fds: obj.fds().to_owned_obj(offset_data),
269        }
270    }
271}
272
273#[allow(clippy::needless_lifetimes)]
274impl<'a> FromTableRef<read_fonts::tables::postscript::FdSelectFormat0<'a>> for FdSelectFormat0 {}
275
276impl<'a> FontRead<'a> for FdSelectFormat0 {
277    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
278        <read_fonts::tables::postscript::FdSelectFormat0 as FontRead>::read(data)
279            .map(|x| x.to_owned_table())
280    }
281}
282
283/// FdSelect format 3.
284#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
285#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
286pub struct FdSelectFormat3 {
287    /// Range3 array.
288    pub ranges: Vec<FdSelectRange3>,
289    /// Sentinel GID. Set equal to the number of glyphs in the font.
290    pub sentinel: u16,
291}
292
293impl FdSelectFormat3 {
294    /// Construct a new `FdSelectFormat3`
295    pub fn new(ranges: Vec<FdSelectRange3>, sentinel: u16) -> Self {
296        Self { ranges, sentinel }
297    }
298}
299
300impl FontWrite for FdSelectFormat3 {
301    #[allow(clippy::unnecessary_cast)]
302    fn write_into(&self, writer: &mut TableWriter) {
303        (3 as u8).write_into(writer);
304        (u16::try_from(array_len(&self.ranges)).unwrap()).write_into(writer);
305        self.ranges.write_into(writer);
306        self.sentinel.write_into(writer);
307    }
308    fn table_type(&self) -> TableType {
309        TableType::Named("FdSelectFormat3")
310    }
311}
312
313impl Validate for FdSelectFormat3 {
314    fn validate_impl(&self, ctx: &mut ValidationCtx) {
315        ctx.in_table("FdSelectFormat3", |ctx| {
316            ctx.in_field("ranges", |ctx| {
317                if self.ranges.len() > (u16::MAX as usize) {
318                    ctx.report("array exceeds max length");
319                }
320                self.ranges.validate_impl(ctx);
321            });
322        })
323    }
324}
325
326impl<'a> FromObjRef<read_fonts::tables::postscript::FdSelectFormat3<'a>> for FdSelectFormat3 {
327    fn from_obj_ref(
328        obj: &read_fonts::tables::postscript::FdSelectFormat3<'a>,
329        _: FontData,
330    ) -> Self {
331        let offset_data = obj.offset_data();
332        FdSelectFormat3 {
333            ranges: obj.ranges().to_owned_obj(offset_data),
334            sentinel: obj.sentinel(),
335        }
336    }
337}
338
339#[allow(clippy::needless_lifetimes)]
340impl<'a> FromTableRef<read_fonts::tables::postscript::FdSelectFormat3<'a>> for FdSelectFormat3 {}
341
342impl<'a> FontRead<'a> for FdSelectFormat3 {
343    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
344        <read_fonts::tables::postscript::FdSelectFormat3 as FontRead>::read(data)
345            .map(|x| x.to_owned_table())
346    }
347}
348
349/// Range struct for FdSelect format 3.
350#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
351#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
352pub struct FdSelectRange3 {
353    /// First glyph index in range.
354    pub first: u16,
355    /// FD index for all glyphs in range.
356    pub fd: u8,
357}
358
359impl FdSelectRange3 {
360    /// Construct a new `FdSelectRange3`
361    pub fn new(first: u16, fd: u8) -> Self {
362        Self { first, fd }
363    }
364}
365
366impl FontWrite for FdSelectRange3 {
367    fn write_into(&self, writer: &mut TableWriter) {
368        self.first.write_into(writer);
369        self.fd.write_into(writer);
370    }
371    fn table_type(&self) -> TableType {
372        TableType::Named("FdSelectRange3")
373    }
374}
375
376impl Validate for FdSelectRange3 {
377    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
378}
379
380impl FromObjRef<read_fonts::tables::postscript::FdSelectRange3> for FdSelectRange3 {
381    fn from_obj_ref(obj: &read_fonts::tables::postscript::FdSelectRange3, _: FontData) -> Self {
382        FdSelectRange3 {
383            first: obj.first(),
384            fd: obj.fd(),
385        }
386    }
387}
388
389/// FdSelect format 4.
390#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
391#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
392pub struct FdSelectFormat4 {
393    /// Range4 array.
394    pub ranges: Vec<FdSelectRange4>,
395    /// Sentinel GID. Set equal to the number of glyphs in the font.
396    pub sentinel: u32,
397}
398
399impl FdSelectFormat4 {
400    /// Construct a new `FdSelectFormat4`
401    pub fn new(ranges: Vec<FdSelectRange4>, sentinel: u32) -> Self {
402        Self { ranges, sentinel }
403    }
404}
405
406impl FontWrite for FdSelectFormat4 {
407    #[allow(clippy::unnecessary_cast)]
408    fn write_into(&self, writer: &mut TableWriter) {
409        (4 as u8).write_into(writer);
410        (u32::try_from(array_len(&self.ranges)).unwrap()).write_into(writer);
411        self.ranges.write_into(writer);
412        self.sentinel.write_into(writer);
413    }
414    fn table_type(&self) -> TableType {
415        TableType::Named("FdSelectFormat4")
416    }
417}
418
419impl Validate for FdSelectFormat4 {
420    fn validate_impl(&self, ctx: &mut ValidationCtx) {
421        ctx.in_table("FdSelectFormat4", |ctx| {
422            ctx.in_field("ranges", |ctx| {
423                if self.ranges.len() > (u32::MAX as usize) {
424                    ctx.report("array exceeds max length");
425                }
426                self.ranges.validate_impl(ctx);
427            });
428        })
429    }
430}
431
432impl<'a> FromObjRef<read_fonts::tables::postscript::FdSelectFormat4<'a>> for FdSelectFormat4 {
433    fn from_obj_ref(
434        obj: &read_fonts::tables::postscript::FdSelectFormat4<'a>,
435        _: FontData,
436    ) -> Self {
437        let offset_data = obj.offset_data();
438        FdSelectFormat4 {
439            ranges: obj.ranges().to_owned_obj(offset_data),
440            sentinel: obj.sentinel(),
441        }
442    }
443}
444
445#[allow(clippy::needless_lifetimes)]
446impl<'a> FromTableRef<read_fonts::tables::postscript::FdSelectFormat4<'a>> for FdSelectFormat4 {}
447
448impl<'a> FontRead<'a> for FdSelectFormat4 {
449    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
450        <read_fonts::tables::postscript::FdSelectFormat4 as FontRead>::read(data)
451            .map(|x| x.to_owned_table())
452    }
453}
454
455/// Range struct for FdSelect format 4.
456#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
457#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
458pub struct FdSelectRange4 {
459    /// First glyph index in range.
460    pub first: u32,
461    /// FD index for all glyphs in range.
462    pub fd: u16,
463}
464
465impl FdSelectRange4 {
466    /// Construct a new `FdSelectRange4`
467    pub fn new(first: u32, fd: u16) -> Self {
468        Self { first, fd }
469    }
470}
471
472impl FontWrite for FdSelectRange4 {
473    fn write_into(&self, writer: &mut TableWriter) {
474        self.first.write_into(writer);
475        self.fd.write_into(writer);
476    }
477    fn table_type(&self) -> TableType {
478        TableType::Named("FdSelectRange4")
479    }
480}
481
482impl Validate for FdSelectRange4 {
483    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
484}
485
486impl FromObjRef<read_fonts::tables::postscript::FdSelectRange4> for FdSelectRange4 {
487    fn from_obj_ref(obj: &read_fonts::tables::postscript::FdSelectRange4, _: FontData) -> Self {
488        FdSelectRange4 {
489            first: obj.first(),
490            fd: obj.fd(),
491        }
492    }
493}
494
495/// Charset with custom glyph id to string id mappings.
496#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
497#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
498pub enum CustomCharset {
499    Format0(CharsetFormat0),
500    Format1(CharsetFormat1),
501    Format2(CharsetFormat2),
502}
503
504impl CustomCharset {
505    /// Construct a new `CharsetFormat0` subtable
506    pub fn format_0(glyph: Vec<u16>) -> Self {
507        Self::Format0(CharsetFormat0::new(glyph))
508    }
509
510    /// Construct a new `CharsetFormat1` subtable
511    pub fn format_1(ranges: Vec<CharsetRange1>) -> Self {
512        Self::Format1(CharsetFormat1::new(ranges))
513    }
514
515    /// Construct a new `CharsetFormat2` subtable
516    pub fn format_2(ranges: Vec<CharsetRange2>) -> Self {
517        Self::Format2(CharsetFormat2::new(ranges))
518    }
519}
520
521impl Default for CustomCharset {
522    fn default() -> Self {
523        Self::Format0(Default::default())
524    }
525}
526
527impl FontWrite for CustomCharset {
528    fn write_into(&self, writer: &mut TableWriter) {
529        match self {
530            Self::Format0(item) => item.write_into(writer),
531            Self::Format1(item) => item.write_into(writer),
532            Self::Format2(item) => item.write_into(writer),
533        }
534    }
535    fn table_type(&self) -> TableType {
536        match self {
537            Self::Format0(item) => item.table_type(),
538            Self::Format1(item) => item.table_type(),
539            Self::Format2(item) => item.table_type(),
540        }
541    }
542}
543
544impl Validate for CustomCharset {
545    fn validate_impl(&self, ctx: &mut ValidationCtx) {
546        match self {
547            Self::Format0(item) => item.validate_impl(ctx),
548            Self::Format1(item) => item.validate_impl(ctx),
549            Self::Format2(item) => item.validate_impl(ctx),
550        }
551    }
552}
553
554impl FromObjRef<read_fonts::tables::postscript::CustomCharset<'_>> for CustomCharset {
555    fn from_obj_ref(obj: &read_fonts::tables::postscript::CustomCharset, _: FontData) -> Self {
556        use read_fonts::tables::postscript::CustomCharset as ObjRefType;
557        match obj {
558            ObjRefType::Format0(item) => CustomCharset::Format0(item.to_owned_table()),
559            ObjRefType::Format1(item) => CustomCharset::Format1(item.to_owned_table()),
560            ObjRefType::Format2(item) => CustomCharset::Format2(item.to_owned_table()),
561        }
562    }
563}
564
565impl FromTableRef<read_fonts::tables::postscript::CustomCharset<'_>> for CustomCharset {}
566
567impl<'a> FontRead<'a> for CustomCharset {
568    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
569        <read_fonts::tables::postscript::CustomCharset as FontRead>::read(data)
570            .map(|x| x.to_owned_table())
571    }
572}
573
574impl From<CharsetFormat0> for CustomCharset {
575    fn from(src: CharsetFormat0) -> CustomCharset {
576        CustomCharset::Format0(src)
577    }
578}
579
580impl From<CharsetFormat1> for CustomCharset {
581    fn from(src: CharsetFormat1) -> CustomCharset {
582        CustomCharset::Format1(src)
583    }
584}
585
586impl From<CharsetFormat2> for CustomCharset {
587    fn from(src: CharsetFormat2) -> CustomCharset {
588        CustomCharset::Format2(src)
589    }
590}
591
592/// Charset format 0.
593#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
594#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
595pub struct CharsetFormat0 {
596    /// Glyph name array.
597    pub glyph: Vec<u16>,
598}
599
600impl CharsetFormat0 {
601    /// Construct a new `CharsetFormat0`
602    pub fn new(glyph: Vec<u16>) -> Self {
603        Self { glyph }
604    }
605}
606
607impl FontWrite for CharsetFormat0 {
608    #[allow(clippy::unnecessary_cast)]
609    fn write_into(&self, writer: &mut TableWriter) {
610        (0 as u8).write_into(writer);
611        self.glyph.write_into(writer);
612    }
613    fn table_type(&self) -> TableType {
614        TableType::Named("CharsetFormat0")
615    }
616}
617
618impl Validate for CharsetFormat0 {
619    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
620}
621
622impl<'a> FromObjRef<read_fonts::tables::postscript::CharsetFormat0<'a>> for CharsetFormat0 {
623    fn from_obj_ref(obj: &read_fonts::tables::postscript::CharsetFormat0<'a>, _: FontData) -> Self {
624        let offset_data = obj.offset_data();
625        CharsetFormat0 {
626            glyph: obj.glyph().to_owned_obj(offset_data),
627        }
628    }
629}
630
631#[allow(clippy::needless_lifetimes)]
632impl<'a> FromTableRef<read_fonts::tables::postscript::CharsetFormat0<'a>> for CharsetFormat0 {}
633
634impl<'a> FontRead<'a> for CharsetFormat0 {
635    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
636        <read_fonts::tables::postscript::CharsetFormat0 as FontRead>::read(data)
637            .map(|x| x.to_owned_table())
638    }
639}
640
641/// Charset format 1.
642#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
643#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
644pub struct CharsetFormat1 {
645    /// Range1 array.
646    pub ranges: Vec<CharsetRange1>,
647}
648
649impl CharsetFormat1 {
650    /// Construct a new `CharsetFormat1`
651    pub fn new(ranges: Vec<CharsetRange1>) -> Self {
652        Self { ranges }
653    }
654}
655
656impl FontWrite for CharsetFormat1 {
657    #[allow(clippy::unnecessary_cast)]
658    fn write_into(&self, writer: &mut TableWriter) {
659        (1 as u8).write_into(writer);
660        self.ranges.write_into(writer);
661    }
662    fn table_type(&self) -> TableType {
663        TableType::Named("CharsetFormat1")
664    }
665}
666
667impl Validate for CharsetFormat1 {
668    fn validate_impl(&self, ctx: &mut ValidationCtx) {
669        ctx.in_table("CharsetFormat1", |ctx| {
670            ctx.in_field("ranges", |ctx| {
671                self.ranges.validate_impl(ctx);
672            });
673        })
674    }
675}
676
677impl<'a> FromObjRef<read_fonts::tables::postscript::CharsetFormat1<'a>> for CharsetFormat1 {
678    fn from_obj_ref(obj: &read_fonts::tables::postscript::CharsetFormat1<'a>, _: FontData) -> Self {
679        let offset_data = obj.offset_data();
680        CharsetFormat1 {
681            ranges: obj.ranges().to_owned_obj(offset_data),
682        }
683    }
684}
685
686#[allow(clippy::needless_lifetimes)]
687impl<'a> FromTableRef<read_fonts::tables::postscript::CharsetFormat1<'a>> for CharsetFormat1 {}
688
689impl<'a> FontRead<'a> for CharsetFormat1 {
690    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
691        <read_fonts::tables::postscript::CharsetFormat1 as FontRead>::read(data)
692            .map(|x| x.to_owned_table())
693    }
694}
695
696/// Range struct for Charset format 1.
697#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
698#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
699pub struct CharsetRange1 {
700    /// First glyph in range.
701    pub first: u16,
702    /// Glyphs left in range (excluding first).
703    pub n_left: u8,
704}
705
706impl CharsetRange1 {
707    /// Construct a new `CharsetRange1`
708    pub fn new(first: u16, n_left: u8) -> Self {
709        Self { first, n_left }
710    }
711}
712
713impl FontWrite for CharsetRange1 {
714    fn write_into(&self, writer: &mut TableWriter) {
715        self.first.write_into(writer);
716        self.n_left.write_into(writer);
717    }
718    fn table_type(&self) -> TableType {
719        TableType::Named("CharsetRange1")
720    }
721}
722
723impl Validate for CharsetRange1 {
724    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
725}
726
727impl FromObjRef<read_fonts::tables::postscript::CharsetRange1> for CharsetRange1 {
728    fn from_obj_ref(obj: &read_fonts::tables::postscript::CharsetRange1, _: FontData) -> Self {
729        CharsetRange1 {
730            first: obj.first(),
731            n_left: obj.n_left(),
732        }
733    }
734}
735
736/// Charset format 2.
737#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
738#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
739pub struct CharsetFormat2 {
740    /// Range2 array.
741    pub ranges: Vec<CharsetRange2>,
742}
743
744impl CharsetFormat2 {
745    /// Construct a new `CharsetFormat2`
746    pub fn new(ranges: Vec<CharsetRange2>) -> Self {
747        Self { ranges }
748    }
749}
750
751impl FontWrite for CharsetFormat2 {
752    #[allow(clippy::unnecessary_cast)]
753    fn write_into(&self, writer: &mut TableWriter) {
754        (2 as u8).write_into(writer);
755        self.ranges.write_into(writer);
756    }
757    fn table_type(&self) -> TableType {
758        TableType::Named("CharsetFormat2")
759    }
760}
761
762impl Validate for CharsetFormat2 {
763    fn validate_impl(&self, ctx: &mut ValidationCtx) {
764        ctx.in_table("CharsetFormat2", |ctx| {
765            ctx.in_field("ranges", |ctx| {
766                self.ranges.validate_impl(ctx);
767            });
768        })
769    }
770}
771
772impl<'a> FromObjRef<read_fonts::tables::postscript::CharsetFormat2<'a>> for CharsetFormat2 {
773    fn from_obj_ref(obj: &read_fonts::tables::postscript::CharsetFormat2<'a>, _: FontData) -> Self {
774        let offset_data = obj.offset_data();
775        CharsetFormat2 {
776            ranges: obj.ranges().to_owned_obj(offset_data),
777        }
778    }
779}
780
781#[allow(clippy::needless_lifetimes)]
782impl<'a> FromTableRef<read_fonts::tables::postscript::CharsetFormat2<'a>> for CharsetFormat2 {}
783
784impl<'a> FontRead<'a> for CharsetFormat2 {
785    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
786        <read_fonts::tables::postscript::CharsetFormat2 as FontRead>::read(data)
787            .map(|x| x.to_owned_table())
788    }
789}
790
791/// Range struct for Charset format 2.
792#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
793#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
794pub struct CharsetRange2 {
795    /// First glyph in range.
796    pub first: u16,
797    /// Glyphs left in range (excluding first).
798    pub n_left: u16,
799}
800
801impl CharsetRange2 {
802    /// Construct a new `CharsetRange2`
803    pub fn new(first: u16, n_left: u16) -> Self {
804        Self { first, n_left }
805    }
806}
807
808impl FontWrite for CharsetRange2 {
809    fn write_into(&self, writer: &mut TableWriter) {
810        self.first.write_into(writer);
811        self.n_left.write_into(writer);
812    }
813    fn table_type(&self) -> TableType {
814        TableType::Named("CharsetRange2")
815    }
816}
817
818impl Validate for CharsetRange2 {
819    fn validate_impl(&self, _ctx: &mut ValidationCtx) {}
820}
821
822impl FromObjRef<read_fonts::tables::postscript::CharsetRange2> for CharsetRange2 {
823    fn from_obj_ref(obj: &read_fonts::tables::postscript::CharsetRange2, _: FontData) -> Self {
824        CharsetRange2 {
825            first: obj.first(),
826            n_left: obj.n_left(),
827        }
828    }
829}