o
    ft                     @   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