| 
							- 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
 
 
  |