ttf_parser/tables/
hhea.rs

1//! A [Horizontal Header Table](
2//! https://docs.microsoft.com/en-us/typography/opentype/spec/hhea) implementation.
3
4use crate::parser::Stream;
5
6/// A [Horizontal Header Table](https://docs.microsoft.com/en-us/typography/opentype/spec/hhea).
7#[derive(Clone, Copy, Debug)]
8pub struct Table {
9    /// Face ascender.
10    pub ascender: i16,
11    /// Face descender.
12    pub descender: i16,
13    /// Face line gap.
14    pub line_gap: i16,
15    /// Number of metrics in the `hmtx` table.
16    pub number_of_metrics: u16,
17}
18
19impl Table {
20    /// Parses a table from raw data.
21    pub fn parse(data: &[u8]) -> Option<Self> {
22        // Do not check the exact length, because some fonts include
23        // padding in table's length in table records, which is incorrect.
24        if data.len() < 36 {
25            return None;
26        }
27
28        let mut s = Stream::new(data);
29        s.skip::<u32>(); // version
30        let ascender = s.read::<i16>()?;
31        let descender = s.read::<i16>()?;
32        let line_gap = s.read::<i16>()?;
33        s.advance(24);
34        let number_of_metrics = s.read::<u16>()?;
35
36        Some(Table {
37            ascender,
38            descender,
39            line_gap,
40            number_of_metrics,
41        })
42    }
43}