
    e/>                        d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
 ddlmZ ddlmZ  ej                   d      Z ej                   d      Zdadad	 Zdd
Z G d d      Zd Z G d de
j                        ZddZ e	j6                  ej8                  ee        e	j:                  ej8                  e        e	j<                  ej8                  ddg        e	j>                  ej8                  d       y)    )annotationsN   )Image	ImageFile)i32le)	deprecatez^%%([^:]*):[ \t]*(.*)[ \t]*$z^%[%!\w]([^:]*)[ \t]*$c                 \   t         t        j                  j                  d      r6t        "dd l} dD ]  }| j                  |      |a n dat        a t         duS 	 t        j                  ddgt        j                         da t         duS t         duS # t        $ r da Y t         duS w xY w)Nwinr   )gswin32cgswin64cgsFr   z	--version)stdout)	gs_binarysysplatform
startswithgs_windows_binaryshutilwhich
subprocess
check_callDEVNULLOSError)r   binarys     4/usr/lib/python3/dist-packages/PIL/EpsImagePlugin.pyhas_ghostscriptr   -   s    <<""5) (< .F||F+7,2).
 ).%)I E!!"%%t[&9*BTBTU 	 E!!9E!!  "!	E!!"s   )B B+*B+c                b   t               sd}t        |      | d   \  }} }}|\  }	}
t        |      xs d}|d   |z  }|d   |z  }d|z  |
d   |
d   z
  z  }d|z  |
d   |
d   z
  z  }t        j                         \  }}t        j                  |       d}t        |d      r6t
        j                  j                  |j                        r|j                  }nt        j                         \  }}t        j                  |       |}t        |d	      5 }|j                  dt        j                         |j                         }|j                  d       |}|dkD  rC|j!                  t#        |d
            }|sn%|t%        |      z  }|j'                  |       |dkD  rCddd       |rdnd}t(        dd|dd|dd|dd|ddddd| d| d|
d     d|
d     dd|ddg}	 d}t*        j,                  j/                  d      r7t1        j2                         }|xj4                  t0        j6                  z  c_        t1        j8                  ||       t;        j                  |      }|j=                          	 t        j>                  |       |rt        j>                  |       |j@                  jC                         }|j                          |S # 1 sw Y   7xY w# t        $ r Y Dw xY w# 	 t        j>                  |       |rt        j>                  |       w w # t        $ r Y w w xY wxY w)z!Render an image using Ghostscriptz%Unable to locate Ghostscript on pathsr   r   g      R@      Nnamewbi  pngalphappmrawz-qz-gdxz-rfz-dBATCHz	-dNOPAUSEz-dSAFERz	-sDEVICE=z-sOutputFile=z-c z
 translatez-fshowpager
   )startupinfo)"r   r   inttempfilemkstemposclosehasattrpathexistsr    openseekioSEEK_ENDtellreadminlenwriter   r   r   r   r   STARTUPINFOdwFlagsSTARTF_USESHOWWINDOWr   r   loadunlinkimcopy)tilesizefpscaletransparencymsgdecoderoffsetdatalengthbboxwidthheightres_xres_yout_fdoutfileinfile_tempinfilein_fdr&   fsize
lengthfilesdevicecommandr)   out_imr@   s                                r   Ghostscriptr\   D   s    5cl #'q'GT64LFD JO!EGeOE!Wu_F5LDGd1g-.E6MT!WtAw./E&&(OFGHHVKr6rww~~bgg6%--/{

 +t$ 	GGAr{{#GGIE GGAJJq.GGC
J78c!f$

 q.	 (ZXF 	
U1IQvaj!
U1IQuQi 
F8
y!G8*AtAwhZz*#G*<<""5)$002K:#B#BBg;?G$	IIg		+& 
	B
LLNIs	 	h  				IIg		+&  		sP   BK&BK/ ;,K  K 	K,+K,/L.1,LL.	L+(L.*L++L.c                  :    e Zd ZdZd Zej                  fdZd Zy)PSFilez
    Wrapper for bytesio object that treats either CR or LF as end of line.
    This class is no longer used internally, but kept for backwards compatibility.
    c                <    t        ddd       || _        d | _        y )Nr^      zSIf you need the functionality of this class you will need to implement it yourself.)action)r   rD   char)selfrD   s     r   __init__zPSFile.__init__   s%    6	
 	    c                J    d | _         | j                  j                  ||       y N)rb   rD   r3   )rc   rI   whences      r   r3   zPSFile.seek   s    	VV$re   c                   | j                   xs dg}d | _         | j                  j                  d      }|dvrGt        |      r<|j	                  |       | j                  j                  d      }|dvrt        |      r<| j                  j                  d      | _         | j                   dv rd | _         dj                  |      j                  d      S )Nre   r      
