//! The [VORG (Vertical Origin)](https://docs.microsoft.com/en-us/typography/opentype/spec/vorg) table. include!("../../generated/generated_vorg.rs"); impl Vorg<'_> { /// Returns the y coordinate of the of the glyph's vertical origin. pub fn vertical_origin_y(&self, glyph_id: GlyphId) -> i16 { let gid = glyph_id.to_u32(); let metrics = self.vert_origin_y_metrics(); match metrics.binary_search_by(|rec| rec.glyph_index().to_u32().cmp(&gid)) { Ok(ix) => metrics .get(ix) .map(|metric| metric.vert_origin_y()) .unwrap_or_default(), _ => self.default_vert_origin_y(), } } } #[cfg(test)] mod tests { use super::*; use crate::{FontRef, TableProvider}; #[test] fn vertical_origins() { let font = FontRef::new(font_test_data::VORG).unwrap(); let vorg = font.vorg().unwrap(); // Glyphs 1 and 3 have entries while 0 and 2 use the default value // of 880 assert_eq!(vorg.vertical_origin_y(GlyphId::new(0)), 880); assert_eq!(vorg.vertical_origin_y(GlyphId::new(1)), 867); assert_eq!(vorg.vertical_origin_y(GlyphId::new(2)), 880); assert_eq!(vorg.vertical_origin_y(GlyphId::new(3)), 824); } }