Your IP : 216.73.216.213
B
Z��Z� � @ sV d Z ddlmZ yddlmZ W n ek
r@ ddlmZ Y nX G dd� de�ZdS )a'
Implements a buffer with insertion points. When you know you need to
"get back" to a place and write more later, simply call insertion_point()
at that spot and get a new StringIOTree object that is "left behind".
EXAMPLE:
>>> a = StringIOTree()
>>> _= a.write('first\n')
>>> b = a.insertion_point()
>>> _= a.write('third\n')
>>> _= b.write('second\n')
>>> a.getvalue().split()
['first', 'second', 'third']
>>> c = b.insertion_point()
>>> d = c.insertion_point()
>>> _= d.write('alpha\n')
>>> _= b.write('gamma\n')
>>> _= c.write('beta\n')
>>> b.getvalue().split()
['second', 'alpha', 'beta', 'gamma']
>>> i = StringIOTree()
>>> d.insert(i)
>>> _= i.write('inserted\n')
>>> out = StringIO()
>>> a.copyto(out)
>>> out.getvalue().split()
['first', 'second', 'alpha', 'inserted', 'beta', 'gamma', 'third']
� )�absolute_import)�StringIOc @ sJ e Zd ZdZddd�Zdd� Zdd� Zd d
� Zdd� Zd
d� Z dd� Z
dS )�StringIOTreez
See module docs.
Nc C s, g | _ |d krt� }|| _|j| _g | _d S )N)�prepended_childrenr �stream�write�markers)�selfr � r
�F/opt/alt/python37/lib64/python3.7/site-packages/Cython/StringIOTree.py�__init__/ s zStringIOTree.__init__c C s* dd� | j D �}|�| j�� � d�|�S )Nc S s g | ]}|� � �qS r
)�getvalue)�.0�xr
r
r �
<listcomp>8 s z)StringIOTree.getvalue.<locals>.<listcomp>� )r �appendr r
�join)r �contentr
r
r r
7 s zStringIOTree.getvaluec C s6 x| j D ]}|�|� qW | j�� }|r2|�|� dS )zUPotentially cheaper than getvalue as no string concatenation
needs to happen.N)r �copytor r
r )r �target�childZstream_contentr
r
r r <