B
    ̦Z^#                 @   s   d Z ddlZddlZddlmZ dddZdd	d
ZG dd dejZG dd dejZG dd dej	Z	G dd deej
Z
G dd deejZdd ZdS )a  Python 'uu_codec' Codec - UU content transfer encoding.

This codec de/encodes from bytes to bytes.

Written by Marc-Andre Lemburg (mal@lemburg.com). Some details were
adapted from uu.py which was written by Lance Ellinghouse and
modified by Jack Jansen and Fredrik Lundh.
    N)BytesIOstrict<data>  c       	      C   s   |dkst t| }t }|j}|j}|dd}|dd}|d|d@ |f d |d	}x|r~|t| |d	}qbW |d
 | t	| fS )Nr   
z\nz\rzbegin %o %s
i  ascii-   s    
end
)
AssertionErrorr   readwritereplaceencodebinasciiZb2a_uugetvaluelen)	inputerrorsfilenamemodeinfileoutfiler   r   chunk r   ?/work/yifan.wang/lscsoft/opt/python37/lib/python3.7/uu_codec.py	uu_encode   s    r   c       
   
   C   s   |dkst t| }t }|j}|j}x(| }|s:td|d d dkr(P q(W x| }|rd|dkrfP yt|}W nR tjk
r } z2|d d d@ d	 d d
 }	t|d |	 }W d d }~X Y nX || qRW |std| t	| fS )Nr   z"Missing "begin" line in input data   s   begins   end
r       ?         zTruncated input data)
r
   r   readliner   
ValueErrorr   Za2b_uuErrorr   r   )
r   r   r   r   r!   r   sdatavnbytesr   r   r   	uu_decode%   s0    $r(   c               @   s    e Zd ZdddZdddZdS )	Codecr   c             C   s
   t ||S )N)r   )selfr   r   r   r   r   r   G   s    zCodec.encodec             C   s
   t ||S )N)r(   )r*   r   r   r   r   r   decodeJ   s    zCodec.decodeN)r   )r   )__name__
__module____qualname__r   r+   r   r   r   r   r)   F   s   
r)   c               @   s   e Zd ZdddZdS )IncrementalEncoderFc             C   s   t || jd S )Nr   )r   r   )r*   r   finalr   r   r   r   N   s    zIncrementalEncoder.encodeN)F)r,   r-   r.   r   r   r   r   r   r/   M   s   r/   c               @   s   e Zd ZdddZdS )IncrementalDecoderFc             C   s   t || jd S )Nr   )r(   r   )r*   r   r0   r   r   r   r+   R   s    zIncrementalDecoder.decodeN)F)r,   r-   r.   r+   r   r   r   r   r1   Q   s   r1   c               @   s   e Zd ZeZdS )StreamWriterN)r,   r-   r.   bytescharbuffertyper   r   r   r   r2   U   s   r2   c               @   s   e Zd ZeZdS )StreamReaderN)r,   r-   r.   r3   r4   r   r   r   r   r5   X   s   r5   c            
   C   s   t jdttttttddS )NuuF)namer   r+   incrementalencoderincrementaldecoderstreamreaderstreamwriter_is_text_encoding)codecs	CodecInfor   r(   r/   r1   r5   r2   r   r   r   r   getregentry]   s    r?   )r   r   r   )r   )__doc__r=   r   ior   r   r(   r)   r/   r1   r2   r5   r?   r   r   r   r   <module>   s   

!