diff options
| author | Georg Gadinger <nilsding@nilsding.org> | 2021-04-16 19:38:16 +0200 |
|---|---|---|
| committer | Georg Gadinger <nilsding@nilsding.org> | 2021-04-16 19:42:18 +0200 |
| commit | 3f1b7213af69fa8d8426294de512686d7b8e9c38 (patch) | |
| tree | 5adfb0d47e8f56959897bc4ac33ba57da26b94b2 /gen_theme.rb | |
| download | rockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.tar.gz rockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.tar.bz2 rockbox-theme-ipawbmini-3f1b7213af69fa8d8426294de512686d7b8e9c38.zip | |
Initial commit
Diffstat (limited to 'gen_theme.rb')
| -rwxr-xr-x | gen_theme.rb | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/gen_theme.rb b/gen_theme.rb new file mode 100755 index 0000000..d7530d3 --- /dev/null +++ b/gen_theme.rb @@ -0,0 +1,93 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require 'liquid' +require 'fileutils' + +THEME_NAME = 'iPawbMini' +# MAIN_MENU_TITLE = 'iPod mini' +MAIN_MENU_TITLE = 'iPawb mini' + +DEST_DIR = File.join(__dir__, 'dist', THEME_NAME) + +TEMPLATE_PATH = File.join(__dir__, 'templates') +BASE_TEMPLATE = 'base.liquid' +TEMPLATES = { + 'fms.liquid' => "wps/#{THEME_NAME}.fms", + 'sbs.liquid' => "wps/#{THEME_NAME}.sbs", + 'wps.liquid' => "wps/#{THEME_NAME}.wps" +}.freeze + +THEME_CONFIG = { + **TEMPLATES.map { |_, path| [path.split('.').last.downcase, "/.rockbox/#{path}"] }.to_h, + 'selector type' => 'bar (inverse)', + 'filetype colours' => '-', + 'font' => '/.rockbox/fonts/10-Espy Sans-Bold.fnt', + 'statusbar' => 'off', + 'scrollbar' => 'right', + 'scrollbar width' => '9', + 'battery display' => 'graphic', + 'show icons' => 'on', + 'ui viewport' => '-' +}.freeze + +def new_liquid(template_path) + Liquid::Template.parse(IO.read(File.join(TEMPLATE_PATH, template_path))) +end + +base_vars = { + 'theme_name' => THEME_NAME, + 'main_menu_title' => MAIN_MENU_TITLE, + 'generated_at' => Time.now.to_s +}.freeze + +FileUtils.mkdir_p(DEST_DIR) + +puts "===> Generating WPS screens" +FileUtils.mkdir_p(File.join(DEST_DIR, 'wps')) +TEMPLATES.each do |src, dst| + vars = base_vars.merge('filename' => src) + template = new_liquid(src) + content = template.render(**vars).strip + assigns = template.instance_assigns.transform_values(&:chomp) + result = new_liquid(BASE_TEMPLATE).render( + 'content' => content, + 'filename' => src, + **vars, + **assigns + ) + + dest_full = File.join(DEST_DIR, dst) + puts "writing #{dest_full} ..." + File.open(dest_full, 'w') do |f| + f.puts result + end +end + +puts "===> Generating theme config" +FileUtils.mkdir_p(File.join(DEST_DIR, 'themes')) +File.open(File.join(DEST_DIR, 'themes', "#{THEME_NAME}.cfg"), 'w') do |f| + f.puts "# #{THEME_NAME} Rockbox theme" + f.puts "# Generated using gen_theme.rb at #{base_vars['generated_at']}" + f.puts + + THEME_CONFIG.each do |key, value| + f.puts "#{key}: #{value}" + end +end + +def copy(kind, pattern, dest_dir) + source_files = Dir[*pattern] + return if source_files.empty? + + puts "===> Copying #{kind}" + FileUtils.mkdir_p(dest_dir) + source_files.each do |source_file| + dest_file = File.join(dest_dir, File.basename(source_file)) + puts dest_file + FileUtils.cp(source_file, dest_file) + end +end + +copy :fonts, File.join(__dir__, 'fonts', '*.fnt'), File.join(DEST_DIR, 'fonts') +copy :images, File.join(__dir__, 'images', '*.bmp'), File.join(DEST_DIR, 'wps', THEME_NAME) |