latin-1)rb   rD   r7   r9   appendjoindecode)rc   rX   cs      r   readlinezPSFile.readline   s    YY#	GGLLOSVHHQKQA SV GGLLO	99DIxx{!!),,re   N)	__name__
__module____qualname____doc__rd   r4   SEEK_SETr3   rp    re   r   r^   r^      s    
 #%++ %-re   r^   c                R    | d d dk(  xs t        |       dk\  xr t        |       dk(  S )N      %!PS   P )r9   i32)prefixs    r   _acceptr}      s/    "1: TS[A%5%S#f+:STre   c                  @    e Zd ZdZdZdZdddddZd	 Zd
 ZddZ	d Z
y)EpsImageFilez.EPS File Parser for the Python Imaging LibraryEPSzEncapsulated PostscriptLLABRGBCMYK)r   r   r   rx   c                     j                   j                        \   j                  j                         d _        d  _        t        d      }t        |      }d}d}dd fd} fd}	  j                  j                  d      }|d	k(  r|dk(  rJn|d
v r|dk(  r?2|dk\  r+|d   t        d      k(  rd}t        |      |r	 |        d}d}|d   ||<   |dz  }p|r|d   t        d      k7  s|d d dk(  r
 |        d}t        |d | d      }	 ||	      st        j                  |	      }
|
r<|
j                  d      }|d d dk(  r|dd   j                  d<   nd j                  |<   n|	d   dk(  rnd}t        |      |d d dk(  rY|d| j!                  d d      }d |d d D        \  }}}}|dk(  rd _        n|dk(  r	  j"                  |    _        nn=||f _        y r#r!|d d dk(  rn&t        |d | d      }	 ||	       n
|d d dk(  rdd} |         j                  sd}t        |      y # t$        $ r Y ,w xY w)Nr      r   TFc                 r    dj                   vrd} t        |       dj                   vrd} t        |       y )NPS-Adobez'EPS header missing "%!PS-Adobe" commentBoundingBoxz*EPS header missing "%%BoundingBox" comment)infoSyntaxError)rG   rc   s    r   check_required_header_commentsz:EpsImageFile._open.<locals>.check_required_header_comments   s@    *?!#&&DII-B!#&& .re   c                   	 t         j                  |       }|r|j                  dd      \  }}|j                  |<   |dk(  r|dk(  rd
yj                  rri
rg	 |j                         D cg c]  }t        t        |             }}|d   |d   z
  |d   |d   z
  f_        d	d
j                  z   	|ffg_        yyy # t        j                  $ r}d}t	        |      |d }~ww xY wc c}w # t        $ r Y yw xY w)Nnot an EPS filer   r   r   z(atend)Tr   r   epsr   r   )splitmatchreerrorr   groupr   _sizer*   floatrC   rB   	Exception)rX   merG   kviboxrK   rI   reading_trailer_commentsrc   trailer_reacheds           r   _read_commentz)EpsImageFile._open.<locals>._read_comment   s   .KKN
 wwq!}1 		!%I~370  "ZZ',D
! ;<'')"DQ3uQx="DC"D),Q#a&#a&3q6/)IDJ!&(:FVSM R)DI
 ) 	 88 .'!#&A-." #E
  ) ! !s;   C C2 .C-	8C2 C*C%%C*-C2 2	C>=C>r   re   rj   %r      s   %%EndCommentsrk      r   	    zbad EPS headerr`   s   %ImageData:   c              3  2   K   | ]  }t        |        y wrg   )r*   ).0values     r   	<genexpr>z%EpsImageFile._open.<locals>.<genexpr>W  s      5#(CJ5s   rx   1   s   %%EOFs	   %%Trailerz!cannot determine EPS bounding box)_find_offsetrD   r3   _moder   	bytearray
memoryviewr7   ordr   strfieldr   r   r   r   r   mode_map
ValueError)rc   byte_arrbytes_mv
bytes_readreading_header_commentsr   r   byterG   rX   r   r   image_data_valuescolumnsrows	bit_depthmode_idrK   rI   r   r   s   `                @@@@r   _openzEpsImageFile._open   s   ,,TWW5 	V

