o
    f#                     @   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J t | }t  }|j}|j}|dd}|dd}|d|d@ |f d |d	}|r?|t| |d	}|s2|d
 | t| fS )Nr   
z\nz\rzbegin %o %s
i  ascii-   s    
end
)	r   readwritereplaceencodebinasciib2a_uugetvaluelen)	inputerrorsfilenamemodeinfileoutfiler
   r   chunk r   )/usr/lib/python3.10/encodings/uu_codec.py	uu_encode   s   r   c           
   
   C   s   |dksJ t | }t  }|j}|j}	 | }|std|d d dkr&nq	 | }|r1|dkr2n7zt|}W n* tjyc } z|d d	 d
@ d d d }	t|d |	 }W Y d }~nd }~ww || q(|sotd| t| fS )Nr      z"Missing "begin" line in input data   s   beginTs   end
r       ?         zTruncated input data)	r   readliner   
ValueErrorr   a2b_uuErrorr   r   )
r   r   r   r   r"   r   sdatavnbytesr   r   r   	uu_decode%   s8   r*   c                   @   s    e Zd ZdddZdddZdS )Codecr   c                 C   
   t ||S N)r   selfr   r   r   r   r   r   G      
zCodec.encodec                 C   r,   r-   )r*   r.   r   r   r   decodeJ   r0   zCodec.decodeNr   )__name__
__module____qualname__r   r1   r   r   r   r   r+   F   s    
r+   c                   @      e Zd ZdddZdS )IncrementalEncoderFc                 C      t || jd S Nr   )r   r   r/   r   finalr   r   r   r   N      zIncrementalEncoder.encodeNF)r3   r4   r5   r   r   r   r   r   r7   M       r7   c                   @   r6   )IncrementalDecoderFc                 C   r8   r9   )r*   r   r:   r   r   r   r1   R   r<   zIncrementalDecoder.decodeNr=   )r3   r4   r5   r1   r   r   r   r   r?   Q   r>   r?   c                   @      e Zd ZeZdS )StreamWriterNr3   r4   r5   bytescharbuffertyper   r   r   r   rA   U       rA   c                   @   r@   )StreamReaderNrB   r   r   r   r   rF   X   rE   rF   c                
   C   s   t jdttttttddS )NuuF)namer   r1   incrementalencoderincrementaldecoderstreamreaderstreamwriter_is_text_encoding)codecs	CodecInfor   r*   r7   r?   rF   rA   r   r   r   r   getregentry]   s   rP   )r   r   r   r2   )__doc__rN   r   ior   r   r*   r+   r7   r?   rA   rF   rP   r   r   r   r   <module>   s    	

!