use crate::parser::{NumFrom, Stream};
use crate::GlyphId;
#[derive(Clone, Copy, Debug)]
pub struct Subtable0<'a> {
pub glyph_ids: &'a [u8],
}
impl<'a> Subtable0<'a> {
pub fn parse(data: &'a [u8]) -> Option<Self> {
let mut s = Stream::new(data);
s.skip::<u16>(); s.skip::<u16>(); s.skip::<u16>(); let glyph_ids = s.read_bytes(256)?;
Some(Self { glyph_ids })
}
pub fn glyph_index(&self, code_point: u32) -> Option<GlyphId> {
let glyph_id = *self.glyph_ids.get(usize::num_from(code_point))?;
if glyph_id != 0 {
Some(GlyphId(u16::from(glyph_id)))
} else {
None
}
}
pub fn codepoints(&self, mut f: impl FnMut(u32)) {
for (i, glyph_id) in self.glyph_ids.iter().enumerate() {
if *glyph_id != 0 {
f(i as u32);
}
}
}
}