def self.parse(ts)
cur, item = [], []
def ts.take
if length < 1
raise Error, "unexpected EOF"
end
shift
end
def ts.readto
l = []
while length > 0 && ! yield(self[0])
l << shift
end
return l.join
end
pre = ts.readto{|t| t == "machine"}
while ts.length > 0
cur << ts.take + ts.readto{|t| ! skip?(t)}
cur << ts.take
if ts.include?('login')
cur << ts.readto{|t| t == "login"} + ts.take + ts.readto{|t| ! skip?(t)}
cur << ts.take
end
if ts.include?('password')
cur << ts.readto{|t| t == "password"} + ts.take + ts.readto{|t| ! skip?(t)}
cur << ts.take
end
cur << ts.readto{|t| t == "machine"}
item << cur
cur = []
end
[pre, item]
end