You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.0KB

  1. require 'rake/clean'
  2. require 'pathname'
  3. def inkscape(from:, to:)
  4. from = from.expand_path.to_s
  5. to = to.expand_path.to_s
  6. sh '/Applications/Inkscape.app/Contents/Resources/script', '--export-text-to-path', "--export-plain-svg=#{to}", from
  7. end
  8. MODULE_TO_FILENAME = {}
  9. $modules_dir = Pathname('lib/modules')
  10. # Each file instantiates a module, which adds itself to MODULE_TO_FILENAME
  11. FileList.new($modules_dir / '*.rb')
  12. .each {|file| require_relative file}
  13. $modules = MODULE_TO_FILENAME.keys
  14. $svg_build_dir = Pathname('_svg')
  15. directory $svg_build_dir
  16. $svg_install_dir = Pathname('../svg')
  17. directory $svg_install_dir
  18. $faceplate_file_to_module = Hash[$modules.map {|m| [m.faceplate_file, m]}]
  19. $faceplate_files = $faceplate_file_to_module.keys
  20. $faceplate_build_files = []
  21. $faceplate_install_files = []
  22. $faceplate_files.each do |faceplate_file|
  23. m = $faceplate_file_to_module[faceplate_file]
  24. module_source_file = MODULE_TO_FILENAME[m]
  25. faceplate_build_file = $svg_build_dir / faceplate_file.path
  26. $faceplate_build_files << faceplate_build_file
  27. file faceplate_build_file => [$svg_build_dir, module_source_file] do
  28. faceplate_file.write($svg_build_dir)
  29. end
  30. faceplate_install_file = $svg_install_dir / faceplate_file.path
  31. $faceplate_install_files << faceplate_install_file
  32. file faceplate_install_file => [$svg_install_dir, faceplate_build_file] do
  33. inkscape(from: faceplate_build_file, to: faceplate_install_file)
  34. end
  35. end
  36. $image_install_dir = Pathname('../images')
  37. directory $image_install_dir
  38. $image_build_dir = Pathname('_images')
  39. directory $image_build_dir
  40. $image_file_to_module = Hash[$modules.map {|m| [m.image_file, m]}]
  41. $image_files = $image_file_to_module.keys
  42. $image_build_files = []
  43. $image_install_files = []
  44. $image_files.each do |image_file|
  45. m = $image_file_to_module[image_file]
  46. module_source_file = MODULE_TO_FILENAME[m]
  47. image_build_file = $image_build_dir / image_file.path
  48. $image_build_files << image_build_file
  49. file image_build_file => [$image_build_dir, module_source_file] do
  50. image_file.write($image_build_dir)
  51. end
  52. image_install_file = $image_install_dir / image_file.path
  53. $image_install_files << image_install_file
  54. file image_install_file => [$image_install_dir, image_build_file] do
  55. inkscape(from: image_build_file, to: image_install_file)
  56. end
  57. end
  58. $controls = $modules.flat_map(&:controls)
  59. $control_to_module = Hash[$controls.collect {|c| [c, c.faceplate]}]
  60. $control_file_to_control = Hash[
  61. $controls
  62. .flat_map {|control| control.svg_files.map {|svg_file| [svg_file, control]}}
  63. .uniq {|pair| pair.first.path}
  64. ]
  65. $control_files = $control_file_to_control.keys
  66. $control_build_files = []
  67. $control_install_files = []
  68. $control_files.each do |control_file|
  69. control = $control_file_to_control[control_file]
  70. m = $control_to_module[control]
  71. module_source_file = MODULE_TO_FILENAME[m]
  72. control_build_file = $svg_build_dir / control_file.path
  73. $control_build_files << control_build_file
  74. control_install_file = $svg_install_dir / control_file.path
  75. $control_install_files << control_install_file
  76. directory control_build_file.parent
  77. file control_build_file => [module_source_file, control_build_file.parent] do
  78. control_file.write($svg_build_dir)
  79. end
  80. directory control_install_file.parent
  81. file control_install_file => [control_install_file.parent, control_build_file] do
  82. if control_file.has_text
  83. inkscape(from: control_build_file, to: control_install_file)
  84. else
  85. cp control_build_file, control_install_file
  86. end
  87. end
  88. end
  89. desc 'Build SVG files (does not install)'
  90. task build: $control_build_files + $faceplate_build_files + $image_build_files
  91. desc 'Install SVG files'
  92. task install: $control_install_files + $faceplate_install_files + $image_install_files
  93. desc 'Remove and rebuild SVG files (does not install)'
  94. task fresh: [:clean, :default]
  95. desc 'Remove, rebuild, and reinstall SVG files'
  96. task reinstall: [:clobber, :install]
  97. task default: [:build]
  98. CLEAN.include $image_build_dir, $svg_build_dir
  99. CLOBBER.include $image_install_dir, $svg_install_dir