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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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)
|