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 34
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 38
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 61
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 30
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 42
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_or_path.open('rb')
end

Public Instance Methods

ascent() click to toggle source
# File lib/ttfunk.rb, line 66
def ascent
  @ascent ||= (os2.exists? && os2.ascent && os2.ascent.nonzero?) ||
    horizontal_header.ascent
end
bbox() click to toggle source
# File lib/ttfunk.rb, line 81
def bbox
  [header.x_min, header.y_min, header.x_max, header.y_max]
end
cff() click to toggle source
# File lib/ttfunk.rb, line 137
def cff
  @cff ||= TTFunk::Table::Cff.new(self)
end
cmap() click to toggle source
# File lib/ttfunk.rb, line 93
def cmap
  @cmap ||= TTFunk::Table::Cmap.new(self)
end
descent() click to toggle source
# File lib/ttfunk.rb, line 71
def descent
  @descent ||= (os2.exists? && os2.descent && os2.descent.nonzero?) ||
    horizontal_header.descent
end
digital_signature() click to toggle source
# File lib/ttfunk.rb, line 148
def digital_signature
  @digital_signature ||=
    if directory.tables.include?(TTFunk::Table::Dsig::TAG)
      TTFunk::Table::Dsig.new(self)
    end
end
directory_info(tag) click to toggle source
# File lib/ttfunk.rb, line 85
def directory_info(tag)
  directory.tables[tag.to_s]
end
find_glyph(glyph_id) click to toggle source
# File lib/ttfunk.rb, line 155
def find_glyph(glyph_id)
  if cff.exists?
    cff.top_index[0].charstrings_index[glyph_id].glyph
  else
    glyph_outlines.for(glyph_id)
  end
end
glyph_locations() click to toggle source
# File lib/ttfunk.rb, line 125
def glyph_locations
  @glyph_locations ||= TTFunk::Table::Loca.new(self)
end
glyph_outlines() click to toggle source
# File lib/ttfunk.rb, line 129
def glyph_outlines
  @glyph_outlines ||= TTFunk::Table::Glyf.new(self)
end
header() click to toggle source
# File lib/ttfunk.rb, line 89
def header
  @header ||= TTFunk::Table::Head.new(self)
end
horizontal_header() click to toggle source
# File lib/ttfunk.rb, line 97
def horizontal_header
  @horizontal_header ||= TTFunk::Table::Hhea.new(self)
end
horizontal_metrics() click to toggle source
# File lib/ttfunk.rb, line 101
def horizontal_metrics
  @horizontal_metrics ||= TTFunk::Table::Hmtx.new(self)
end
kerning() click to toggle source
# File lib/ttfunk.rb, line 109
def kerning
  @kerning ||= TTFunk::Table::Kern.new(self)
end
line_gap() click to toggle source
# File lib/ttfunk.rb, line 76
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 105
def maximum_profile
  @maximum_profile ||= TTFunk::Table::Maxp.new(self)
end
name() click to toggle source
# File lib/ttfunk.rb, line 113
def name
  @name ||= TTFunk::Table::Name.new(self)
end
os2() click to toggle source
# File lib/ttfunk.rb, line 117
def os2
  @os2 ||= TTFunk::Table::OS2.new(self)
end
postscript() click to toggle source
# File lib/ttfunk.rb, line 121
def postscript
  @postscript ||= TTFunk::Table::Post.new(self)
end
sbix() click to toggle source
# File lib/ttfunk.rb, line 133
def sbix
  @sbix ||= TTFunk::Table::Sbix.new(self)
end
vertical_origins() click to toggle source
# File lib/ttfunk.rb, line 141
def vertical_origins
  @vertical_origins ||=
    if directory.tables.include?(TTFunk::Table::Vorg::TAG)
      TTFunk::Table::Vorg.new(self)
    end
end