Class: AFM::Font
- Inherits:
-
Object
- Object
- AFM::Font
- Defined in:
- lib/pdf/reader/width_calculator/built_in.rb
Overview
monkey patch the afm gem to give us access to the metrics by glyph code. I’ve got a pull request to upstream so hopefully this can be removed soon. See github.com/halfbyte/afm/pull/3
Instance Attribute Summary collapse
-
#char_metrics_by_code ⇒ Object
readonly
Returns the value of attribute char_metrics_by_code.
Instance Method Summary collapse
-
#initialize(filename) ⇒ Font
constructor
Loading a Font Metrics file by absolute path (no automatic font path resolution).
Constructor Details
#initialize(filename) ⇒ Font
Loading a Font Metrics file by absolute path (no automatic font path resolution)
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pdf/reader/width_calculator/built_in.rb', line 13 def initialize(filename) @metadata = {} @char_metrics = {} @char_metrics_by_code = {} @kern_pairs = [] File.open(filename) do |file| mode = :meta file.each_line do |line| case(line) when /^StartFontMetrics/ ; mode = :meta when /^StartCharMetrics/ ; mode = :char_metrics when /^EndCharMetrics/ ; mode = :meta when /^StartKernData/ ; mode = :kern_data when /^StartKernPairs/ ; mode = :kern_pairs when /^EndKernPairs/ ; mode = :kern_data when /^EndKernData/ ; mode = :meta else case(mode) when :meta if match = line.match(/^([\w]+) (.*)$/) @metadata[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_by_code ⇒ Object (readonly)
Returns the value of attribute char_metrics_by_code.
10 11 12 |
# File 'lib/pdf/reader/width_calculator/built_in.rb', line 10 def char_metrics_by_code @char_metrics_by_code end |