o
    éT•jt  ã                   @   sx   d Z ddlZddlZej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j
ƒZ
dd„ ZdS )z‚ Python 'utf-16' Codec


Written by Marc-Andre Lemburg (mal@lemburg.com).

(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.

é    NÚstrictc                 C   s   t  | |d¡S )NT)ÚcodecsÚutf_16_decode)ÚinputÚerrors© r   ú'/usr/lib/python3.10/encodings/utf_16.pyÚdecode   s   r	   c                   @   s8   e Zd Zddd„Zddd„Zdd„ Zd	d
„ Zdd„ ZdS )ÚIncrementalEncoderr   c                 C   ó   t j | |¡ d | _d S ©N)r   r
   Ú__init__Úencoder©Úselfr   r   r   r   r      ó   
zIncrementalEncoder.__init__Fc                 C   sP   | j d u rt || j¡d }tjdkrtj| _ |S tj| _ |S |   || j¡d S )Nr   Úlittle)r   r   Úutf_16_encoder   ÚsysÚ	byteorderÚutf_16_le_encodeÚutf_16_be_encode)r   r   ÚfinalÚresultr   r   r   Úencode   s   

ÿzIncrementalEncoder.encodec                 C   ó   t j | ¡ d | _d S r   )r   r
   Úresetr   ©r   r   r   r   r   !   ó   
zIncrementalEncoder.resetc                 C   s   | j d u rdS dS )Né   r   )r   r   r   r   r   Úgetstate%   s   zIncrementalEncoder.getstatec                 C   s0   |rd | _ d S tjdkrtj| _ d S tj| _ d S ©Nr   )r   r   r   r   r   r   ©r   Ústater   r   r   Úsetstate,   s
   

zIncrementalEncoder.setstateN©r   )F)Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r$   r   r   r   r   r
      s    


r
   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚIncrementalDecoderr   c                 C   r   r   )r   ÚBufferedIncrementalDecoderr   Údecoderr   r   r   r   r   6   r   zIncrementalDecoder.__init__c                 C   sx   | j d u r4t ||d|¡\}}}|dkrtj| _ ||fS |dkr(tj| _ ||fS |dkr0tdƒ‚||fS |   || j|¡S )Nr   éÿÿÿÿé   r   ú%UTF-16 stream does not start with BOM)r+   r   Úutf_16_ex_decodeÚutf_16_le_decodeÚutf_16_be_decodeÚUnicodeErrorr   )r   r   r   r   ÚoutputÚconsumedr   r   r   r   Ú_buffer_decode:   s   
ÿüþz!IncrementalDecoder._buffer_decodec                 C   r   r   )r   r*   r   r+   r   r   r   r   r   G   r   zIncrementalDecoder.resetc                 C   sD   t j | ¡d }| jd u r|dfS ttjdk| jt ju kƒ}||fS )Nr   r   Úbig)r   r*   r    r+   Úintr   r   r1   )r   r#   Úaddstater   r   r   r    K   s   


ÿzIncrementalDecoder.getstatec                 C   st   t j | |¡ |d }|dkr tjdkrt j| _d S t j| _d S |dkr5tjdkr/t j| _d S t j| _d S d | _d S )Nr-   r   r6   )r   r*   r$   r   r   r1   r0   r+   r"   r   r   r   r$   Y   s   
ÿþ
ÿþ
zIncrementalDecoder.setstateNr%   )r&   r'   r(   r   r5   r   r    r$   r   r   r   r   r)   5   s    
r)   c                   @   s(   e Zd Zd	dd„Zdd„ Zd	dd„ZdS )
ÚStreamWriterr   c                 C   s   t j | ||¡ d | _d S r   )r   r9   r   r   )r   Ústreamr   r   r   r   r   i   s   
zStreamWriter.__init__c                 C   r   r   )r   r9   r   r   r   r   r   r   r   m   r   zStreamWriter.resetc                 C   sD   | j d u rt ||¡}tjdkrtj| _ |S tj| _ |S |   ||¡S r!   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   q   s   

ÿzStreamWriter.encodeNr%   )r&   r'   r(   r   r   r   r   r   r   r   r9   h   s    
r9   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚStreamReaderc                 C   s,   t j | ¡ z| `W d S  ty   Y d S w r   )r   r;   r   r	   ÚAttributeErrorr   r   r   r   r   ~   s   
ÿzStreamReader.resetr   c                 C   s^   t  ||dd¡\}}}|dkrt j| _||fS |dkr#t j| _||fS |dkr+tdƒ‚||fS )Nr   Fr,   r-   r   r.   )r   r/   r0   r	   r1   r2   )r   r   r   Úobjectr4   r   r   r   r   r	   …   s   ÿüþzStreamReader.decodeNr%   )r&   r'   r(   r   r	   r   r   r   r   r;   |   s    r;   c                	   C   s   t jdttttttd�S )Nzutf-16)Únamer   r	   ÚincrementalencoderÚincrementaldecoderÚstreamreaderÚstreamwriter)r   Ú	CodecInfor   r	   r
   r)   r;   r9   r   r   r   r   Úgetregentry’   s   ùrD   r%   )Ú__doc__r   r   r   r   r	   r
   r*   r)   r9   r;   rD   r   r   r   r   Ú<module>   s    
#3