
\[\s                 @   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-16' Codec


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

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

    Nstrictc             C   s   t  j |  | d  S)NT)codecsutf_16_decode)inputerrors r   &/usr/lib/python3.4/encodings/utf_16.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_16_encoder   sys	byteorderutf_16_le_encodeutf_16_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   6   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      r   z%UTF-16 stream does not start with BOM)r!   r   utf_16_ex_decodeutf_16_le_decodeutf_16_be_decodeUnicodeErrorr   )r   r   r   r   outputconsumedr   r   r   r   _buffer_decode:   s    !
z!IncrementalDecoder._buffer_decodec             C   s   t  j j |   d  |  _ d  S)N)r   r    r   r!   )r   r   r   r   r   G   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   K   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   Y   s    
zIncrementalDecoder.setstateN)r   r   r   r   r*   r   r   r   r   r   r   r   r   5   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#   t  j j |  | |  d  |  _ d  S)N)r   r-   r   r   )r   streamr   r   r   r   r   i   s    zStreamWriter.__init__c             C   s   t  j j |   d  |  _ d  S)N)r   r-   r   r   )r   r   r   r   r   m   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   q   s    zStreamWriter.encodeN)r   r   r   r   r   r   r   r   r   r   r-   h   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   r/   r   r	   AttributeError)r   r   r   r   r   ~   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-16 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   r/   |   s   r/   c               C   s4   t  j d d d t d t d t d t d t d t  S)	Nnamezutf-16r   r	   incrementalencoderincrementaldecoderstreamreaderstreamwriter)r   	CodecInfor   r	   r
   r   r/   r-   r   r   r   r   getregentry   s    	r8   )__doc__r   r   r   r   r	   r
   r    r   r-   r/   r8   r   r   r   r   <module>   s   	#3