|
- require 'rake/clean'
- require 'pathname'
-
- def inkscape(from:, to:)
- from = from.expand_path.to_s
- to = to.expand_path.to_s
- sh '/Applications/Inkscape.app/Contents/Resources/script', '--export-text-to-path', "--export-plain-svg=#{to}", from
- end
-
- MODULE_TO_FILENAME = {}
-
- $modules_dir = Pathname('lib/modules')
-
- # Each file instantiates a module, which adds itself to MODULE_TO_FILENAME
- FileList.new($modules_dir / '*.rb')
- .each {|file| require_relative file}
-
- $modules = MODULE_TO_FILENAME.keys
-
- $svg_build_dir = Pathname('_svg')
- directory $svg_build_dir
-
- $svg_install_dir = Pathname('../svg')
- directory $svg_install_dir
-
- $faceplate_file_to_module = Hash[$modules.map {|m| [m.faceplate_file, m]}]
- $faceplate_files = $faceplate_file_to_module.keys
- $faceplate_build_files = []
- $faceplate_install_files = []
-
- $faceplate_files.each do |faceplate_file|
- m = $faceplate_file_to_module[faceplate_file]
- module_source_file = MODULE_TO_FILENAME[m]
- faceplate_build_file = $svg_build_dir / faceplate_file.path
- $faceplate_build_files << faceplate_build_file
-
- file faceplate_build_file => [$svg_build_dir, module_source_file] do
- faceplate_file.write($svg_build_dir)
- end
-
- faceplate_install_file = $svg_install_dir / faceplate_file.path
- $faceplate_install_files << faceplate_install_file
- file faceplate_install_file => [$svg_install_dir, faceplate_build_file] do
- inkscape(from: faceplate_build_file, to: faceplate_install_file)
- end
- end
-
- $image_install_dir = Pathname('../images')
- directory $image_install_dir
-
- $image_build_dir = Pathname('_images')
- directory $image_build_dir
-
- $image_file_to_module = Hash[$modules.map {|m| [m.image_file, m]}]
- $image_files = $image_file_to_module.keys
- $image_build_files = []
- $image_install_files = []
-
- $image_files.each do |image_file|
- m = $image_file_to_module[image_file]
- module_source_file = MODULE_TO_FILENAME[m]
- image_build_file = $image_build_dir / image_file.path
- $image_build_files << image_build_file
-
- file image_build_file => [$image_build_dir, module_source_file] do
- image_file.write($image_build_dir)
- end
-
- image_install_file = $image_install_dir / image_file.path
- $image_install_files << image_install_file
- file image_install_file => [$image_install_dir, image_build_file] do
- inkscape(from: image_build_file, to: image_install_file)
- end
- end
-
- $controls = $modules.flat_map(&:controls)
- $control_to_module = Hash[$controls.collect {|c| [c, c.faceplate]}]
- $control_file_to_control = Hash[
- $controls
- .flat_map {|control| control.svg_files.map {|svg_file| [svg_file, control]}}
- .uniq {|pair| pair.first.path}
- ]
- $control_files = $control_file_to_control.keys
- $control_build_files = []
- $control_install_files = []
-
- $control_files.each do |control_file|
- control = $control_file_to_control[control_file]
- m = $control_to_module[control]
- module_source_file = MODULE_TO_FILENAME[m]
-
- control_build_file = $svg_build_dir / control_file.path
- $control_build_files << control_build_file
- control_install_file = $svg_install_dir / control_file.path
- $control_install_files << control_install_file
-
- directory control_build_file.parent
- file control_build_file => [module_source_file, control_build_file.parent] do
- control_file.write($svg_build_dir)
- end
-
- directory control_install_file.parent
- file control_install_file => [control_install_file.parent, control_build_file] do
- if control_file.has_text
- inkscape(from: control_build_file, to: control_install_file)
- else
- cp control_build_file, control_install_file
- end
- end
- end
-
- desc 'Build SVG files (does not install)'
- task build: $control_build_files + $faceplate_build_files + $image_build_files
-
- desc 'Install SVG files'
- task install: $control_install_files + $faceplate_install_files + $image_install_files
-
- desc 'Remove and rebuild SVG files (does not install)'
- task fresh: [:clean, :default]
-
- desc 'Remove, rebuild, and reinstall SVG files'
- task reinstall: [:clobber, :install]
-
- task default: [:build]
-
- CLEAN.include $image_build_dir, $svg_build_dir
- CLOBBER.include $image_install_dir, $svg_install_dir
|