read_fonts/tables/
base.rs

1//! The [BASE](https://learn.microsoft.com/en-us/typography/opentype/spec/base) table
2
3use super::{layout::DeviceOrVariationIndex, variations::ItemVariationStore};
4
5include!("../../generated/generated_base.rs");
6
7#[cfg(test)]
8mod tests {
9    use font_test_data::bebuffer::BeBuffer;
10    use font_types::MajorMinor;
11
12    use super::*;
13
14    #[test]
15    /// https://learn.microsoft.com/en-us/typography/opentype/spec/base#base-table-examples
16    fn example_1() {
17        let data = BeBuffer::new()
18            .push(MajorMinor::VERSION_1_0)
19            .push(8u16) // horizaxis offset
20            .push(0x10c_u16) // verticalaxis
21            // axis table
22            .push(4u16) //basetaglist
23            .push(0x12_u16) // basescript list
24            // base tag list
25            .push(3u16) // count
26            .push(Tag::new(b"hang"))
27            .push(Tag::new(b"ideo"))
28            .push(Tag::new(b"romn"))
29            // basescriptlist
30            .push(4u16) // basescript count
31            .push(Tag::new(b"cyrl"))
32            .push(0x1a_u16)
33            .push(Tag::new(b"devn"))
34            .push(0x60_u16)
35            .push(Tag::new(b"hani"))
36            .push(0x8a_u16)
37            .push(Tag::new(b"latn"))
38            .push(0xb4_u16);
39
40        let base = Base::read(data.data().into()).unwrap();
41        assert_eq!(base.version(), MajorMinor::VERSION_1_0);
42        let horiz = base.horiz_axis().unwrap().unwrap();
43        let base_tag = horiz.base_tag_list().unwrap().unwrap();
44        assert_eq!(
45            base_tag.baseline_tags(),
46            &[Tag::new(b"hang"), Tag::new(b"ideo"), Tag::new(b"romn")]
47        );
48        assert_eq!(base_tag.min_byte_range().end, 14);
49        let base_script = horiz.base_script_list().unwrap();
50        assert_eq!(
51            base_script.base_script_records()[3].base_script_tag(),
52            Tag::new(b"latn")
53        );
54    }
55}