# frozen_string_literal: true require_relative '../../reader' module TTFunk class Table class Glyf # Simple TrueType glyph class Simple # Glyph ID. # @return [Integer] attr_reader :id # Binary serialization of this glyph. # @return [String] attr_reader :raw # Number of contours in this glyph. # @return [Integer] attr_reader :number_of_contours # Minimum x for coordinate. # @return [Integer] attr_reader :x_min # Minimum y for coordinate. # @return [Integer] attr_reader :y_min # Maximum x for coordinate. # @return [Integer] attr_reader :x_max # Maximum y for coordinate. # @return [Integer] attr_reader :y_max # Point indices for the last point of each contour. # @return [Array] attr_reader :end_points_of_contours # Total number of bytes for instructions. # @return [Integer] attr_reader :instruction_length # Instruction byte code. # @return [Array] attr_reader :instructions # @param id [Integer] glyph ID. # @param raw [String] def initialize(id, raw) @id = id @raw = raw io = StringIO.new(raw) @number_of_contours, @x_min, @y_min, @x_max, @y_max = io.read(10).unpack('n*').map { |i| BinUtils.twos_comp_to_int(i, bit_width: 16) } @end_points_of_contours = io.read(number_of_contours * 2).unpack('n*') @instruction_length = io.read(2).unpack1('n') @instructions = io.read(instruction_length).unpack('C*') end # Is this glyph compound? # @return [false] def compound? false end # Recode glyph. # # @param _mapping Unused, here for API compatibility. # @return [String] def recode(_mapping) raw end # End point index of last contour. # @return [Integer] def end_point_of_last_contour end_points_of_contours.last + 1 end end end end end