This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative 'reader'
|
||||
|
||||
module TTFunk
|
||||
# SFNT table
|
||||
class Table
|
||||
include Reader
|
||||
|
||||
# File this table is in.
|
||||
# @return [TTFunk::File]
|
||||
attr_reader :file
|
||||
|
||||
# This table's offset from the file beginning.
|
||||
# @return [Integer]
|
||||
attr_reader :offset
|
||||
|
||||
# This table's length in byes.
|
||||
# @return [Integer, nil]
|
||||
attr_reader :length
|
||||
|
||||
# @param file [TTFunk::File]
|
||||
def initialize(file)
|
||||
@file = file
|
||||
@offset = nil
|
||||
@length = nil
|
||||
|
||||
info = file.directory_info(tag)
|
||||
|
||||
if info
|
||||
@offset = info[:offset]
|
||||
@length = info[:length]
|
||||
|
||||
parse_from(@offset) { parse! }
|
||||
end
|
||||
end
|
||||
|
||||
# Does this table exist in the file?
|
||||
#
|
||||
# @return [Boolean]
|
||||
def exists?
|
||||
!@offset.nil?
|
||||
end
|
||||
|
||||
# Raw bytes of this table in the file.
|
||||
#
|
||||
# @return [String, nil]
|
||||
def raw
|
||||
if exists?
|
||||
parse_from(offset) { io.read(length) }
|
||||
end
|
||||
end
|
||||
|
||||
# Table tag.
|
||||
#
|
||||
# @return [String]
|
||||
def tag
|
||||
self.class.name.split('::').last.downcase
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse!
|
||||
# do nothing, by default
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user