S>h'
"&#( 	'	 	< 77<<?Ds{? ? $  {c#h./)#..2:<6;3 &'
'+Aw$a
& A;#c(*hsm?O.O24.3+*-y9$Q'AAGGAJRa5J.45abEDIIj1+-DIIaL1 .%cl*#2.0 %-R
$;$A$A$$J!5,=bq,A51y' >!$DJ!^%)]]7%;
 $d]
 %=
 BQ<8+*-y9a "1-"&JM P 	'(zz5C#, / & s   I 	IIc                (   |j                  d      }|dk(  r6|j                  dt        j                         |j	                         }d}||fS t        |      dk(  r,|j                  d      }t        |      }t        |d      }||fS d}t        |      )Nrx   ry   r   rz   r   r   )r7   r3   r4   r5   r6   r{   r   )rc   rD   rX   rK   rI   rG   s         r   r   zEpsImageFile._find_offset{  s    GGAJ<GGAr{{#WWYFF v~ Vz! 
AVFAYF
 v~ $Cc""re   c                6   | j                   rot        | j                   | j                  | j                  ||      | _        | j                  j
                  | _        | j                  j                  | _        g | _         t        j                  j                  |       S rg   )
rB   r\   rC   rD   r@   moder   r   r   r>   )rc   rE   rF   s      r   r>   zEpsImageFile.load  sc    99!$))TYYUDGDJDJDI{{%%re   c                     y rg   rv   )rc   argskwargss      r   	load_seekzEpsImageFile.load_seek  s     	re   Nr   F)rq   rr   rs   rt   formatformat_descriptionr   r   r   r>   r   rv   re   r   r   r      s4    8F25Uv6HbH.&re   r   c                   | j                          | j                  dk(  rd}n1| j                  dk(  rd}n| j                  dk(  rd}nd}t        |      |r|j                  d       |j                  d	       |j                  d
| j                  z         |j                  d       |j                  d       |j                  d       |j                  d| j                  z         |j                  d|z         |j                  d       |j                  d       |j                  d| j                  d   |d   z  z         |j                  d| j                  z         |j                  d| j                  z         |j                  d| j                  d   | j                  d   | j                  d   fz         |j                  d       |j                  |d   dz          t        |d      r|j                          t        j                  | |dd| j                  z   ddfg       |j                  d       |j                  d        t        |d      r|j                          yy)!z*EPS Writer for the Python Imaging Library.r   )r   r   s   imager   )r   r   s   false 3 colorimager   )r   rx   s   false 4 colorimagezimage mode is not supporteds   %!PS-Adobe-3.0 EPSF-3.0
s   %%Creator: PIL 0.1 EpsEncode
s   %%%%BoundingBox: 0 0 %d %d
s   %%Pages: 1
s   %%EndComments
s   %%Page: 1 1
s   %%ImageData: %d %d s   %d %d 0 1 1 "%s"
s   gsave
s   10 dict begin
s   /buf %d string def
r   r   s   %d %d scale
s   %d %d 8
s   [%d 0 0 -%d 0 %d]
s+   { currentfile buf readhexstring pop } bind
r      
flushr   r   Ns   
%%%%EndBinary
s   grestore end
)	r>   r   r   r:   rC   r/   r   r   _save)r@   rD   filenamer   operatorrG   s         r   r   r     s    GGI 
ww#~#	E	0	F	0+o

-.
23
0277:;
!
#$
!"
'"''12
&12 HHZHH HH$
Xa[(@ABHH'(HH\BGG#$HH#rwwqz2771:rwwqz&JJKHH<=HHXa[5 !r7

OOBeVbgg%5q$?@AHH!"HHr7

 re   z.psz.epszapplication/postscriptr   )r   ) 
__future__r   r4   r-   r   r   r   r+   r   r   r   _binaryr   r{   
_deprecater   compiler   r   r   r   r   r\   r^   r}   r   r   register_openr   register_saveregister_extensionsregister_mimerv   re   r   <module>r      s   , # 	 	 	  
   ! !
 	

23

,-	 ".Zz"- "-JUO9&& Oj.h   L''w ?   L'' /   ,--v ?   L'')A Bre   