You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/lib/font/standard.coffee

66 lines
2.6 KiB
CoffeeScript

AFMFont = require './afm'
PDFFont = require '../font'
fs = require 'fs'
class StandardFont extends PDFFont
constructor: (@document, @name, @id) ->
@font = new AFMFont STANDARD_FONTS[@name]()
{@ascender,@descender,@bbox,@lineGap} = @font
embed: ->
@dictionary.data =
Type: 'Font'
BaseFont: @name
Subtype: 'Type1'
Encoding: 'WinAnsiEncoding'
@dictionary.end()
encode: (text) ->
encoded = @font.encodeText text
glyphs = @font.glyphsForString '' + text
advances = @font.advancesForGlyphs glyphs
positions = []
for glyph, i in glyphs
positions.push
xAdvance: advances[i]
yAdvance: 0
xOffset: 0
yOffset: 0
advanceWidth: @font.widthOfGlyph glyph
return [encoded, positions]
widthOfString: (string, size) ->
glyphs = @font.glyphsForString '' + string
advances = @font.advancesForGlyphs glyphs
width = 0
for advance in advances
width += advance
scale = size / 1000
return width * scale
@isStandardFont: (name) ->
return name of STANDARD_FONTS
# This insanity is so browserify can inline the font files
STANDARD_FONTS =
"Courier": -> fs.readFileSync __dirname + "/../font/data/Courier.afm", 'utf8'
"Courier-Bold": -> fs.readFileSync __dirname + "/../font/data/Courier-Bold.afm", 'utf8'
"Courier-Oblique": -> fs.readFileSync __dirname + "/../font/data/Courier-Oblique.afm", 'utf8'
"Courier-BoldOblique": -> fs.readFileSync __dirname + "/../font/data/Courier-BoldOblique.afm", 'utf8'
"Helvetica": -> fs.readFileSync __dirname + "/../font/data/Helvetica.afm", 'utf8'
"Helvetica-Bold": -> fs.readFileSync __dirname + "/../font/data/Helvetica-Bold.afm", 'utf8'
"Helvetica-Oblique": -> fs.readFileSync __dirname + "/../font/data/Helvetica-Oblique.afm", 'utf8'
"Helvetica-BoldOblique": -> fs.readFileSync __dirname + "/../font/data/Helvetica-BoldOblique.afm", 'utf8'
"Times-Roman": -> fs.readFileSync __dirname + "/../font/data/Times-Roman.afm", 'utf8'
"Times-Bold": -> fs.readFileSync __dirname + "/../font/data/Times-Bold.afm", 'utf8'
"Times-Italic": -> fs.readFileSync __dirname + "/../font/data/Times-Italic.afm", 'utf8'
"Times-BoldItalic": -> fs.readFileSync __dirname + "/../font/data/Times-BoldItalic.afm", 'utf8'
"Symbol": -> fs.readFileSync __dirname + "/../font/data/Symbol.afm", 'utf8'
"ZapfDingbats": -> fs.readFileSync __dirname + "/../font/data/ZapfDingbats.afm", 'utf8'
module.exports = StandardFont