
hR\                 @   s   d  d l  m Z m Z d  d l m Z m Z m Z d d l	 Z	 d d l
 Z
 d Z d d   Z Gd d	   d	 e j  Z Gd
 d   d e j  Z e j d e  d d   Z e j e j e e  e j e j e  e j e j d  d S)   )Image	ImageFile)i16leo16lei8    Nz0.1c             C   s   |  d  d  d k S)N      DanM   LinS)r	   r
    )prefixr   r   G/var/www/dbchiro/venv/lib/python3.4/site-packages/PIL/MspImagePlugin.py_accept&   s    r   c               @   s(   e  Z d  Z d Z d Z d d   Z d S)MspImageFileMSPzWindows Paintc             C   s&  |  j  j d  } | d  d  d k r7 t d   n  d } x8 t d d d  D]$ } | t | | | d   A} qP W| d k r t d   n  d	 |  _ t | d d    t | d
 d    f |  _ | d  d  d k rd d |  j d d f g |  _ n d d |  j d d  f g |  _ d  S)N    r      DanM   LinSznot an MSP filer      zbad MSP checksum1   rawr   r   )r   r   )r   r   )r   r   r   )r   r   )fpreadSyntaxErrorrangei16modesizeZtile)selfschecksumir   r   r   _open3   s    "	/"zMspImageFile._openN)__name__
__module____qualname__formatZformat_descriptionr#   r   r   r   r   r   .   s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)
MspDecoderTc             C   s   t  j   } t d |  j j d d  } yF |  j j d  t j d |  j j	 |  j j
 |  j j	 d   } Wn! t j k
 r t d   Yn XxOt |  D]A\ } } y| d k r | j |  w n  |  j j
 |  } t |  | k rt d	 | | f   n  d } x | | k  rt | |  }	 | d
 7} |	 d k rt j d | | | d   \ }
 } | j | |
  | d 7} q|	 }
 | j | | | |
   | |
 7} qWWq t j k
 rt d |   Yq Xq W|  j | j   d  d S)N         r   z<%dHr   zTruncated MSP file in row mapr   z/Truncated MSP file, expected %d bytes on row %sr   ZBczCorrupted MSP file in row %dr   )r)   )r   r   r   )r   r   )ioBytesIO	bytearraystateZxsizefdseekstructunpack_fromZysizer   errorIOError	enumeratewritelenr   unpackZ
set_as_rawgetvalue)r   bufferZimgZ
blank_lineZrowmapxZrowlenrowidxZruntypeZruncountZrunvalr   r   r   decodeo   s@    #
&zMspDecoder.decodeN)r$   r%   r&   Z	_pulls_fdr?   r   r   r   r   r(   J   s   #r(   r   c          	   C   s%  |  j  d k r% t d |  j    n  d g d } t d  t d  | d <| d <|  j \ | d <| d	 <d \ | d
 <| d <d \ | d <| d <|  j \ | d <| d <d } x | D] } | | A} q W| | d <x! | D] } | j t |   q Wt j |  | d d |  j d d f g  d  S)Nr   zcannot write mode %s as MSPr      s   Das   nMr   r      r      r   r*   r+   	      r   r   )r   r   )r   r   )r   r   )r   r   r   )r   r5   r   r   r7   o16r   _save)Zimr   filenameheaderr!   hr   r   r   rF      s    !
rF   z.msp) r   r   Z_binaryr   r   r   rE   r   r2   r,   __version__r   r   Z	PyDecoderr(   Zregister_decoderrF   Zregister_openr'   Zregister_saveZregister_extensionr   r   r   r   <module>   s   N