///|
/// Parse vhea table: returns (v_ascent, v_descent, num_v_metrics)
pub fn parse_vhea(reader : BinaryReader, offset : Int) -> (Int, Int, Int) {
let v_ascent = reader.peek_int16_at(offset + 4)
let v_descent = reader.peek_int16_at(offset + 6)
let num_v_metrics = reader.peek_uint16_at(offset + 34)
(v_ascent, v_descent, num_v_metrics)
}
///|
/// Parse vmtx table: returns (advance_heights, top_side_bearings)
pub fn parse_vmtx(
reader : BinaryReader,
offset : Int,
num_glyphs : Int,
num_v_metrics : Int,
) -> (Array[Int], Array[Int]) {
let advance_heights = Array::new(capacity=num_glyphs)
let top_side_bearings = Array::new(capacity=num_glyphs)
reader.seek(offset)
let mut last_advance = 0
for i = 0; i < num_glyphs; i = i + 1 {
if i < num_v_metrics {
last_advance = reader.read_uint16()
advance_heights.push(last_advance)
top_side_bearings.push(reader.read_int16())
} else {
advance_heights.push(last_advance)
top_side_bearings.push(reader.read_int16())
}
}
(advance_heights, top_side_bearings)
}