summaryrefslogtreecommitdiff
path: root/repo/font-noto/noto-meta
blob: 1ac47a98183b2e013a2c114c3ab8e49e6fd5f7ac (plain)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/ruby
require 'erb'
require 'fileutils'
require 'json'
require 'shellwords'

include FileUtils


def die!(msg)
  warn msg
  exit 1
end

def render_template(template, attrs = {})
  context = Class.new(OpenStruct).new(**attrs).instance_eval('binding')
  ERB.new(template, 0, '-').result(context)
end

def gen_font_confs(fonts, out_dir = '.')
  out_dir = File.expand_path(out_dir)
  mkdir_p(out_dir)

  Dir.chdir(__dir__) do
    template = File.read('fontconfig.xml.erb')

    fonts.each do |subpkg, data|
      conf_name = "58-noto#{'-' + subpkg if subpkg != '@'}.xml"

      conf = if File.exists?(conf_name)
        File.read(conf_name)
      else
        render_template(template, data: data)
      end
      File.write(File.join(out_dir, conf_name), conf)
    end
  end
end


fonts = JSON.load_file(File.join(__dir__, 'noto-meta.json'))

case (action = ARGV[0])
when 'list-subpkgs'
  puts fonts.keys.select { _1 != '@' }.sort_by { [-_1.size, _1] }

when 'gen-font-confs'
  gen_font_confs(fonts, ARGV[1])

when 'pkgdesc', 'font-basenames'
  key = ARGV[1].sub(/^font-noto-/, '')
  data = fonts[key] or die! "unknown font subpkgname: #{ARGV[1]}"

  case action
  when 'pkgdesc'
    puts data['pkgdesc']
  when 'font-basenames'
    puts data['fonts'].map { _1['family'].gsub(' ', '') }
  end

else
  die! "invalid action: #{action}"
end