#!/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)