class EmergencyArrayFormulaReplaceIndirectBodge
Attributes
current_sheet_name[RW]
named_references[RW]
references[RW]
referring_cell[RW]
tables[RW]
Public Class Methods
new()
click to toggle source
# File src/simplify/emergency_array_formula_replace_indirect_bodge.rb, line 11 def initialize @indirect_replacer = ReplaceIndirectsWithReferencesAst.new @formulae_to_value_replacer = MapFormulaeToValues.new @inline_formulae_replacer = InlineFormulaeAst.new @simplify_arithmetic_replacer ||= SimplifyArithmeticAst.new @replace_ranges_with_array_literals_replacer ||= ReplaceRangesWithArrayLiteralsAst.new end
Public Instance Methods
deep_copy(ast)
click to toggle source
# File src/simplify/emergency_array_formula_replace_indirect_bodge.rb, line 60 def deep_copy(ast) return ast if ast.is_a?(Symbol) return ast if ast.is_a?(Numeric) return ast.dup unless ast.is_a?(Array) ast.map do |a| deep_copy(a) end end
function(ast)
click to toggle source
# File src/simplify/emergency_array_formula_replace_indirect_bodge.rb, line 31 def function(ast) new_ast = deep_copy(ast) @replace_ranges_with_array_literals_replacer.map(new_ast) @inline_formulae_replacer.references = @references @inline_formulae_replacer.current_sheet_name = [@current_sheet_name] @inline_formulae_replacer.map(new_ast) @simplify_arithmetic_replacer.map(new_ast) @formulae_to_value_replacer.map(new_ast) @named_reference_replacer ||= ReplaceNamedReferencesAst.new(@named_references) @named_reference_replacer.default_sheet_name = @current_sheet_name @named_reference_replacer.map(new_ast) @table_reference_replacer ||= ReplaceTableReferenceAst.new(@tables) @table_reference_replacer.worksheet = @current_sheet_name @table_reference_replacer.referring_cell = @referring_cell @table_reference_replacer.map(new_ast) @replace_ranges_with_array_literals_replacer.map(new_ast) @inline_formulae_replacer.map(new_ast) @formulae_to_value_replacer.map(new_ast) @indirect_replacer.replace(new_ast) ast.replace(new_ast) ast end
map(ast)
click to toggle source
# File src/simplify/emergency_array_formula_replace_indirect_bodge.rb, line 24 def map(ast) return ast unless ast.is_a?(Array) function(ast) if ast[0] == :function && ast[1] == :INDIRECT ast.each { |a| map(a) } ast end
replace(ast)
click to toggle source
# File src/simplify/emergency_array_formula_replace_indirect_bodge.rb, line 19 def replace(ast) map(ast) ast end