read_fonts/tables/layout/
feature.rs1use super::{Feature, FeatureList, ReadError, TaggedElement};
4
5impl<'a> FeatureList<'a> {
6 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}