'Push some new data into this object.'

def push(self, data):

    parts = data.splitlines(True)
    if ((not parts) or (not parts[0].endswith(('\n', '\r')))):
        self._partial += parts
        return
    if self._partial:
        self._partial.append(parts[0])
        parts[0:1] = ''.join(self._partial).splitlines(True)
        del self._partial[:]
    if (not parts[(-1)].endswith('\n')):
        self._partial = [parts.pop()]
    self.pushlines(parts)
