Class: Riml::Compiler::IfNodeVisitor
Instance Method Summary collapse
Methods inherited from Visitor
Constructor Details
This class inherits a constructor from Riml::Compiler::Visitor
Instance Method Details
#compile(node) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/compiler.rb', line 60 def compile(node) condition_visitor = visitor_for_node(node.condition) node.condition.parent_node = node node.condition.force_newline = true node.compiled_output = "if " node.compiled_output << "!" if UnlessNode === node node.condition.accept(condition_visitor) node.body.accept(NodesVisitor.new(:propagate_up_tree => false)) node.body.compiled_output.each_line do |line| outdent = line =~ /\A(\s*)(else\s*|elseif .+)$/ if outdent && node.non_nested? node.compiled_output << node.outdent + line else node.compiled_output << node.indent + line end end node.compiled_output << "\n" unless node.compiled_output[-1] == "\n" node.force_newline = true node.compiled_output << "endif" end |