U
    ڲgG                     @  sJ   d dl mZ d dlZd dlmZ ddlmZ G dd dZdZd	Z	d
Z
dS )    )annotationsN)TYPE_CHECKING   )EpsImagePluginc                   @  s   e Zd ZdZd$ddZd%ddddd	Zdd
ddZddddddZddddddZdddddZ	ddddddZ
erddlmZ d&ddd dd!d"d#ZdS )'PSDrawz{
    Sets up printing to the given file. If ``fp`` is omitted,
    ``sys.stdout.buffer`` or ``sys.stdout`` is assumed.
    Nc                 C  s6   |s,zt jj}W n tk
r*   t j}Y nX || _d S )N)sysstdoutbufferAttributeErrorfp)selfr    r   ./tmp/pip-unpacked-wheel-xela2va7/PIL/PSDraw.py__init__"   s    zPSDraw.__init__z
str | NoneNone)idreturnc                 C  s:   | j d | j t | j t | j d i | _dS )z=Set up printing of a document. (Write PostScript DSC header.)sD   %!PS-Adobe-3.0
save
/showpage { } def
%%EndComments
%%BeginDocument
s   %%EndProlog
N)r   write	EDROFF_PSVDI_PSisofont)r   r   r   r   r   begin_document*   s    zPSDraw.begin_document)r   c                 C  s&   | j d t| j dr"| j   dS )z-Ends printing. (Write PostScript DSC footer.)s%   %%EndDocument
restore showpage
%%End
flushN)r   r   hasattrr   )r   r   r   r   end_document:   s    zPSDraw.end_documentstrint)fontsizer   c                 C  sJ   t |d}|| jkr2| jd||f  d| j|< | jd||f  dS )z~
        Selects which font to use.

        :param font: A PostScript font name
        :param size: Size in points.
        UTF-8s#   /PSDraw-%s ISOLatin1Encoding /%s E
r   s   /F0 %d /PSDraw-%s F
N)bytesr   r   r   )r   r   r   Z
font_bytesr   r   r   setfont@   s    



zPSDraw.setfontztuple[int, int])xy0xy1r   c                 C  s   | j d||  dS )z
        Draws a line between the two points. Coordinates are given in
        PostScript point coordinates (72 points per inch, (0, 0) is the lower
        left corner of the page).
        s   %d %d %d %d Vl
Nr   r   )r   r"   r#   r   r   r   lineQ   s    zPSDraw.lineztuple[int, int, int, int])boxr   c                 C  s   | j d|  dS )z
        Draws a rectangle.

        :param box: A tuple of four integers, specifying left, bottom, width and
           height.
        s   %d %d M 0 %d %d Vr
Nr$   )r   r&   r   r   r   	rectangleY   s    zPSDraw.rectangle)xytextr   c                 C  sD   t |d}d|d}d|d}| jd||f   dS )z
        Draws text at the given position. You must use
        :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method.
        r   s   \(   (s   \)   )s   %d %d M (%s) S
N)r    joinsplitr   r   )r   r(   r)   Z
text_bytesr   r   r   r)   b   s    
zPSDraw.textr   )ImagezImage.Imagez
int | None)r&   imdpir   c                 C  s2  |s|j dkrd}nd}|jd d | }|jd d | }t|d |d  }t|d |d  }||kr||| | }|}||kr|| | }|}|| d |d  }|| d |d  }	| jd	||	f  ||f|jkr||jd  }
||jd  }| jd
|
|f  t|| jdd | jd dS )z,Draw a PIL image, centered in the given box.1   d   r   H   r         s   gsave
%f %f translate
s   %f %f scale
 s
   
grestore
N)moder   floatr   r   r   Z_save)r   r&   r/   r0   xyZxmaxZymaxZdxZdyZsxZsyr   r   r   imageo   s.    
zPSDraw.image)N)N)N)__name__
__module____qualname____doc__r   r   r   r!   r%   r'   r)   r   r7   r.   r<   r   r   r   r   r      s   
	
 r   s  /S { show } bind def
/P { moveto show } bind def
/M { moveto } bind def
/X { 0 rmoveto } bind def
/Y { 0 exch rmoveto } bind def
/E {    findfont
        dup maxlength dict begin
        {
                1 index /FID ne { def } { pop pop } ifelse
        } forall
        /Encoding exch def
        dup /FontName exch def
        currentdict end definefont pop
} bind def
/F {    findfont exch scalefont dup setfont
        [ exch /setfont cvx ] cvx bind def
} bind def
s  /Vm { moveto } bind def
/Va { newpath arcn stroke } bind def
/Vl { moveto lineto stroke } bind def
/Vc { newpath 0 360 arc closepath } bind def
/Vr {   exch dup 0 rlineto
        exch dup 0 exch rlineto
        exch neg 0 rlineto
        0 exch neg rlineto
        setgray fill } bind def
/Tm matrix def
/Ve {   Tm currentmatrix pop
        translate scale newpath 0 0 .5 0 360 arc closepath
        Tm setmatrix
} bind def
/Vf { currentgray exch setgray fill setgray } bind def
s  /landscape false def
/errorBUF 200 string def
/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def
errordict begin /handleerror {
    initmatrix /Courier findfont 10 scalefont setfont
    newpath 72 720 moveto $error begin /newerror false def
    (PostScript Error) show errorNL errorNL
    (Error: ) show
        /errorname load errorBUF cvs show errorNL errorNL
    (Command: ) show
        /command load dup type /stringtype ne { errorBUF cvs } if show
        errorNL errorNL
    (VMstatus: ) show
        vmstatus errorBUF cvs show ( bytes available, ) show
        errorBUF cvs show ( bytes used at level ) show
        errorBUF cvs show errorNL errorNL
    (Operand stargck: ) show errorNL /ostargck load {
        dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL
    } forall errorNL
    (Execution stargck: ) show errorNL /estargck load {
        dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL
    } forall
    end showpage
} def end
)
__future__r   r   typingr   r7   r   r   r   r   ZERROR_PSr   r   r   r   <module>   s    