class ERB::Compiler::ExplicitScanner

:nodoc:

def scan

:nodoc:
def scan
  stag_reg = /(.*?)(^[ \t]*<%-|<%-|#{stags.join('|')}|\z)/m
  etag_reg = /(.*?)(-%>|#{etags.join('|')}|\z)/m
  scanner = StringScanner.new(@src)
  while ! scanner.eos?
    scanner.scan(@stag ? etag_reg : stag_reg)
    yield(scanner[1])
    elem = scanner[2]
    if /[ \t]*<%-/ =~ elem
      yield('<%')
    elsif elem == '-%>'
      yield('%>')
      yield(:cr) if scanner.scan(/(\r?\n|\z)/)
    else
      yield(elem)
    end
  end
end