BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit 82c2803bc29d1bf9778bdb4c769c37d5610791de
parent f339b21addc7e9848c633481a8397d8906989d58
Author: Matt Demanett <matt@demanett.net>
Date:   Wed, 12 Aug 2020 01:16:34 -0400

Fix error handling and expressions; allow variables everywhere.

Diffstat:
Mscripts/svg_preprocess.rb | 37+++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/scripts/svg_preprocess.rb b/scripts/svg_preprocess.rb @@ -192,7 +192,7 @@ def debug() puts end -def process_def(doc, n) +def process_def(fn, doc, n) id = n.attribute('href').to_s if id id.sub!(/^#/, '') @@ -223,7 +223,7 @@ def process_def(doc, n) end nn.css('def').each do |dn| - process_def(doc, dn) + process_def(fn, doc, dn) end else puts "WARN: no def defined for def ID '#{id}' in #{fn}" @@ -265,7 +265,7 @@ def eval_expressions(s, vars, defaults) end if s =~ /[\+\-\*\/]/ - s.gsub!(/\d+(\.\d+)?([\+\-\*\/]\d+(\.\d+)?)*/) do |m| + s.gsub!(/\-?\d+(\.\d+)?([\+\-\*\%\/]+\d+(\.\d+)?)*/) do |m| eval(m) end end @@ -274,6 +274,21 @@ def eval_expressions(s, vars, defaults) end def process_variables(n, vars) + n.each do |k, v| + if k =~ /^(var|default)-(\w+)$/ + n[k] = eval_expressions(v.to_s, vars, {}) + end + end + + vs = {} + n.each do |k, v| + if k =~ /^var-(\w+)$/ + vs[$1] = v + n.delete(k) + end + end + vars.push(vs) + default_vars = {} n.each do |k, v| if k =~ /^default-(\w+)$/ @@ -286,18 +301,7 @@ def process_variables(n, vars) n[k] = eval_expressions(v.to_s, vars, default_vars) end - pop = false case n.node_name - when 'g' - vs = {} - n.each do |k, v| - if k =~ /^var-(\w+)$/ - vs[$1] = v - n.delete(k) - end - end - vars.push(vs) - pop = true when 'text' n.traverse do |t| if t.text? @@ -309,7 +313,8 @@ def process_variables(n, vars) n.elements.each do |nn| process_variables(nn, vars) end - vars.pop if pop + + vars.pop end def write_output(name, doc, styles) @@ -440,7 +445,7 @@ def process(name) end doc.css('def').each do |n| - process_def(doc, n) + process_def(fn, doc, n) end doc.xpath('//comment()').each(&:remove)