1#[allow(unused_imports)]
6use crate::codegen_prelude::*;
7
8#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
10#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
11pub struct Index1 {
12 pub count: u16,
14 pub off_size: u8,
16 pub offsets: Vec<u8>,
18 pub data: Vec<u8>,
20}
21
22impl Index1 {
23 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
73#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
74pub struct Index2 {
75 pub count: u32,
77 pub off_size: u8,
79 pub offsets: Vec<u8>,
81 pub data: Vec<u8>,
83}
84
85impl Index2 {
86 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#[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 pub fn format_0(fds: Vec<u8>) -> Self {
146 Self::Format0(FdSelectFormat0::new(fds))
147 }
148
149 pub fn format_3(ranges: Vec<FdSelectRange3>, sentinel: u16) -> Self {
151 Self::Format3(FdSelectFormat3::new(ranges, sentinel))
152 }
153
154 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
234pub struct FdSelectFormat0 {
235 pub fds: Vec<u8>,
237}
238
239impl FdSelectFormat0 {
240 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
285#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
286pub struct FdSelectFormat3 {
287 pub ranges: Vec<FdSelectRange3>,
289 pub sentinel: u16,
291}
292
293impl FdSelectFormat3 {
294 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
351#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
352pub struct FdSelectRange3 {
353 pub first: u16,
355 pub fd: u8,
357}
358
359impl FdSelectRange3 {
360 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
391#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
392pub struct FdSelectFormat4 {
393 pub ranges: Vec<FdSelectRange4>,
395 pub sentinel: u32,
397}
398
399impl FdSelectFormat4 {
400 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
457#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
458pub struct FdSelectRange4 {
459 pub first: u32,
461 pub fd: u16,
463}
464
465impl FdSelectRange4 {
466 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#[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 pub fn format_0(glyph: Vec<u16>) -> Self {
507 Self::Format0(CharsetFormat0::new(glyph))
508 }
509
510 pub fn format_1(ranges: Vec<CharsetRange1>) -> Self {
512 Self::Format1(CharsetFormat1::new(ranges))
513 }
514
515 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
594#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
595pub struct CharsetFormat0 {
596 pub glyph: Vec<u16>,
598}
599
600impl CharsetFormat0 {
601 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
643#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
644pub struct CharsetFormat1 {
645 pub ranges: Vec<CharsetRange1>,
647}
648
649impl CharsetFormat1 {
650 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
698#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
699pub struct CharsetRange1 {
700 pub first: u16,
702 pub n_left: u8,
704}
705
706impl CharsetRange1 {
707 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
738#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
739pub struct CharsetFormat2 {
740 pub ranges: Vec<CharsetRange2>,
742}
743
744impl CharsetFormat2 {
745 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#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
793#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
794pub struct CharsetRange2 {
795 pub first: u16,
797 pub n_left: u16,
799}
800
801impl CharsetRange2 {
802 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}