module Raabro::ModuleMethods

def eseq(name, input, startpa, eltpa, seppa=nil, endpa=nil)

def eseq(name, input, startpa, eltpa, seppa=nil, endpa=nil)
  jseq = false
  if seppa.nil? && endpa.nil?
    jseq = true
    seppa = eltpa; eltpa = startpa; startpa = nil
  end
  start = input.offset
  r = ::Raabro::Tree.new(name, jseq ? :jseq : :eseq, input)
  r.result = 1
  c = nil
  if startpa
    c = _parse(startpa, input)
    r.children << c
    r.result = 0 if c.result != 1
  end
  if r.result == 1
    i = 0
    loop do
      st = i > 0 ? _parse(seppa, input) : nil
      et = st == nil || st.result == 1 ? _parse(eltpa, input) : nil
      break if st && et && st.empty? && et.result == 0
      break if st && et && st.empty? && et.empty?
      r.children << st if st
      r.children << et if et
      break if et == nil
      break if et.result != 1
      i = i + 1
    end
    r.result = 0 if jseq && i == 0
  end
  if r.result == 1 && endpa
    c = _parse(endpa, input)
    r.children << c
    r.result = 0 if c.result != 1
  end
  if r.result == 1
    r.length = input.offset - start
  else
    input.offset = start
  end
  r.prune! if input.options[:prune]
  r
end