mirror of
https://github.com/haml/haml.git
synced 2022-11-09 12:33:31 -05:00
56 lines
1.3 KiB
Ruby
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
|