class SweetTea::Parser
Public Instance Methods
ind()
click to toggle source
# File lib/SweetTea/parser.rb, line 107 def ind " " * @options[:indent] end
parse(code)
click to toggle source
# File lib/SweetTea/parser.rb, line 8 def parse code parser = SweetTeaParser.new results = parser.parse code @options = { :indent => 0, :current_class => nil, :init => { :args => nil, :content => nil } } to_js(results) end
to_js(node, inClass = false)
click to toggle source
# File lib/SweetTea/parser.rb, line 22 def to_js node, inClass = false case node.class.to_s when "SweetTea::BodyNode" all = [] node.elements.each {|n| all << to_js(n) } return all.join when "SweetTea::ClassNode" className = node.elements[2].text_value @options[:current_class] = className @options[:indent] += 1 lines = "" node.elements[3].elements.each do |n| val = to_js(n, true) if val != "" lines << "#{val}" end end @options[:indent] -= 1 @options[:current_class] = nil init = @options[:init][:content] init_args = @options[:init][:args] @options[:init][:content] = nil @options[:init][:args] = nil return "#{ind}var #{className} = (function() {\n" + "#{ind} function #{className}(#{init_args}) {#{init}}\n" + "#{lines}" + "#{ind} return #{className};\n" + "#{ind}})();\n" when "SweetTea::FunctionNode" funcName = node.elements[2].text_value args = "" node.elements[3].elements.each do |n| val = n.text_value if val != " " if args == "" args << "#{val}" else args << ", #{val}" end end end lines = "" @options[:indent] += 1 node.elements[4].elements.each do |n| val = to_js(n) if val != "" lines << val end end @options[:indent] -= 1 if inClass if funcName == "init" @options[:init][:content] = "\n#{lines}#{ind}" if lines != "" @options[:init][:args] = args return "" else return "#{ind}#{@options[:current_class]}.prototype.#{funcName} = function(#{args}) {\n" + "#{lines}" + "#{ind}};\n" end else return "#{ind}var #{funcName} = function(#{args}) {\n" + "#{lines}" + "#{ind}};\n" end when "SweetTea::VariableNode" varName = node.elements[2].text_value if node.elements[4].elements.nil? varValue = "null" else varValue = to_js(node.elements[4].elements[2]) end if inClass return "#{ind}#{@options[:current_class]}.prototype.#{varName} = #{varValue};\n" else return "#{ind}var #{varName} = #{varValue};\n" end when "SweetTea::StringLiteral" return "\"#{node.elements[1].text_value}\"" else raise "Syntax Error" if node.nil? return "" end end