lib/hamlit/parsers/whitespace.rb in hamlit-1.4.7 vs lib/hamlit/parsers/whitespace.rb in hamlit-1.5.0
- old
+ new
@@ -14,25 +14,58 @@
inner_removal = parse_inner_removal(scanner)
end
inner_removal
end
+ def remove_last_outer_space!(ast)
+ index = find_last_newline_index(ast)
+ return unless index
+
+ ast.delete_at(index)
+ end
+
private
+ # Find [:static, "\n"]'s position ignoring [:code].
+ # If it is not found, return nil.
+ def find_last_newline_index(ast)
+ ast.reverse_each.with_index do |node, index|
+ sexp, *args = node
+ next if sexp == :code
+ return if node != [:static, "\n"]
+
+ return ast.length - index - 1
+ end
+ nil
+ end
+
def reset_outer_removal
@outer_removal = Set.new
+ @tag_indent = 0
end
+ def with_tag_nested(&block)
+ @tag_indent += 1
+ with_indented { block.call }
+ ensure
+ @outer_removal.delete(@tag_indent)
+ @tag_indent -= 1
+ end
+
def parse_inner_removal(scanner)
scanner.scan(/</)
end
def parse_outer_removal(scanner)
if scanner.scan(/>/)
- @outer_removal.add(@current_indent)
+ @outer_removal.add(@tag_indent)
else
- @outer_removal.delete(@current_indent)
+ @outer_removal.delete(@tag_indent)
end
+ end
+
+ def outer_remove?
+ @outer_removal.include?(@tag_indent)
end
end
end
end