3
4^^%                 @   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 j| |d  t| fS )Nr   )codecsBOM_UTF8utf_8_encodelen)inputerrors r	   )/usr/lib/python3.6/encodings/utf_8_sig.pyencode   s    r   c             C   sD   d}| d d t jkr&| dd  } d}t j| |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   s   t jj| | d| _d S )N   )r   r   __init__first)selfr   r	   r	   r
   r      s    zIncrementalEncoder.__init__Fc             C   s:   | j r$d| _ tjtj|| jd  S tj|| jd S d S )Nr   )r   r   r   r   r   )r   r   finalr	   r	   r
   r      s
    zIncrementalEncoder.encodec             C   s   t jj|  d| _d S )Nr   )r   r   resetr   )r   r	   r	   r
   r   '   s    zIncrementalEncoder.resetc             C   s   | j S )N)r   )r   r	   r	   r
   getstate+   s    zIncrementalEncoder.getstatec             C   s
   || _ d S )N)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j| | d| _d S )Nr   )r   BufferedIncrementalDecoderr   r   )r   r   r	   r	   r
   r   2   s    zIncrementalDecoder.__init__c             C   sv   | j rht|dk r*tjj|r"dS d| _ n>d| _ |d d tjkrhtj|dd  ||\}}||d fS tj|||S )Nr    r   )r!   r   )r   r   r   r   
startswithr   )r   r   r   r   r   r   r	   r	   r
   _buffer_decode6   s    z!IncrementalDecoder._buffer_decodec             C   s   t jj|  d| _d S )Nr   )r   r    r   r   )r   r	   r	   r
   r   G   s    zIncrementalDecoder.resetc             C   s   t jj| }|d | jfS )Nr   )r   r    r   r   )r   r   r	   r	   r
   r   K   s    zIncrementalDecoder.getstatec             C   s   t jj| | |d | _d S )Nr   )r   r    r   r   )r   r   r	   r	   r
   r   P   s    zIncrementalDecoder.setstateN)r   )r   r   r   r   r#   r   r   r   r	   r	   r	   r
   r   1   s
   
r   c               @   s   e Zd Zdd ZdddZdS )StreamWriterc             C   s.   t jj|  y| `W n tk
r(   Y nX d S )N)r   r$   r   r   AttributeError)r   r	   r	   r
   r   V   s
    zStreamWriter.resetr   c             C   s   t j| _t||S )N)r   r   r   )r   r   r   r	   r	   r
   r   ]   s    zStreamWriter.encodeN)r   )r   r   r   r   r   r	   r	   r	   r
   r$   U   s   r$   c               @   s   e Zd Zdd ZdddZdS )StreamReaderc             C   s.   t jj|  y| `W n tk
r(   Y nX d S )N)r   r&   r   r   r%   )r   r	   r	   r
   r   b   s
    zStreamReader.resetr   c             C   sp   t |dk rtjj|r\dS n>|d d tjkr\tj| _tj|dd  |\}}||d fS tj| _tj||S )Nr   r!   r   )r!   r   )r   r   r   r"   r   r   )r   r   r   r   r   r	   r	   r
   r   i   s    zStreamReader.decodeN)r   )r   r   r   r   r   r	   r	   r	   r
   r&   a   s   r&   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   r&   r$   r	   r	   r	   r
   getregentryy   s    r-   )r   )r   )
__doc__r   r   r   r   r    r   r$   r&   r-   r	   r	   r	   r
   <module>	   s   

$