module Extract::Tree::Math
Public Instance Methods
deps(start=self)
click to toggle source
# File lib/extract/tree/math.rb, line 39 def deps(start=self) res = [] #res << get_math_exp.deps return [] unless start.elements start.elements.each do |e| #arg = e.elements[1] if e.respond_to?(:deps) res << e.deps else res << deps(e) end end res.flatten.select { |x| x } end
eval()
click to toggle source
# File lib/extract/tree/math.rb, line 91 def eval #puts "evaling #{text_value}" #raise tokens.map { |x| x.text_value }.inspect + "\n" + inspect MathCalc.parse_eval(tokens) end
excel_value()
click to toggle source
# File lib/extract/tree/math.rb, line 17 def excel_value return eval raise 'foo' unless get_math_exp str = %w(math_exp naked_exp cell).map { |x| "#{x} #{respond_to?(x)}" }.join(", ") #raise str + "\n" + inspect #raise (methods - 7.methods).inspect + "\n" + inspect end res = 0 #res = math_exp.excel_value if respond_to?(:math_exp) rest.elements.each do |e| #arg = e.elements[1] #res += arg.excel_value #res += end res end
get_math_exp()
click to toggle source
# File lib/extract/tree/math.rb, line 4 def get_math_exp if respond_to?(:math_exp) math_exp elsif respond_to?(:math_exp_full) math_exp_full elsif respond_to?(:num) num elsif respond_to?(:primary) primary else nil end end
tokens(start=self)
click to toggle source
# File lib/extract/tree/math.rb, line 58 def tokens(start=self) if start.respond_to?("paren?") res = start.math_exp.eval return [OpenStruct.new(:text_value => res.to_s)] #return [start.exp.eval] end #puts "parsing #{start.text_value} #{start.class}" res = [] return res unless start.elements start.elements.each do |el| if el.respond_to?(:tt) t = el.tt if t == :num res << el elsif t == :operator res << el elsif t == :cell res << el elsif t == :formula res << el elsif t == :math res += el.tokens else raise "unknown" end else res += tokens(el) end end res end