BogaudioModules

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

commit 57462172ca22dad0c39208033bb0450d6e740c21
parent c0769272343fdb84a0a6bb63f0d1b6a03c1ebeef
Author: Matt Demanett <matt@demanett.net>
Date:   Tue,  1 Sep 2020 20:23:47 -0400

Allow defs to refer to local symbols.

Diffstat:
Mscripts/svg_preprocess.rb | 19+++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/scripts/svg_preprocess.rb b/scripts/svg_preprocess.rb @@ -192,11 +192,12 @@ def debug() puts end -def process_def(fn, doc, n) +def process_def(fn, doc, n, local_defs) id = n.attribute('href').to_s if id id.sub!(/^#/, '') - d = $defs[id] + d = local_defs[id] + d = $defs[id] unless d if d nn = d.dup nn.node_name = 'svg' @@ -223,7 +224,7 @@ def process_def(fn, doc, n) end nn.css('def').each do |dn| - process_def(fn, doc, dn) + process_def(fn, doc, dn, local_defs) end else puts "WARN: no def defined for def ID '#{id}' in #{fn}" @@ -428,6 +429,16 @@ def process(name) doc = parse_xml(doc.to_xml) end + local_defs = {} + doc.css('defs symbol').each do |n| + id = n['id'].to_s + unless id && !id.empty? + STDERR.puts "Symbol in #{fn} with missing ID: #{n.to_s}" + exit 1 + end + local_defs[id] = n + end + doc.css('defs import').each do |n| id = n.attribute('id').to_s if id @@ -445,7 +456,7 @@ def process(name) end doc.css('def').each do |n| - process_def(fn, doc, n) + process_def(fn, doc, n, local_defs) end doc.xpath('//comment()').each(&:remove)