class Twofold::Indentation
Public Class Methods
new(opts = {})
click to toggle source
Calls superclass method
# File lib/twofold/indentation.rb, line 6 def initialize(opts = {}) super @indent = options[:indent] @indented = options[:indented] end
Public Instance Methods
on_dynamic(ruby)
click to toggle source
# File lib/twofold/indentation.rb, line 38 def on_dynamic(ruby) [:multi, [:capture, 'tmp', [:dynamic, ruby]], [:if, 'not tmp.nil? and not tmp.empty?', [:block, 'tmp.split(/(?<=\n)/).each do |line|', [:multi, ensure_indent, [:dynamic, "line"], [:if, "line[-1] == #{'"\n"'}", [:code, "#{@indented} = false"] ] ] ] ] ] end
on_static(string)
click to toggle source
# File lib/twofold/indentation.rb, line 27 def on_static(string) if string.empty? [:static, string] else [:multi, ensure_indent, [:static, string] ] end end
on_twofold_indented(indent, inner)
click to toggle source
# File lib/twofold/indentation.rb, line 12 def on_twofold_indented(indent, inner) block = [:multi] block << [:code, "(#{@indent} ||= []) << '#{indent}'"] block << compile(inner) block << [:code, "#{@indent}.pop"] block end
on_twofold_newline()
click to toggle source
# File lib/twofold/indentation.rb, line 20 def on_twofold_newline [:multi, [:code, "#{@indented} = false"], [:static, "\n"] ] end
Private Instance Methods
ensure_indent()
click to toggle source
# File lib/twofold/indentation.rb, line 60 def ensure_indent [:if, "not #{@indented}", [:multi, [:code, "#{@indented} = true"], [:dynamic, "(#{@indent} ||= [])*''"] ] ] end