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