o
    éT•j%  ã                   @   st   d Z ddlZddd„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 )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.
é    NÚstrictc                 C   s   t jt  | |¡d  t| ƒfS ©Nr   )ÚcodecsÚBOM_UTF8Úutf_8_encodeÚlen)ÚinputÚerrors© r
   ú*/usr/lib/python3.10/encodings/utf_8_sig.pyÚencode   s   ÿr   c                 C   sD   d}| d d… t jkr| dd … } d}t  | |d¡\}}||| fS )Nr   é   T)r   r   Úutf_8_decode)r   r	   ÚprefixÚoutputÚconsumedr
   r
   r   Ú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__Úfirst©Úselfr	   r
   r
   r   r      ó   
zIncrementalEncoder.__init__Fc                 C   s6   | j rd| _ tjt || j¡d  S t || j¡d S r   )r   r   r   r   r	   )r   r   Úfinalr
   r
   r   r      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 S ©N©r   r   r
   r
   r   Úgetstate+   s   zIncrementalEncoder.getstatec                 C   s
   || _ d S 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   r   r   r
   r
   r   r   2   r   zIncrementalDecoder.__init__c                 C   sv   | j r4t|ƒdk rtj |¡rdS d| _ nd| _ |d d… tjkr4t |dd … ||¡\}}||d fS t |||¡S )Nr   ©Ú r   r   )r   r   r   r   Ú
startswithr   )r   r   r	   r   r   r   r
   r
   r   Ú_buffer_decode6   s   ÿz!IncrementalDecoder._buffer_decodec                 C   r   r   )r   r,   r   r   r   r
   r
   r   r   G   r    zIncrementalDecoder.resetc                 C   s   t j | ¡}|d | jfS r   )r   r,   r#   r   r$   r
   r
   r   r#   K   s   zIncrementalDecoder.getstatec                 C   s   t j | |¡ |d | _d S r   )r   r,   r&   r   r$   r
   r
   r   r&   P   s   zIncrementalDecoder.setstateNr'   )r(   r)   r*   r   r0   r   r#   r&   r
   r
   r
   r   r+   1   s    
r+   c                   @   ó   e Zd Zdd„ Zddd„ZdS )ÚStreamWriterc                 C   ó,   t j | ¡ z| `W d S  ty   Y d S w r!   )r   r2   r   r   ÚAttributeErrorr   r
   r
   r   r   V   ó   
ÿzStreamWriter.resetr   c                 C   s   t j| _t||ƒS r!   )r   r   r   )r   r   r	   r
   r
   r   r   ]   s   
zStreamWriter.encodeNr'   )r(   r)   r*   r   r   r
   r
   r
   r   r2   U   ó    r2   c                   @   r1   )ÚStreamReaderc                 C   r3   r!   )r   r7   r   r   r4   r   r
   r
   r   r   b   r5   zStreamReader.resetr   c                 C   sp   t |ƒdk rtj |¡rdS n|d d… tjkr.tj| _t |dd … |¡\}}||d fS tj| _t ||¡S )Nr   r-   )r   r   r   r/   r   r   )r   r   r	   r   r   r
   r
   r   r   i   s   ýzStreamReader.decodeNr'   )r(   r)   r*   r   r   r
   r
   r
   r   r7   a   r6   r7   c                	   C   s   t jdttttttd�S )Nz	utf-8-sig)Únamer   r   ÚincrementalencoderÚincrementaldecoderÚstreamreaderÚstreamwriter)r   Ú	CodecInfor   r   r   r+   r7   r2   r
   r
   r
   r   Úgetregentryy   s   ùr>   r'   )
Ú__doc__r   r   r   r   r,   r+   r2   r7   r>   r
   r
   r
   r   Ú<module>   s    	

$