File: metrics.rb

package info (click to toggle)
ruby-ttfunk 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,472 kB
  • sloc: ruby: 7,954; makefile: 7
file content (49 lines) | stat: -rw-r--r-- 1,685 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
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
#!/usr/bin/ruby
# frozen_string_literal: true

require 'ttfunk'

def character_lookup(file, character)
  puts("character     : #{character}")

  character_code = character.unpack1('U*')
  puts("character code: #{character_code}")

  glyph_id = file.cmap.unicode.first[character_code]
  puts("glyph id      : #{glyph_id}")

  glyph = file.glyph_outlines.for(glyph_id)
  puts(format('glyph type    : %s', glyph.class.name.split('::').last.downcase))
  puts(format('glyph size    : %db', glyph.raw.length))
  puts(format('glyph bbox    : (%d,%d)-(%d,%d)', glyph.x_min, glyph.y_min, glyph.x_max, glyph.y_max))

  if glyph.compound?
    puts(format('components    : %d %s', glyph.glyph_ids.length, glyph.glyph_ids.inspect))
  end
end

file_name = ARGV.first || File.join(__dir__, '../data/fonts/DejaVuSans.ttf')
file_name = ARGV.first || '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf'
file = TTFunk::File.open(file_name)

puts '-- FONT ------------------------------------'

puts format('revision  : %08x', file.header.font_revision)
puts "name      : #{file.name.font_name.join(', ')}"
puts "family    : #{file.name.font_family.join(', ')}"
puts "subfamily : #{file.name.font_subfamily.join(', ')}"
puts "postscript: #{file.name.postscript_name}"

puts '-- FONT METRICS ----------------------------'

puts "units/em  : #{file.header.units_per_em}"
puts "ascent    : #{file.ascent}"
puts "descent   : #{file.descent}"
puts "line gap  : #{file.line_gap}"
puts format('bbox      : (%d,%d)-(%d,%d)', *file.bbox)

puts '-- SIMPLE CHARACTER -> GLYPH LOOKUP --------'
character_lookup(file, "\xE2\x98\x9C")

puts '-- COMPOUND CHARACTER -> GLYPH LOOKUP ------'
character_lookup(file, 'ë')