1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
# 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<Integer>]
attr_reader :end_points_of_contours
# Total number of bytes for instructions.
# @return [Integer]
attr_reader :instruction_length
# Instruction byte code.
# @return [Array<Integer>]
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
|