pdf.js
Version:
A PDF generation library for Node.js
69 lines (56 loc) • 2.27 kB
text/coffeescript
fs = require 'fs'
Data = require '../data'
DFont = require './dfont'
Directory = require './directory'
NameTable = require './tables/name'
HeadTable = require './tables/head'
CmapTable = require './tables/cmap'
HmtxTable = require './tables/hmtx'
HheaTable = require './tables/hhea'
MaxpTable = require './tables/maxp'
PostTable = require './tables/post'
OS2Table = require './tables/os2'
LocaTable = require './tables/loca'
GlyfTable = require './tables/glyf'
class TTFFont
: (filename, name) ->
contents = fs.readFileSync filename
new TTFFont(contents, name)
: (filename, family) ->
dfont = DFont.open(filename)
new TTFFont dfont.getNamedFont(family)
constructor: ( , name) ->
data = = new Data(rawData)
if data.readString(4) is 'ttcf'
throw new Error "Must specify a font name for TTC files." if not name
# This is a TrueType Collection
version = data.readInt()
numFonts = data.readInt()
offsets = []
for i in [0...numFonts]
offsets[i] = data.readInt()
for offset, i in offsets
data.pos = offset
return if .postscriptName is name
throw new Error "Font #{name} not found in TTC file."
else
data.pos = 0
parse: ->
= new Directory( )
= new HeadTable(this)
= new NameTable(this)
= new CmapTable(this)
= new HheaTable(this)
= new MaxpTable(this)
= new HmtxTable(this)
= new PostTable(this)
= new OS2Table(this)
= new LocaTable(this)
= new GlyfTable(this)
= ( .exists and .ascender) or .ascender
= ( .exists and .decender) or .decender
= ( .exists and .lineGap) or .lineGap
= [ .xMin, .yMin, .xMax, .yMax]
module.exports = TTFFont