a
    Ift                     @   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   !lib/python3.9/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 u 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 u 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 u 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 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   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 u 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y&   Y n0 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