
\[\                 @   s   d  Z  d d l Z d d l Z e j Z d d d  Z Gd d   d e j  Z Gd d	   d	 e j  Z Gd
 d   d e j	  Z	 Gd d   d e j
  Z
 d d   Z d S)z
Python 'utf-32' Codec
    Nstrictc             C   s   t  j |  | d  S)NT)codecsutf_32_decode)inputerrors r   &/usr/lib/python3.4/encodings/utf_32.pydecode
   s    r	   c               @   sR   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__encoder)selfr   r   r   r   r      s    zIncrementalEncoder.__init__Fc             C   sm   |  j  d  k rV t j | |  j  d } t j d k rF t j |  _  n t j |  _  | S|  j  | |  j  d S)Nr   little)r   r   utf_32_encoder   sys	byteorderutf_32_le_encodeutf_32_be_encode)r   r   finalresultr   r   r   encode   s    zIncrementalEncoder.encodec             C   s   t  j j |   d  |  _ d  S)N)r   r
   resetr   )r   r   r   r   r      s    zIncrementalEncoder.resetc             C   s   |  j  d  k r d Sd S)N   r   )r   )r   r   r   r   getstate    s    zIncrementalEncoder.getstatec             C   s@   | r d  |  _  n* t j d k r0 t j |  _  n t j |  _  d  S)Nr   )r   r   r   r   r   r   )r   stater   r   r   setstate'   s
    zIncrementalEncoder.setstateN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r
      s
   
r
   c               @   sO   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)N)r   BufferedIncrementalDecoderr   decoder)r   r   r   r   r   r   1   s    zIncrementalDecoder.__init__c             C   s   |  j  d  k r t j | | d |  \ } } } | d k rK t j |  _  n6 | d k rf t j |  _  n | d k r t d   n  | | f S|  j  | |  j |  S)Nr         z%UTF-32 stream does not start with BOM)r!   r   utf_32_ex_decodeutf_32_le_decodeutf_32_be_decodeUnicodeErrorr   )r   r   r   r   outputconsumedr   r   r   r   _buffer_decode5   s    !
z!IncrementalDecoder._buffer_decodec             C   s   t  j j |   d  |  _ d  S)N)r   r    r   r!   )r   r   r   r   r   B   s    zIncrementalDecoder.resetc             C   s`   t  j j |   d } |  j d  k r/ | d f St t j d k |  j t  j k k  } | | f S)Nr   r   big)r   r    r   r!   intr   r   r'   )r   r   Zaddstater   r   r   r   F   s    
zIncrementalDecoder.getstatec             C   s   t  j j |  |  | d } | d k rP t j d k rA t  j n t  j |  _ n< | d k r t j d k rt t  j n t  j |  _ n	 d  |  _ d  S)Nr"   r   r,   )r   r    r   r   r   r'   r&   r!   )r   r   r   r   r   r   T   s    
zIncrementalDecoder.setstateN)r   r   r   r   r+   r   r   r   r   r   r   r   r   0   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#   d  |  _  t j j |  | |  d  S)N)r   r   r.   r   )r   streamr   r   r   r   r   d   s    	zStreamWriter.__init__c             C   s   t  j j |   d  |  _ d  S)N)r   r.   r   r   )r   r   r   r   r   h   s    zStreamWriter.resetc             C   sc   |  j  d  k rO t j | |  } t j d k r? t j |  _  n t j |  _  | S|  j  | |  Sd  S)Nr   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   l   s    zStreamWriter.encodeN)r   r   r   r   r   r   r   r   r   r   r.   c   s   r.   c               @   s+   e  Z d  Z d d   Z d d d  Z d S)StreamReaderc             C   s3   t  j j |   y
 |  ` Wn t k
 r. Yn Xd  S)N)r   r0   r   r	   AttributeError)r   r   r   r   r   y   s
    
zStreamReader.resetr   c             C   s|   t  j | | d d  \ } } } | d k r< t  j |  _ n6 | d k rW t  j |  _ n | d k rr t d   n  | | f S)Nr   Fr"   r#   z%UTF-32 stream does not start with BOMr$   )r   r%   r&   r	   r'   r(   )r   r   r   objectr*   r   r   r   r   r	      s    !zStreamReader.decodeN)r   r   r   r   r	   r   r   r   r   r0   w   s   r0   c               C   s4   t  j d d d t d t d t d t d t d t  S)	Nnamezutf-32r   r	   incrementalencoderincrementaldecoderstreamreaderstreamwriter)r   	CodecInfor   r	   r
   r   r0   r.   r   r   r   r   getregentry   s    	r9   )__doc__r   r   r   r   r	   r
   r    r   r.   r0   r9   r   r   r   r   <module>   s   	#3