Coverage Report

Created: 2025-07-23 06:50

/src/fontations/read-fonts/generated/generated_cblc.rs
Line
Count
Source (jump to first uncovered line)
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)]
6
use crate::codegen_prelude::*;
7
8
/// The [Color Bitmap Location](https://learn.microsoft.com/en-us/typography/opentype/spec/cblc) table
9
#[derive(Debug, Clone, Copy)]
10
#[doc(hidden)]
11
pub struct CblcMarker {
12
    bitmap_sizes_byte_len: usize,
13
}
14
15
impl CblcMarker {
16
0
    pub fn major_version_byte_range(&self) -> Range<usize> {
17
0
        let start = 0;
18
0
        start..start + u16::RAW_BYTE_LEN
19
0
    }
20
21
0
    pub fn minor_version_byte_range(&self) -> Range<usize> {
22
0
        let start = self.major_version_byte_range().end;
23
0
        start..start + u16::RAW_BYTE_LEN
24
0
    }
25
26
0
    pub fn num_sizes_byte_range(&self) -> Range<usize> {
27
0
        let start = self.minor_version_byte_range().end;
28
0
        start..start + u32::RAW_BYTE_LEN
29
0
    }
30
31
0
    pub fn bitmap_sizes_byte_range(&self) -> Range<usize> {
32
0
        let start = self.num_sizes_byte_range().end;
33
0
        start..start + self.bitmap_sizes_byte_len
34
0
    }
35
}
36
37
impl MinByteRange for CblcMarker {
38
0
    fn min_byte_range(&self) -> Range<usize> {
39
0
        0..self.bitmap_sizes_byte_range().end
40
0
    }
41
}
42
43
impl TopLevelTable for Cblc<'_> {
44
    /// `CBLC`
45
    const TAG: Tag = Tag::new(b"CBLC");
46
}
47
48
impl<'a> FontRead<'a> for Cblc<'a> {
49
0
    fn read(data: FontData<'a>) -> Result<Self, ReadError> {
50
0
        let mut cursor = data.cursor();
51
0
        cursor.advance::<u16>();
52
0
        cursor.advance::<u16>();
53
0
        let num_sizes: u32 = cursor.read()?;
54
0
        let bitmap_sizes_byte_len = (num_sizes as usize)
55
0
            .checked_mul(BitmapSize::RAW_BYTE_LEN)
56
0
            .ok_or(ReadError::OutOfBounds)?;
57
0
        cursor.advance_by(bitmap_sizes_byte_len);
58
0
        cursor.finish(CblcMarker {
59
0
            bitmap_sizes_byte_len,
60
0
        })
61
0
    }
62
}
63
64
/// The [Color Bitmap Location](https://learn.microsoft.com/en-us/typography/opentype/spec/cblc) table
65
pub type Cblc<'a> = TableRef<'a, CblcMarker>;
66
67
#[allow(clippy::needless_lifetimes)]
68
impl<'a> Cblc<'a> {
69
    /// Major version of the CBLC table, = 3.
70
0
    pub fn major_version(&self) -> u16 {
71
0
        let range = self.shape.major_version_byte_range();
72
0
        self.data.read_at(range.start).unwrap()
73
0
    }
74
75
    /// Minor version of CBLC table, = 0.
76
0
    pub fn minor_version(&self) -> u16 {
77
0
        let range = self.shape.minor_version_byte_range();
78
0
        self.data.read_at(range.start).unwrap()
79
0
    }
80
81
    /// Number of BitmapSize records.
82
0
    pub fn num_sizes(&self) -> u32 {
83
0
        let range = self.shape.num_sizes_byte_range();
84
0
        self.data.read_at(range.start).unwrap()
85
0
    }
86
87
    /// BitmapSize records array.
88
0
    pub fn bitmap_sizes(&self) -> &'a [BitmapSize] {
89
0
        let range = self.shape.bitmap_sizes_byte_range();
90
0
        self.data.read_array(range).unwrap()
91
0
    }
92
}
93
94
#[cfg(feature = "experimental_traverse")]
95
impl<'a> SomeTable<'a> for Cblc<'a> {
96
    fn type_name(&self) -> &str {
97
        "Cblc"
98
    }
99
    fn get_field(&self, idx: usize) -> Option<Field<'a>> {
100
        match idx {
101
            0usize => Some(Field::new("major_version", self.major_version())),
102
            1usize => Some(Field::new("minor_version", self.minor_version())),
103
            2usize => Some(Field::new("num_sizes", self.num_sizes())),
104
            3usize => Some(Field::new(
105
                "bitmap_sizes",
106
                traversal::FieldType::array_of_records(
107
                    stringify!(BitmapSize),
108
                    self.bitmap_sizes(),
109
                    self.offset_data(),
110
                ),
111
            )),
112
            _ => None,
113
        }
114
    }
115
}
116
117
#[cfg(feature = "experimental_traverse")]
118
#[allow(clippy::needless_lifetimes)]
119
impl<'a> std::fmt::Debug for Cblc<'a> {
120
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
121
        (self as &dyn SomeTable<'a>).fmt(f)
122
    }
123
}