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