class TTFunk::File

Attributes

contents[R]
directory[R]

Public Class Methods

from_dfont(file, which = 0) click to toggle source
# File lib/ttfunk.rb, line 17
def self.from_dfont(file, which = 0)
  new(ResourceFile.open(file) { |dfont| dfont['sfnt', which] })
end
from_ttc(file, which = 0) click to toggle source
# File lib/ttfunk.rb, line 21
def self.from_ttc(file, which = 0)
  Collection.open(file) { |ttc| ttc[which] }
end
new(contents, offset = 0) click to toggle source
# File lib/ttfunk.rb, line 44
def initialize(contents, offset = 0)
  @contents = StringIO.new(contents)
  @directory = Directory.new(@contents, offset)
end
open(io_or_path) click to toggle source
# File lib/ttfunk.rb, line 13
def self.open(io_or_path)
  new verify_and_open(io_or_path).read
end
verify_and_open(io_or_path) click to toggle source
# File lib/ttfunk.rb, line 25
def self.verify_and_open(io_or_path)
  # File or IO
  if io_or_path.respond_to?(:rewind)
    io = io_or_path
    # Rewind if the object we're passed is an IO, so that multiple embeds of
    # the same IO object will work
    io.rewind
    # read the file as binary so the size is calculated correctly
    # guard binmode because some objects acting io-like don't implement it
    io.binmode if io.respond_to?(:binmode)
    return io
  end
  # String or Pathname
  io_or_path = Pathname.new(io_or_path)
  raise ArgumentError, "#{io_or_path} not found" unless io_or_path.file?
  io = io_or_path.open('rb')
  io
end

Public Instance Methods

ascent() click to toggle source
# File lib/ttfunk.rb, line 49
def ascent
  @ascent ||= (os2.exists? && os2.ascent && os2.ascent.nonzero?) ||
    horizontal_header.ascent
end
bbox() click to toggle source
# File lib/ttfunk.rb, line 64
def bbox
  [header.x_min, header.y_min, header.x_max, header.y_max]
end
cmap() click to toggle source
# File lib/ttfunk.rb, line 76
def cmap
  @cmap ||= TTFunk::Table::Cmap.new(self)
end
descent() click to toggle source
# File lib/ttfunk.rb, line 54
def descent
  @descent ||= (os2.exists? && os2.descent && os2.descent.nonzero?) ||
    horizontal_header.descent
end
directory_info(tag) click to toggle source
# File lib/ttfunk.rb, line 68
def directory_info(tag)
  directory.tables[tag.to_s]
end
glyph_locations() click to toggle source
# File lib/ttfunk.rb, line 108
def glyph_locations
  @glyph_locations ||= TTFunk::Table::Loca.new(self)
end
glyph_outlines() click to toggle source
# File lib/ttfunk.rb, line 112
def glyph_outlines
  @glyph_outlines ||= TTFunk::Table::Glyf.new(self)
end
header() click to toggle source
# File lib/ttfunk.rb, line 72
def header
  @header ||= TTFunk::Table::Head.new(self)
end
horizontal_header() click to toggle source
# File lib/ttfunk.rb, line 80
def horizontal_header
  @horizontal_header ||= TTFunk::Table::Hhea.new(self)
end
horizontal_metrics() click to toggle source
# File lib/ttfunk.rb, line 84
def horizontal_metrics
  @horizontal_metrics ||= TTFunk::Table::Hmtx.new(self)
end
kerning() click to toggle source
# File lib/ttfunk.rb, line 92
def kerning
  @kerning ||= TTFunk::Table::Kern.new(self)
end
line_gap() click to toggle source
# File lib/ttfunk.rb, line 59
def line_gap
  @line_gap ||= (os2.exists? && os2.line_gap && os2.line_gap.nonzero?) ||
    horizontal_header.line_gap
end
maximum_profile() click to toggle source
# File lib/ttfunk.rb, line 88
def maximum_profile
  @maximum_profile ||= TTFunk::Table::Maxp.new(self)
end
name() click to toggle source
# File lib/ttfunk.rb, line 96
def name
  @name ||= TTFunk::Table::Name.new(self)
end
os2() click to toggle source
# File lib/ttfunk.rb, line 100
def os2
  @os2 ||= TTFunk::Table::OS2.new(self)
end
postscript() click to toggle source
# File lib/ttfunk.rb, line 104
def postscript
  @postscript ||= TTFunk::Table::Post.new(self)
end
sbix() click to toggle source
# File lib/ttfunk.rb, line 116
def sbix
  @sbix ||= TTFunk::Table::Sbix.new(self)
end