î
ëTs  ã               @   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   úS/Library/Frameworks/Python.framework/Versions/3.4/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