aboutsummaryrefslogtreecommitdiffstats
path: root/community/font-noto/noto-meta
diff options
context:
space:
mode:
Diffstat (limited to 'community/font-noto/noto-meta')
-rwxr-xr-xcommunity/font-noto/noto-meta77
1 files changed, 77 insertions, 0 deletions
diff --git a/community/font-noto/noto-meta b/community/font-noto/noto-meta
new file mode 100755
index 00000000000..8f7d14ffb06
--- /dev/null
+++ b/community/font-noto/noto-meta
@@ -0,0 +1,77 @@
+#!/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, trim_mode: '-').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('45-noto.xml.erb')
+
+ fonts.each do |subpkg, data|
+ conf_name = "45-noto#{'-' + subpkg if subpkg != '@'}.conf"
+
+ conf = if File.exist?(conf_name)
+ File.read(conf_name)
+ else
+ render_template(template, data: data)
+ end
+ File.write(File.join(out_dir, conf_name), conf)
+ end
+ end
+
+ Dir.chdir(__dir__) do
+ template = File.read('58-noto.xml.erb')
+
+ data = fonts
+ .values
+ .flat_map { _1['fonts'] }
+ .group_by { _1['alias'] }
+
+ conf = render_template(template, data: data)
+ File.write(File.join(out_dir, '58-noto.conf'), conf)
+
+ cp '58-noto-math.conf', File.join(out_dir, '58-noto-math.conf')
+ 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