o
    .d0	                     @  sv   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl	mZ dd	l	mZ G d
d dZdS )zGA wrapper for token iterators that lets us step through and peek ahead.    )annotations)deque)Deque)Iterator)List)	TOKEN_EOF)TOKEN_INITIAL)Tokenc                   @  sr   e Zd ZdZdddZG dd dZdd	d
ZdddZdddZdddZ	e
dddZd ddZd!ddZdS )"TokenStreamz+Step through or iterate a stream of tokens.	tokeniterIterator[Token]c                 C  s.   || _ t | _g | _tdtd| _t|  d S )Nr    )iterr   _pushedbalancing_stackr	   r   currentnext)selfr    r   E/var/www/Matress/matenv/lib/python3.10/site-packages/liquid/stream.py__init__   s
   zTokenStream.__init__c                   @  s.   e Zd ZdZdddZddd	ZdddZdS )zTokenStream.TokenStreamIteratorzAn iterable token stream.streamr
   c                 C  s
   || _ d S N)r   )r   r   r   r   r   r   !      
z(TokenStream.TokenStreamIterator.__init__returnr   c                 C  s   | S r   r   r   r   r   r   __iter__$   s   z(TokenStream.TokenStreamIterator.__iter__r	   c                 C  s.   | j j}|jtu r| j   tt| j  |S r   )r   r   typer   closeStopIterationr   r   tokr   r   r   __next__'   s   


z(TokenStream.TokenStreamIterator.__next__N)r   r
   r   r   r   r	   )__name__
__module____qualname____doc__r   r   r"   r   r   r   r   TokenStreamIterator   s
    

r)   r   c                 C  s
   |  | S r   )r)   r   r   r   r   r   /   r   zTokenStream.__iter__r	   c                 C  s\   | j }| jr| j | _ |S | j jtur,z	t| j| _ W |S  ty+   |   Y |S w |S r   )	r   r   popleftr   r   r   r   r   r   r    r   r   r   r"   2   s   
zTokenStream.__next__strc                 C  s"   d| j  d| j g}d|S )Nz	current: znext: 
)r   peekjoin)r   bufr   r   r   __str__=   s   


zTokenStream.__str__c                 C  s   t | S )z&Return the next token from the stream.)r   r   r   r   r   
next_tokenD   s   zTokenStream.next_tokenc                 C  s   t | }| j}| | |S )zLook at the next token.)r   r   push)r   r   resultr   r   r   r-   H   s   
zTokenStream.peekr!   Nonec                 C  s   | j | j || _dS )z Push a token back to the stream.N)r   appendr   r    r   r   r   r2   P   s   
zTokenStream.pushc                 C  s   t dtd| _dS )zClose the stream.r   r   N)r	   r   r   r   r   r   r   r   U   s   zTokenStream.closeN)r   r   r#   r$   )r   r+   )r!   r	   r   r4   )r   r4   )r%   r&   r'   r(   r   r)   r   r"   r0   r1   propertyr-   r2   r   r   r   r   r   r
      s    





r
   N)r(   
__future__r   collectionsr   typingr   r   r   liquid.tokenr   r   r	   r
   r   r   r   r   <module>   s    