
    Rht                         d Z ddlZddlZej                  ZddZ G d dej                        Z G d dej                        Z G d d	ej                        Z	 G d
 dej                        Z
d Zy)z Python 'utf-16' Codec


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

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

    Nc                 0    t        j                  | |d      S )NT)codecsutf_16_decode)inputerrorss     '/usr/lib/python3.12/encodings/utf_16.pydecoder	      s    vt44    c                   .    e Zd ZddZddZd Zd Zd Zy)	IncrementalEncoderc                 R    t         j                  j                  | |       d | _        y N)r   r   __init__encoderselfr   s     r   r   zIncrementalEncoder.__init__   s    !!**48r
   c                     | j                   dt        j                  || j                        d   }t        j
                  dk(  rt        j                  | _         |S t        j                  | _         |S | j                  || j                        d   S )Nr   little)r   r   utf_16_encoder   sys	byteorderutf_16_le_encodeutf_16_be_encode)r   r   finalresults       r   encodezIncrementalEncoder.encode   su    <<))%=a@F}}(%66 M  &66M||E4;;/22r
   c                 P    t         j                  j                  |        d | _        y r   )r   r   resetr   r   s    r   r   zIncrementalEncoder.reset!   s    !!''-r
   c                 "    | j                   dS dS )N   r   )r   r   s    r   getstatezIncrementalEncoder.getstate%   s    
 \\)1q1r
   c                     |rd | _         y t        j                  dk(  rt        j                  | _         y t        j
                  | _         y Nr   )r   r   r   r   r   r   r   states     r   setstatezIncrementalEncoder.setstate,   s2    DL}}(%66%66r
   Nstrict)F)__name__
__module____qualname__r   r   r   r"   r'    r
   r   r   r      s    327r
   r   c                   ,    e Zd ZddZd Zd Zd Zd Zy)IncrementalDecoderc                 R    t         j                  j                  | |       d | _        y r   )r   BufferedIncrementalDecoderr   decoderr   s     r   r   zIncrementalDecoder.__init__6   s    ))224@r
   c                 ,   | j                   lt        j                  ||d|      \  }}}|dk(  rt        j                  | _         ||fS |dk(  rt        j                  | _         ||fS |dk\  rt        d      ||fS | j                  || j                  |      S )Nr      r!   %UTF-16 stream does not start with BOM)r2   r   utf_16_ex_decodeutf_16_le_decodeutf_16_be_decodeUnicodeErrorr   )r   r   r   r   outputconsumedr   s          r   _buffer_decodez!IncrementalDecoder._buffer_decode:   s    <<''vq%@ *VXyB%66
 H%%	 a%66 H%% Q"#JKKH%%||E4;;66r
   c                 P    t         j                  j                  |        d | _        y r   )r   r1   r   r2   r   s    r   r   zIncrementalDecoder.resetG   s    ))//5r
   c                     t         j                  j                  |       d   }| j                  |dfS t	        t
        j                  dk(  | j                  t         j                  u k7        }||fS )Nr   r!   big)r   r1   r"   r2   intr   r   r9   )r   r&   addstates      r   r"   zIncrementalDecoder.getstateK   sn     11::4@C
 <<1:.(?(??A Bx  r
   c                 l   t         j                  j                  | |       |d   }|dk(  r?t        j                  dk(  rt         j
                  | _        y t         j                  | _        y |dk(  r?t        j                  dk(  rt         j                  | _        y t         j
                  | _        y d | _        y )Nr5   r   r@   )r   r1   r'   r   r   r9   r8   r2   r%   s     r   r'   zIncrementalDecoder.setstateY   s    ))224?aA:"}}5 #33DL!'!8!8 L aZ"}}5 #33DL!'!8!8 L  DLr
   Nr(   )r*   r+   r,   r   r=   r   r"   r'   r-   r
   r   r/   r/   5   s    7! r
   r/   c                   "    e Zd ZddZd ZddZy)StreamWriterc                 T    t         j                  j                  | ||       d | _        y r   )r   rE   r   r   )r   streamr   s      r   r   zStreamWriter.__init__i   s!    $$T66:r
   c                 P    t         j                  j                  |        d | _        y r   )r   rE   r   r   r   s    r   r   zStreamWriter.resetm   s    !!$'r
   c                     | j                   Wt        j                  ||      }t        j                  dk(  rt        j
                  | _         |S t        j                  | _         |S | j                  ||      S r$   )r   r   r   r   r   r   r   )r   r   r   r   s       r   r   zStreamWriter.encodeq   sc    <<))%8F}}(%66 M  &66M<<v..r
   Nr(   )r*   r+   r,   r   r   r   r-   r
   r   rE   rE   h   s    	/r
   rE   c                       e Zd Zd ZddZy)StreamReaderc                 f    t         j                  j                  |        	 | `y # t        $ r Y y w xY wr   )r   rK   r   r	   AttributeErrorr   s    r   r   zStreamReader.reset~   s2    !!$'	 		s   $ 	00c                     t        j                  ||dd      \  }}}|dk(  rt         j                  | _        ||fS |dk(  rt         j                  | _        ||fS |dk\  rt        d      ||fS )Nr   Fr4   r5   r!   r6   )r   r7   r8   r	   r9   r:   )r   r   r   objectr<   r   s         r   r	   zStreamReader.decode   s    ##E61e< 	&9? 11DK
 !!	 !^ 11DK !! q[FGG!!r
   Nr(   )r*   r+   r,   r   r	   r-   r
   r   rK   rK   |   s    	"r
   rK   c            	      j    t        j                  dt        t        t        t
        t        t              S )Nzutf-16)namer   r	   incrementalencoderincrementaldecoderstreamreaderstreamwriter)r   	CodecInfor   r	   r   r/   rK   rE   r-   r
   r   getregentryrW      s*    --!! r
   r(   )__doc__r   r   r   r   r	   r   r1   r/   rE   rK   rW   r-   r
   r   <module>rY      sp     
		5!722 !7F1 :: 1 f/6&& /("6&& ",	r
   