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 90 91 92 93 94 95 96 97 98 99 100 101 102
|
require 'stringio'
require 'ttfunk/directory'
require 'ttfunk/resource_file'
module TTFunk
class File
attr_reader :contents
attr_reader :directory
def self.open(file)
new(::File.open(file, "rb") { |f| f.read })
end
def self.from_dfont(file, which=0)
new(ResourceFile.open(file) { |dfont| dfont["sfnt", which] })
end
def initialize(contents)
@contents = StringIO.new(contents)
@directory = Directory.new(@contents)
end
def ascent
@ascent ||= (os2.exists? && os2.ascent && os2.ascent.nonzero?) || horizontal_header.ascent
end
def descent
@descent ||= (os2.exists? && os2.descent && os2.descent.nonzero?) || horizontal_header.descent
end
def line_gap
@line_gap ||= (os2.exists? && os2.line_gap && os2.line_gap.nonzero?) || horizontal_header.line_gap
end
def bbox
[header.x_min, header.y_min, header.x_max, header.y_max]
end
def directory_info(tag)
directory.tables[tag.to_s]
end
def header
@header ||= TTFunk::Table::Head.new(self)
end
def cmap
@cmap ||= TTFunk::Table::Cmap.new(self)
end
def horizontal_header
@horizontal_header ||= TTFunk::Table::Hhea.new(self)
end
def horizontal_metrics
@horizontal_metrics ||= TTFunk::Table::Hmtx.new(self)
end
def maximum_profile
@maximum_profile ||= TTFunk::Table::Maxp.new(self)
end
def kerning
@kerning ||= TTFunk::Table::Kern.new(self)
end
def name
@name ||= TTFunk::Table::Name.new(self)
end
def os2
@os2 ||= TTFunk::Table::OS2.new(self)
end
def postscript
@postscript ||= TTFunk::Table::Post.new(self)
end
def glyph_locations
@glyph_locations ||= TTFunk::Table::Loca.new(self)
end
def glyph_outlines
@glyph_outlines ||= TTFunk::Table::Glyf.new(self)
end
end
end
require "ttfunk/table/cmap"
require "ttfunk/table/glyf"
require "ttfunk/table/head"
require "ttfunk/table/hhea"
require "ttfunk/table/hmtx"
require "ttfunk/table/kern"
require "ttfunk/table/loca"
require "ttfunk/table/maxp"
require "ttfunk/table/name"
require "ttfunk/table/os2"
require "ttfunk/table/post"
|