sclass LinesBuffer { new L completeLines; S currentLine = ""; void append(S s) { currentLine += s; int i; while ((i = currentLine.indexOf('\n')) >= 0) { // inefficient completeLines.add(dropTrailingBackslashR(substring(currentLine, 0, i))); currentLine = substring(currentLine, i+1); } } L getAndClearCompleteLines() { ret cloneAndClearList(completeLines); } }