Class: Prawn::Font

Inherits:
Object
  • Object
show all
Defined in:
lib/prawn/font.rb,
lib/prawn/font/ttf.rb,
lib/prawn/font/afm.rb,
lib/prawn/font/dfont.rb

Overview

Provides font information and helper functions.

Experimental API (collapse)

Experimental API (collapse)

Constructor Details

- (Font) initialize(document, name, options = {})

:nodoc:



292
293
294
295
296
297
298
299
300
301
302
# File 'lib/prawn/font.rb', line 292

def initialize(document,name,options={}) #:nodoc:
  @document   = document
  @name       = name
  @options    = options

  @family     = options[:family]

  @identifier = generate_unique_id

  @references = {}
end

Instance Attribute Details

- (Object) family (readonly)

The current font family



274
275
276
# File 'lib/prawn/font.rb', line 274

def family
  @family
end

- (Object) name (readonly)

The current font name



271
272
273
# File 'lib/prawn/font.rb', line 271

def name
  @name
end

- (Object) options (readonly)

The options hash used to initialize the font



277
278
279
# File 'lib/prawn/font.rb', line 277

def options
  @options
end

Class Method Details

+ (Object) load(document, name, options = {})

Shortcut interface for constructing a font object. Filenames of the form *.ttf will call Font::TTF.new, *.dfont Font::DFont.new, and anything else will be passed through to Font::AFM.new()



283
284
285
286
287
288
289
290
# File 'lib/prawn/font.rb', line 283

def self.load(document,name,options={})
  case name.to_s
  when /\.ttf$/i   then TTF.new(document, name, options)
  when /\.dfont$/i then DFont.new(document, name, options)
  when /\.afm$/i   then AFM.new(document, name, options)
  else                  AFM.new(document, name, options)
  end
end

Instance Method Details

- (Object) add_to_current_page(subset)

Registers the given subset of the current font with the current PDF page. This is safe to call multiple times for a given font and subset, as it will only add the font the first time it is called.



354
355
356
357
# File 'lib/prawn/font.rb', line 354

def add_to_current_page(subset)
  @references[subset] ||= register(subset)
  @document.state.page.fonts.merge!(identifier_for(subset) => @references[subset])
end

- (Object) ascender

The size of the font ascender in PDF points



306
307
308
# File 'lib/prawn/font.rb', line 306

def ascender
  @ascender / 1000.0 * size
end

- (Object) descender

The size of the font descender in PDF points



312
313
314
# File 'lib/prawn/font.rb', line 312

def descender
  -@descender / 1000.0 * size
end

- (Boolean) eql?(other)

Compliments the #hash implementation above



378
379
380
381
# File 'lib/prawn/font.rb', line 378

def eql?( other ) #:nodoc:
  self.class == other.class && self.name == other.name &&
    self.family == other.family && size == other.send(:size)
end

- (Object) hash

Return a hash (as in Object#hash) for the font based on the output of #inspect. This is required since font objects are used as keys in hashes that cache certain values (See Prawn::Table::Text#styled_with_of_single_character)



372
373
374
# File 'lib/prawn/font.rb', line 372

def hash #:nodoc:
  [ self.class, self.name, self.family, size ].hash
end

- (Object) height

Gets height of current font in PDF points at current font size



346
347
348
# File 'lib/prawn/font.rb', line 346

def height
  height_at(size)
end

- (Object) height_at(size)

Gets height of current font in PDF points at the given font size



339
340
341
342
# File 'lib/prawn/font.rb', line 339

def height_at(size)
  @normalized_height ||= (@ascender - @descender + @line_gap) / 1000.0
  @normalized_height * size
end

- (Object) identifier_for(subset)

:nodoc:



359
360
361
# File 'lib/prawn/font.rb', line 359

def identifier_for(subset) #:nodoc:
  "#{@identifier}.#{subset}"
end

- (Object) inspect

:nodoc:



363
364
365
# File 'lib/prawn/font.rb', line 363

def inspect #:nodoc:
  "#{self.class.name}< #{name}: #{size} >"
end

- (Object) line_gap

The size of the recommended gap between lines of text in PDF points



318
319
320
# File 'lib/prawn/font.rb', line 318

def line_gap
  @line_gap / 1000.0 * size
end

- (Object) normalize_encoding(string)

Normalizes the encoding of the string to an encoding supported by the font. The string is expected to be UTF-8 going in. It will be re-encoded and the new string will be returned. For an in-place (destructive) version, see normalize_encoding!.

Raises:

  • (NotImplementedError)


326
327
328
# File 'lib/prawn/font.rb', line 326

def normalize_encoding(string)
  raise NotImplementedError, "subclasses of Prawn::Font must implement #normalize_encoding"
end

- (Object) normalize_encoding!(str)

Destructive version of normalize_encoding; normalizes the encoding of a string in place.



333
334
335
# File 'lib/prawn/font.rb', line 333

def normalize_encoding!(str)
  str.replace(normalize_encoding(str))
end