/src/fontations/skera/src/offset_array.rs
Line | Count | Source |
1 | | //! Subset arrays of offsets |
2 | | use crate::{offset::SerializeSubset, Plan, SerializeErrorFlags, Serializer, SubsetTable}; |
3 | | use write_fonts::{ |
4 | | read::{ArrayOfNullableOffsets, ArrayOfOffsets, FontReadWithArgs, Offset, ReadArgs, ReadError}, |
5 | | types::{FixedSize, Scalar}, |
6 | | }; |
7 | | |
8 | | pub(crate) trait SubsetOffsetArray<'a, T: SubsetTable<'a>> { |
9 | | fn subset_offset( |
10 | | &self, |
11 | | idx: usize, |
12 | | s: &mut Serializer, |
13 | | plan: &Plan, |
14 | | args: T::ArgsForSubset, |
15 | | ) -> Result<(), SerializeErrorFlags>; |
16 | | } |
17 | | |
18 | | impl<'a, T, O> SubsetOffsetArray<'a, T> for ArrayOfOffsets<'a, T, O> |
19 | | where |
20 | | O: Scalar + Offset + FixedSize + SerializeSubset, |
21 | | T: ReadArgs + FontReadWithArgs<'a> + SubsetTable<'a>, |
22 | | T::Args: Copy + 'static, |
23 | | { |
24 | 0 | fn subset_offset( |
25 | 0 | &self, |
26 | 0 | idx: usize, |
27 | 0 | s: &mut Serializer, |
28 | 0 | plan: &Plan, |
29 | 0 | args: T::ArgsForSubset, |
30 | 0 | ) -> Result<(), SerializeErrorFlags> { |
31 | 0 | let t = match self.get(idx) { |
32 | 0 | Err(ReadError::NullOffset) => return Err(SerializeErrorFlags::SERIALIZE_ERROR_EMPTY), |
33 | 0 | Ok(table) => table, |
34 | 0 | Err(_) => return Err(s.set_err(SerializeErrorFlags::SERIALIZE_ERROR_READ_ERROR)), |
35 | | }; |
36 | 0 | let snap = s.snapshot(); |
37 | 0 | let offset_pos = s.allocate_size(O::RAW_BYTE_LEN, true)?; |
38 | | |
39 | 0 | if let Err(e) = O::serialize_subset(&t, s, plan, args, offset_pos) { |
40 | 0 | s.revert_snapshot(snap); |
41 | 0 | return Err(e); |
42 | 0 | } |
43 | | |
44 | 0 | Ok(()) |
45 | 0 | } Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::colr::Paint, font_types::offset::Offset32> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::colr::Paint>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::AttachPoint> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gdef::AttachPoint>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::LigGlyph> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gdef::LigGlyph>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gpos::LigatureAttach> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gpos::LigatureAttach>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gpos::PositionLookup> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gpos::PositionLookup>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gpos::PairSet> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gpos::PairSet>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::LigatureSet> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gsub::LigatureSet>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::AlternateSet> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gsub::AlternateSet>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::SubstitutionLookup> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gsub::SubstitutionLookup>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::Sequence> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::gsub::Sequence>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::CoverageTable, font_types::offset::Offset32> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::layout::CoverageTable>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::Condition, font_types::offset::Offset32> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::layout::Condition>>::subset_offset |
46 | | } |
47 | | |
48 | | impl<'a, T, O> SubsetOffsetArray<'a, T> for ArrayOfNullableOffsets<'a, T, O> |
49 | | where |
50 | | O: Scalar + Offset + FixedSize + SerializeSubset, |
51 | | T: ReadArgs + FontReadWithArgs<'a> + SubsetTable<'a>, |
52 | | T::Args: Copy + 'static, |
53 | | { |
54 | 0 | fn subset_offset( |
55 | 0 | &self, |
56 | 0 | idx: usize, |
57 | 0 | s: &mut Serializer, |
58 | 0 | plan: &Plan, |
59 | 0 | args: T::ArgsForSubset, |
60 | 0 | ) -> Result<(), SerializeErrorFlags> { |
61 | 0 | match self.get(idx) { |
62 | 0 | Some(Ok(t)) => { |
63 | 0 | let snap = s.snapshot(); |
64 | 0 | let offset_pos = s.allocate_size(O::RAW_BYTE_LEN, true)?; |
65 | | |
66 | 0 | match O::serialize_subset(&t, s, plan, args, offset_pos) { |
67 | 0 | Ok(_) => Ok(()), |
68 | 0 | Err(e) => { |
69 | 0 | s.revert_snapshot(snap); |
70 | 0 | Err(e) |
71 | | } |
72 | | } |
73 | | } |
74 | 0 | None => Err(SerializeErrorFlags::SERIALIZE_ERROR_EMPTY), |
75 | 0 | Some(Err(_)) => Err(s.set_err(SerializeErrorFlags::SERIALIZE_ERROR_READ_ERROR)), |
76 | | } |
77 | 0 | } Unexecuted instantiation: <read_fonts::offset_array::ArrayOfNullableOffsets<read_fonts::tables::layout::SequenceRuleSet> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::layout::SequenceRuleSet>>::subset_offset Unexecuted instantiation: <read_fonts::offset_array::ArrayOfNullableOffsets<read_fonts::tables::layout::ChainedSequenceRuleSet> as skera::offset_array::SubsetOffsetArray<read_fonts::tables::layout::ChainedSequenceRuleSet>>::subset_offset |
78 | | } |
79 | | |
80 | | pub(crate) trait IterNullableHelper<'a, T> { |
81 | | fn iter_as_nullable(&self) -> impl Iterator<Item = Option<Result<T, ReadError>>> + 'a; |
82 | | } |
83 | | |
84 | | impl<'a, T, O> IterNullableHelper<'a, T> for ArrayOfOffsets<'a, T, O> |
85 | | // these bounds have to match what is in the read-fonts impl block that has the normal `iter` method |
86 | | where |
87 | | O: Scalar + Offset, |
88 | | T: ReadArgs + FontReadWithArgs<'a>, |
89 | | T::Args: Copy + 'static, |
90 | | { |
91 | 0 | fn iter_as_nullable(&self) -> impl Iterator<Item = Option<Result<T, ReadError>>> + 'a { |
92 | 0 | self.iter().map(|off| match off { |
93 | 0 | Err(ReadError::NullOffset) => None, |
94 | 0 | other => Some(other), |
95 | 0 | }) Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::base::BaseCoord> as skera::offset_array::IterNullableHelper<read_fonts::tables::base::BaseCoord>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::CaretValue> as skera::offset_array::IterNullableHelper<read_fonts::tables::gdef::CaretValue>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::LigGlyph> as skera::offset_array::IterNullableHelper<read_fonts::tables::gdef::LigGlyph>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::Ligature> as skera::offset_array::IterNullableHelper<read_fonts::tables::gsub::Ligature>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::SequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::SequenceRule>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::CoverageTable> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::CoverageTable>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::CoverageTable, font_types::offset::Offset32> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::CoverageTable>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ClassSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ClassSequenceRule>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ChainedSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ChainedSequenceRule>>::iter_as_nullable::{closure#0}Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ChainedClassSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ChainedClassSequenceRule>>::iter_as_nullable::{closure#0} |
96 | 0 | } Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::base::BaseCoord> as skera::offset_array::IterNullableHelper<read_fonts::tables::base::BaseCoord>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::CaretValue> as skera::offset_array::IterNullableHelper<read_fonts::tables::gdef::CaretValue>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gdef::LigGlyph> as skera::offset_array::IterNullableHelper<read_fonts::tables::gdef::LigGlyph>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::gsub::Ligature> as skera::offset_array::IterNullableHelper<read_fonts::tables::gsub::Ligature>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::SequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::SequenceRule>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::CoverageTable> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::CoverageTable>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::CoverageTable, font_types::offset::Offset32> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::CoverageTable>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ClassSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ClassSequenceRule>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ChainedSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ChainedSequenceRule>>::iter_as_nullable Unexecuted instantiation: <read_fonts::offset_array::ArrayOfOffsets<read_fonts::tables::layout::ChainedClassSequenceRule> as skera::offset_array::IterNullableHelper<read_fonts::tables::layout::ChainedClassSequenceRule>>::iter_as_nullable |
97 | | } |