1
0
Fork 0
mirror of https://github.com/haml/haml.git synced 2022-11-09 12:33:31 -05:00
haml--haml/lib/hamlit/compiler/script_compiler.rb
2015-10-25 17:16:57 +09:00

56 lines
1.3 KiB
Ruby

module Hamlit
class Compiler
class ScriptCompiler
def initialize
@unique_id = 0
end
def compile(node, &block)
var = unique_identifier
temple = compile_script_assign(var, node, &block)
temple << compile_script_result(var, node)
end
private
def compile_script_assign(var, node, &block)
if node.children.empty?
[:multi,
[:code, "#{var} = (#{node.value[:text]}"],
[:newline],
[:code, ')'.freeze],
]
else
[:multi,
[:code, "#{var} = #{node.value[:text]}"],
[:newline],
yield(node),
[:code, 'end'.freeze],
]
end
end
def compile_script_result(result, node)
if !node.value[:escape_html] && node.value[:preserve]
result = find_and_preserve(result)
else
result = '(' << result << ').to_s'.freeze
end
[:escape, node.value[:escape_html], [:dynamic, result]]
end
def unique_identifier
@unique_id += 1
['_hamlit_compiler'.freeze, @unique_id].join
end
def find_and_preserve(code)
%Q[Haml::Helpers.find_and_preserve(#{code}, %w(textarea pre code))]
end
def escape_html(temple)
[:escape, true, temple]
end
end
end
end