aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Eilertsen <haraldei@anduin.net>2021-03-14 10:42:47 +0100
committerHarald Eilertsen <haraldei@anduin.net>2021-03-27 16:06:07 +0100
commitedcadc2599216491a85e19994bbb0c95ce501540 (patch)
tree86a4727cda2ade03272ce100a8dbe847338aaf94
parent6c7ab02fab45e861faf5bc0fbf4fae99ab576fcb (diff)
downloadairwindows-lv2-port-edcadc2599216491a85e19994bbb0c95ce501540.tar.gz
airwindows-lv2-port-edcadc2599216491a85e19994bbb0c95ce501540.tar.bz2
airwindows-lv2-port-edcadc2599216491a85e19994bbb0c95ce501540.zip
LV2/makeplugin: Refactor makeplugin script.
Instantiate PluginInfo object instead of using a class method returning a hash.
-rw-r--r--plugins/LV2/lib/makeplugin/plugin_info.rb38
-rwxr-xr-xplugins/LV2/makeplugin26
2 files changed, 40 insertions, 24 deletions
diff --git a/plugins/LV2/lib/makeplugin/plugin_info.rb b/plugins/LV2/lib/makeplugin/plugin_info.rb
index c6f4adb..b9cae0d 100644
--- a/plugins/LV2/lib/makeplugin/plugin_info.rb
+++ b/plugins/LV2/lib/makeplugin/plugin_info.rb
@@ -21,8 +21,26 @@ module MakePlugin
class PluginInfo
PLUGIN_FIELDS = %w{Type Use Description Comment}
- def self.find_plugin_info(root, plugin_name)
- pi = { name: plugin_name }
+ attr_reader :name
+ attr_reader :n_ctrl_ports
+ attr_reader :ctrl_ports
+ attr_reader :type
+ attr_reader :use
+ attr_reader :desc
+ attr_reader :comment
+
+ def initialize(root, name)
+ @name = name
+ @ctrl_ports = []
+ self.find_plugin_info(root)
+ if @n_ctrl_ports != @ctrl_ports.length
+ raise "Expected #{@n_ctrl_ports} but found #{@ctrl_ports.length}"
+ end
+ end
+
+ private
+
+ def find_plugin_info(root)
found = false
db = File.join(root, '../../cheatsheet/src/database.js')
@@ -32,39 +50,37 @@ module MakePlugin
break if found && line =~ /^\s*\},$/
pat.match(line) do |m|
- if m[1] == 'Name' && m[2] == plugin_name
+ if m[1] == 'Name' && m[2] == @name
found = true
elsif found && PLUGIN_FIELDS.include?(m[1])
- pi[m[1].downcase.to_sym] = m[2]
+ eval(%Q{@#{m[1].downcase.to_sym} = "#{m[2]}"})
end
end
end
end
- header_file = File.join(root, '../WinVST', plugin_name, "#{plugin_name}.h")
+ header_file = File.join(root, '../WinVST', @name, "#{@name}.h")
File.open(header_file) do |f|
f.each_line do |line|
if line =~ /kNumParameters\s*=\s*(\d+)/
- pi[:n_ctrl_ports] = $1.to_i
+ @n_ctrl_ports = $1.to_i
end
end
end
- class_file = File.join(root, '../WinVST', plugin_name, "#{plugin_name}.cpp")
+ class_file = File.join(root, '../WinVST', @name, "#{@name}.cpp")
fun = ""
File.open(class_file) do |f|
f.each_line do |line|
- if line =~ /void #{plugin_name}::(\w+)/
+ if line =~ /void #{@name}::(\w+)/
fun = $1
elsif fun == 'getParameterName' and line =~ /case\s+kParam([A-Z])\:\s+vst_strncpy\s*\([^,]*,\s*\"(\w+)\",/
- pi["ctrl_port_#{$1}".to_sym] = $2
+ @ctrl_ports << $2
end
end
end
-
- return pi
end
end
end
diff --git a/plugins/LV2/makeplugin b/plugins/LV2/makeplugin
index 277fd52..ac9c353 100755
--- a/plugins/LV2/makeplugin
+++ b/plugins/LV2/makeplugin
@@ -22,9 +22,9 @@ def make_ctrl_port(n, name)
end
def make_lv2_port_defs(pi)
- num = pi[:n_ctrl_ports]
+ num = pi.n_ctrl_ports
ctrlports = (0 ... num)
- .map { |n| make_ctrl_port(n, pi["ctrl_port_#{param_sym(n)}".to_sym]) }
+ .map { |n| make_ctrl_port(n, pi.ctrl_ports[n]) }
.join("\n ] , [\n")
ctrlports + %Q{
@@ -64,7 +64,7 @@ target_dir = File.join(root, 'src', plugin_name)
template_dir = File.join(root, 'Template')
def get_lv2_plugin_type(plugin_info)
- case plugin_info[:type]
+ case plugin_info.type
when 'Saturation'
'DistortionPlugin'
when 'EQ'
@@ -75,12 +75,12 @@ def get_lv2_plugin_type(plugin_info)
end
puts "Reading plugin info from cheatsheet..."
-plugin_info = MakePlugin::PluginInfo.find_plugin_info(root, plugin_name)
+pi = MakePlugin::PluginInfo.new(root, plugin_name)
-puts "Creating plugin #{plugin_name}..."
-puts "Type: #{plugin_info[:type]}"
-puts "CTRL ports: #{plugin_info[:n_ctrl_ports]}"
+puts "Creating plugin #{pi.name}..."
+puts "Type: #{pi.type}"
+puts "CTRL ports: #{pi.ctrl_ports.length}"
Templates = %w{
manifest.ttl.in
@@ -94,14 +94,14 @@ begin
Templates.each do |t|
tpl = IO.read(File.join(template_dir, t))
- .gsub('@Plugin@', plugin_name)
+ .gsub('@Plugin@', pi.name)
.gsub('@plugin@', plugin_slug)
- .gsub('@NCtrlPorts@', plugin_info[:n_ctrl_ports].to_s)
- .gsub('@AssignParams@', make_param_assigns(plugin_info[:n_ctrl_ports]))
- .gsub('@TTLPortDefs@', make_lv2_port_defs(plugin_info))
- .gsub('@TTLPluginType@', get_lv2_plugin_type(plugin_info))
+ .gsub('@NCtrlPorts@', pi.n_ctrl_ports.to_s)
+ .gsub('@AssignParams@', make_param_assigns(pi.n_ctrl_ports))
+ .gsub('@TTLPortDefs@', make_lv2_port_defs(pi))
+ .gsub('@TTLPluginType@', get_lv2_plugin_type(pi))
- fname = t.sub('Plugin', plugin_name)
+ fname = t.sub('Plugin', pi.name)
puts " - #{fname}..."
File.open(File.join(target_dir, fname), "w") do |f|