class RewriteNamedReferenceNames
Public Class Methods
rewrite(*args)
click to toggle source
# File src/rewrite/rewrite_named_reference_names.rb, line 3 def self.rewrite(*args) self.new.rewrite(*args) end
Public Instance Methods
rewrite(named_references, worksheet_names, output)
click to toggle source
Expects named reference in the form: sheet_name_or_blank_for_globaltnamed_reference_nametreferencen Outputs named references in the form: nametreferencen where name incorporates the sheet name and has been rewritten in a way that works as a c function name and (hopefully) won't clash with any existing names FIXME: but could still clash with function names and methods in the ruby shim
# File src/rewrite/rewrite_named_reference_names.rb, line 15 def rewrite(named_references, worksheet_names, output) worksheet_names = Hash[worksheet_names.readlines.map { |line| line.strip.split("\t")}] c_names_assigned = worksheet_names.invert named_references.each_line do |line| sheet, name, reference = line.split("\t") sheet = worksheet_names[sheet] if sheet c_name = "#{sheet}_#{name}" else c_name = name c_name = "n"+c_name if c_name[0] !~ /[a-zA-Z]/ end c_name = c_name.downcase.gsub(/[^a-z0-9]+/,'_') c_name = c_name + "2" if c_names_assigned.has_key?(c_name) c_name.succ! while c_names_assigned.has_key?(c_name) output.puts "#{c_name}\t#{reference}" c_names_assigned[c_name] = c_name end end