read_fonts/tables/layout/
feature.rs

1//! Additional support for working with OpenType features.
2
3use super::{Feature, FeatureList, ReadError, TaggedElement};
4
5impl<'a> FeatureList<'a> {
6    /// Returns the tag and feature at the given index.
7    pub fn get(&self, index: u16) -> Result<TaggedElement<Feature<'a>>, ReadError> {
8        self.feature_records()
9            .get(index as usize)
10            .ok_or(ReadError::OutOfBounds)
11            .and_then(|rec| {
12                Ok(TaggedElement::new(
13                    rec.feature_tag(),
14                    rec.feature(self.offset_data())?,
15                ))
16            })
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use crate::{FontRef, TableProvider, Tag};
23
24    #[test]
25    fn feature_list_get() {
26        let font = FontRef::new(font_test_data::NOTOSERIF_AUTOHINT_SHAPING).unwrap();
27        let gsub = font.gsub().unwrap();
28        let feature_list = gsub.feature_list().unwrap();
29        assert_eq!(feature_list.get(0).unwrap().tag, Tag::new(b"c2sc"));
30        assert_eq!(feature_list.get(1).unwrap().tag, Tag::new(b"liga"));
31        assert!(feature_list.get(2).is_err());
32    }
33}