
    Rh%                         d Z ddlZdd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)a   Python 'utf-8-sig' Codec
This work similar to UTF-8 with the following changes:

* On encoding/writing a UTF-8 encoded BOM will be prepended/written as the
  first three bytes.

* On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these
  bytes will be skipped.
    Nc                 l    t         j                  t        j                  | |      d   z   t        |       fS Nr   )codecsBOM_UTF8utf_8_encodelen)inputerrorss     */usr/lib/python3.12/encodings/utf_8_sig.pyencoder      s1    OOf11%@CCJ     c                     d}| d d t         j                  k(  r| dd  } d}t        j                  | |d      \  }}|||z   fS )Nr      T)r   r   utf_8_decode)r	   r
   prefixoutputconsumeds        r   decoder      sQ    FRayFOO#ab	,,UFDAVXHVO$$r   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__firstselfr
   s     r   r   zIncrementalEncoder.__init__   s    !!**48
r   c                     | j                   r;d| _         t        j                  t        j                  || j                        d   z   S t        j                  || j                        d   S r   )r   r   r   r   r
   )r   r	   finals      r   r   zIncrementalEncoder.encode   sX    ::DJ??&&udkk:1=> > &&udkk:1==r   c                 P    t         j                  j                  |        d| _        y r   )r   r   resetr   r   s    r   r!   zIncrementalEncoder.reset'   s    !!''-
r   c                     | j                   S Nr   r"   s    r   getstatezIncrementalEncoder.getstate+   s    zzr   c                     || _         y r$   r%   r   states     r   setstatezIncrementalEncoder.setstate.   s	    
r   Nstrict)F)__name__
__module____qualname__r   r   r!   r&   r*    r   r   r   r      s    >r   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   r   r   s     r   r   zIncrementalDecoder.__init__2   s    ))224@
r   c                 6   | j                   rwt        |      dk  r(t        j                  j	                  |      ryd| _         nAd| _         |d d t        j                  k(  r$t        j
                  |dd  ||      \  }}||dz   fS t        j
                  |||      S )Nr    r   r   )r   r   r   r   
startswithr   )r   r	   r
   r   r   r   s         r   _buffer_decodez!IncrementalDecoder._buffer_decode6   s    ::5zA~??--e4 #!"DJ
!9/**59feD 'VX"HQJ//""5&%88r   c                 P    t         j                  j                  |        d| _        y r   )r   r4   r!   r   r"   s    r   r!   zIncrementalDecoder.resetG   s    ))//5
r   c                 b    t         j                  j                  |       }|d   | j                  fS r   )r   r4   r&   r   r(   s     r   r&   zIncrementalDecoder.getstateK   s+    11::4@a$**%%r   c                 X    t         j                  j                  | |       |d   | _        y r   )r   r4   r*   r   r(   s     r   r*   zIncrementalDecoder.setstateP   s#    ))224?1X
r   Nr+   )r-   r.   r/   r   r9   r!   r&   r*   r0   r   r   r2   r2   1   s    9"&
r   r2   c                       e Zd Zd ZddZy)StreamWriterc                 f    t         j                  j                  |        	 | `y # t        $ r Y y w xY wr$   )r   r>   r!   r   AttributeErrorr"   s    r   r!   zStreamWriter.resetV   2    !!$'	 		   $ 	00c                 D    t         j                  | _        t        ||      S r$   )r   r   r   )r   r	   r
   s      r   r   zStreamWriter.encode]   s    ))eV$$r   Nr+   )r-   r.   r/   r!   r   r0   r   r   r>   r>   U   s    %r   r>   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   rE   r!   r   r@   r"   s    r   r!   zStreamReader.resetb   rA   rB   c                 P   t        |      dk  r t        j                  j                  |      rOy|d d t        j                  k(  r8t        j                  | _        t        j                  |dd  |      \  }}||dz   fS t        j                  | _        t        j                  ||      S )Nr   r6   )r   r   r   r8   r   r   )r   r	   r
   r   r   s        r   r   zStreamReader.decodei   s    u:>))%0 2AY&//) --DK!'!4!4U12Yv!FVXHQJ''))""5&11r   Nr+   )r-   r.   r/   r!   r   r0   r   r   rE   rE   a   s    2r   rE   c            	      j    t        j                  dt        t        t        t
        t        t              S )Nz	utf-8-sig)namer   r   incrementalencoderincrementaldecoderstreamreaderstreamwriter)r   	CodecInfor   r   r   r2   rE   r>   r0   r   r   getregentryrO   y   s*    --!! r   r+   )
__doc__r   r   r   r   r4   r2   r>   rE   rO   r0   r   r   <module>rQ      sg    %22 .":: "H
%6&& 
%26&& 20	r   