U
    ¼Ê¦it  ã                   @   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.8/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   s   t j | |¡ d | _d S ©N)r   r
   Ú__init__Úencoder©Úselfr   r   r   r   r      s    zIncrementalEncoder.__init__Fc                 C   sN   | j d kr<t || j¡d }tjdkr0tj| _ n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   s   t j | ¡ d | _d S r   )r   r
   Úresetr   ©r   r   r   r   r   !   s    zIncrementalEncoder.resetc                 C   s   | j d krdS dS )Né   r   )r   r   r   r   r   Úgetstate%   s    zIncrementalEncoder.getstatec                 C   s,   |rd | _ ntjdkr tj| _ n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   s   t j | |¡ d | _d S r   )r   ÚBufferedIncrementalDecoderr   Údecoderr   r   r   r   r   6   s    zIncrementalDecoder.__init__c                 C   sl   | j d kr\t ||d|¡\}}}|dkr2tj| _ n"|dkrDtj| _ n|dkrTt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   s   t j | ¡ d | _d S r   )r   r%   r   r&   r   r   r   r   r   G   s    zIncrementalDecoder.resetc                 C   sD   t j | ¡d }| jd kr"|dfS ttjdk| jt jkkƒ}||fS )Nr   r   Úbig)r   r%   r   r&   Úintr   r   r,   )r   r   Zaddstater   r   r   r   K   s    


ÿzIncrementalDecoder.getstatec                 C   sd   t j | |¡ |d }|dkr8tjdkr.t jnt j| _n(|dkrZtjdkrPt jnt j| _nd | _d S )Nr(   r   r1   )r   r%   r    r   r   r,   r+   r&   r   r   r   r   r    Y   s    ÿþÿþzIncrementalDecoder.setstateN)r   )r!   r"   r#   r   r0   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   r3   r   r   )r   Ústreamr   r   r   r   r   i   s    zStreamWriter.__init__c                 C   s   t j | ¡ d | _d S r   )r   r3   r   r   r   r   r   r   r   m   s    zStreamWriter.resetc                 C   sF   | j d kr6t ||¡}tjdkr*tj| _ ntj| _ |S |   ||¡S d S r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   q   s    


zStreamWriter.encodeN)r   )r   )r!   r"   r#   r   r   r   r   r   r   r   r3   h   s   
r3   c                   @   s   e Zd Zdd„ Zddd„ZdS )ÚStreamReaderc                 C   s.   t j | ¡ z| `W n tk
r(   Y nX d S r   )r   r5   r   r	   ÚAttributeErrorr   r   r   r   r   ~   s
    zStreamReader.resetr   c                 C   sR   t  ||dd¡\}}}|dkr(t j| _n"|dkr:t j| _n|dkrJtdƒ‚||fS )Nr   Fr'   r(   r   r)   )r   r*   r+   r	   r,   r-   )r   r   r   Úobjectr/   r   r   r   r   r	   …   s    ÿ

zStreamReader.decodeN)r   )r!   r"   r#   r   r	   r   r   r   r   r5   |   s   r5   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$   r5   r3   r   r   r   r   Úgetregentry’   s    ùr>   )r   )Ú__doc__r   r   r   r   r	   r
   r%   r$   r3   r5   r>   r   r   r   r   Ú<module>   s   
#3