parseHmtx method

List<({int advanceWidth, int lsb})> parseHmtx()

Returns (advanceWidth, lsb) pairs in font units for each glyph.

The list length equals numGlyphs. Glyphs beyond _numberOfHMetrics share the last advance width (per the TTF spec).

Implementation

List<({int advanceWidth, int lsb})> parseHmtx() {
  final hmtx = _tableOffsets['hmtx'];
  if (hmtx == null) return [];

  final result = <({int advanceWidth, int lsb})>[];
  int lastAw = 0;

  for (int i = 0; i < _numberOfHMetrics; i++) {
    final off = hmtx + i * 4;
    final aw = _data.getUint16(off);
    final lsb = _data.getInt16(off + 2);
    result.add((advanceWidth: aw, lsb: lsb));
    lastAw = aw;
  }

  // Remaining glyphs reuse lastAw with individual lsb values.
  final extraBase = hmtx + _numberOfHMetrics * 4;
  for (int i = _numberOfHMetrics; i < _numGlyphs; i++) {
    final lsb = _data.getInt16(extraBase + (i - _numberOfHMetrics) * 2);
    result.add((advanceWidth: lastAw, lsb: lsb));
  }

  return result;
}