Class: AFM::Font
- Inherits:
-
Object
- Object
- AFM::Font
- Defined in:
- lib/afm.rb
Instance Attribute Summary collapse
-
#char_metrics ⇒ Object
readonly
Returns the value of attribute char_metrics.
-
#char_metrics_by_code ⇒ Object
readonly
Returns the value of attribute char_metrics_by_code.
-
#kern_pairs ⇒ Object
readonly
Returns the value of attribute kern_pairs.
-
#metadata ⇒ Object
readonly
Returns the value of attribute metadata.
Class Method Summary collapse
-
.from_file(file) ⇒ Object
alias for new().
Instance Method Summary collapse
-
#[](key) ⇒ Object
Get metadata by key.
-
#initialize(filename) ⇒ Font
constructor
Loading a Font Metrics file by absolute path (no automatic font path resolution).
-
#metrics_for(char) ⇒ Object
Get metrics for character.
Constructor Details
#initialize(filename) ⇒ Font
Loading a Font Metrics file by absolute path (no automatic font path resolution)
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/afm.rb', line 36 def initialize(filename) = {} @char_metrics = {} @char_metrics_by_code = {} @kern_pairs = [] File.open(filename) do |file| mode = :meta file.each_line do |line| case line when /^StartFontMetrics/ then mode = :meta when /^StartCharMetrics/ then mode = :char_metrics when /^EndCharMetrics/ then mode = :meta when /^StartKernData/ then mode = :kern_data when /^StartKernPairs/ then mode = :kern_pairs when /^EndKernPairs/ then mode = :kern_data when /^EndKernData/ then mode = :meta else case mode when :meta if (match = line.match(/^([\w]+) (.*)$/)) [match[1]] = match[2] end when :char_metrics metrics = {} metrics[:charcode] = match[1].to_i if (match = line.match(/C (-?\d+) *?;/)) metrics[:wx] = match[1].to_i if (match = line.match(/WX (-?\d+) *?;/)) metrics[:name] = match[1] if (match = line.match(/N ([.\w]+) *?;/)) if (match = line.match(/B (-?\d+) (-?\d+) (-?\d+) (-?\d+) *?;/)) metrics[:boundingbox] = [match[1].to_i, match[2].to_i, match[3].to_i, match[4].to_i] end @char_metrics[metrics[:name]] = metrics if metrics[:name] @char_metrics_by_code[metrics[:charcode]] = metrics if metrics[:charcode] && metrics[:charcode] > 0 when :kern_pairs if (match = line.match(/^KPX ([.\w]+) ([.\w]+) (-?\d+)$/)) @kern_pairs << [match[1], match[2], match[3].to_i] end end end end end end |
Instance Attribute Details
#char_metrics ⇒ Object (readonly)
Returns the value of attribute char_metrics.
33 34 35 |
# File 'lib/afm.rb', line 33 def char_metrics @char_metrics end |
#char_metrics_by_code ⇒ Object (readonly)
Returns the value of attribute char_metrics_by_code.
33 34 35 |
# File 'lib/afm.rb', line 33 def char_metrics_by_code @char_metrics_by_code end |
#kern_pairs ⇒ Object (readonly)
Returns the value of attribute kern_pairs.
33 34 35 |
# File 'lib/afm.rb', line 33 def kern_pairs @kern_pairs end |
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata.
33 34 35 |
# File 'lib/afm.rb', line 33 def end |
Class Method Details
.from_file(file) ⇒ Object
alias for new()
80 81 82 |
# File 'lib/afm.rb', line 80 def self.from_file(file) new(file) end |
Instance Method Details
#[](key) ⇒ Object
Get metadata by key
86 87 88 |
# File 'lib/afm.rb', line 86 def [](key) [key] end |
#metrics_for(char) ⇒ Object
Get metrics for character. Takes an integer (charcode) or a one-char string. currently works only for Latin1 strings, since we only have a chartable for the Latin1 charset so far. (shamelessly stolen from AFM.pm by Gisle Aas)
95 96 97 98 99 100 101 102 |
# File 'lib/afm.rb', line 95 def metrics_for(char) glyph = if char.is_a?(Integer) ISO_LATIN1_ENCODING[char] else ISO_LATIN1_ENCODING[char.unpack1("C")] end @char_metrics[glyph] end |