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
|