diff options
Diffstat (limited to 'repo/font-noto/noto-meta')
-rw-r--r-- | repo/font-noto/noto-meta | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/repo/font-noto/noto-meta b/repo/font-noto/noto-meta new file mode 100644 index 0000000..1ac47a9 --- /dev/null +++ b/repo/font-noto/noto-meta @@ -0,0 +1,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 |