a
    ¦¾de1”  ã                   @   s²  d Z dZddlZddlmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ i ZedƒD ]ZZedk s´edkrÂde ee< q eedƒedƒedƒfv rîde eƒ ee< q e eƒee< q [dd„ Z!dZ"G dd„ dƒZ#ddlT ddej$fdd„Z%dd„ Z&G dd„ deƒZ'ej$fdd „Z(ej$fd!d"„Z)d+d%d&„Z*e+d'k�r®ddl,Z,e-e,j.ƒd(k�rže,j.d( Z/nd#Z/e*e/d)d*� dS ),z3.3.0z$Render drawing objects in Postscripté    N)ÚBytesIOÚStringIO)ÚgetFontÚstringWidthÚ
unicode2T1)ÚasBytesÚchar2intÚrawBytesÚasNativeÚ	isUnicode)Úfp_str)ÚRendererÚgetStateDeltaÚrenderScaledDrawing)ÚSTATE_DEFAULTS)Ú	rl_config)ÚFILL_EVEN_ODDé   é    é   z\%03oú\ú(ú)c                 C   s^   t | ƒ} g }|j}d}| D ]8}tt|ƒ }||ƒ |t|ƒ7 }|dkrd}|dƒ qd |¡S )Nr   éÈ   z\
Ú )r   ÚappendÚ_ESCAPEDICTr   ÚlenÚjoin)ÚsÚRZaRÚnÚc© r#   úT/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/renderPS.pyÚ_escape_and_limit   s    
r%   a?  
/RE { %def
  findfont begin
  currentdict dup length dict begin
 { %forall
   1 index /FID ne { def } { pop pop } ifelse
 } forall
 /FontName exch def dup length 0 ne { %if
   /Encoding Encoding 256 array copy def
   0 exch { %forall
     dup type /nametype eq { %ifelse
       Encoding 2 index 2 index put
       pop 1 add
     }{ %else
       exch pop
     } ifelse
   } forall
 } if pop
  currentdict dup end end
  /FontName get exch definefont pop
} bind def

/WinAnsiEncoding [
  39/quotesingle 96/grave 128/euro 130/quotesinglbase/florin/quotedblbase
  /ellipsis/dagger/daggerdbl/circumflex/perthousand
  /Scaron/guilsinglleft/OE 145/quoteleft/quoteright
  /quotedblleft/quotedblright/bullet/endash/emdash
  /tilde/trademark/scaron/guilsinglright/oe/dotlessi
  159/Ydieresis 164/currency 166/brokenbar 168/dieresis/copyright
  /ordfeminine 172/logicalnot 174/registered/macron/ring
  177/plusminus/twosuperior/threesuperior/acute/mu
  183/periodcentered/cedilla/onesuperior/ordmasculine
  188/onequarter/onehalf/threequarters 192/Agrave/Aacute
  /Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
  /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute
  /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
  /Ocircumflex/Otilde/Odieresis/multiply/Oslash
  /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn
  /germandbls/agrave/aacute/acircumflex/atilde/adieresis
  /aring/ae/ccedilla/egrave/eacute/ecircumflex
  /edieresis/igrave/iacute/icircumflex/idieresis
  /eth/ntilde/ograve/oacute/ocircumflex/otilde
  /odieresis/divide/oslash/ugrave/uacute/ucircumflex
  /udieresis/yacute/thorn/ydieresis
] def
c                   @   sº  e Zd Zdkdd„Zdd„ Zdldd	„Zd
d„ Zdd„ Zdmdd„Zdd„ Z	dd„ Z
dndd„Zdd„ Zdd„ Zg dfdd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zdod'd(„Zd)d*„ Zd+d,„ Zdpd-d.„Zdqd/d0„Zdrd2d3„Zdsd5d6„Zdtd8d9„Zdud:d;„Zdvd=d>„Zdwd@dA„ZdBdC„ ZdDdE„ Z dxdGdH„Z!dIdJ„ Z"dydKdL„Z#dzdMdN„Z$dOdP„ Z%dQdR„ Z&dSdT„ Z'dUdV„ Z(dWdX„ Z)d{dYdZ„Z*d|d[d\„Z+d]d^„ Z,d_d`„ Z-dadb„ Z.dcdd„ Z/d}dedf„Z0dgdh„ Z1d~didj„Z2dS )ÚPSCanvas©é,  r(   é   c                 C   sÂ   |\| _ | _g }|j| _|j| _d| _g | _| jj| _d| _	d  | _
 | _ | _ | _ | _ | _ | _| _g | _|  td td ¡ |  td ¡ |  d¡ |  d¡ |  d¡ || _t| _d S )Nr   Ú
ÚfontNameÚfontSizeÚstrokeColorr)   é   )ÚwidthÚheightr   Ú_xtraState_pushÚpopÚ_xtraState_popÚcommentsÚcodeÚcode_appendÚ_sepÚ_strokeColorÚ
_fillColorÚ
_lineWidthÚ_fontÚ	_fontSizeÚ_lineCapÚ	_lineJoinÚ_colorÚ
_fontsUsedÚsetFontr   ÚsetStrokeColorÚ
setLineCapÚsetLineJoinÚsetLineWidthÚPostScriptLevelr   Ú	_fillMode)ÚselfÚsizerF   Z	xtraStater#   r#   r$   Ú__init__[   s2    
þÿÿÿ


zPSCanvas.__init__c                 C   s   | j r|  d| ¡ d S )Nú%)r4   r6   )rH   Úmsgr#   r#   r$   Úcommentq   s    zPSCanvas.commentNc                 C   sN   | j dkr|  |||||¡ n,| j dkr<|  |||||¡ ntd| j  ƒ‚d S )Nr.   r)   zUnsupported Postscript Level %s)rF   Ú_drawImageLevel1Ú_drawImageLevel2Ú
ValueError)rH   ÚimageÚx1Úy1r/   r0   r#   r#   r$   Ú	drawImaget   s
    

zPSCanvas.drawImagec                 C   s   |   d¡ d S )NÚshowpage©r6   ©rH   r#   r#   r$   Úclear}   s    zPSCanvas.clearc                 C   sn   | j s
d S g }| j D ].}t|ƒ}|js|jdkr| d||f ¡ q|rj| dt¡ | j d| j 	|¡¡ d S )NZWinAnsiEncodingzWinAnsiEncoding /%s /%s REr   r.   )
r@   r   Ú_dynamicFontÚencNamer   ÚinsertÚPS_WinAnsiEncodingr5   r7   r   )rH   ÚCr+   ÚfontObjr#   r#   r$   Ú_t1_re_encode€   s    

zPSCanvas._t1_re_encodec                 C   s˜   t |dƒst|dƒ}n|}| jd dkr0|  ¡  | j dd| j| jf ¡ |  ¡  | t	| j
 | j¡ƒ¡ ||ur”| ¡  ddlm} ||dd	d
� d S )NÚwriteÚwbéÿÿÿÿrU   r   z‰%%!PS-Adobe-3.0 EPSF-3.0
%%%%BoundingBox: 0 0 %d %d
%%%% Initialization:
/m {moveto} bind def
/l {lineto} bind def
/c {curveto} bind def
)ÚmarkfilenameZXPR3ZEPSF)ZcreatorcodeZfiletype)ÚhasattrÚopenr5   rX   r[   r/   r0   r_   r`   r	   r7   r   ÚcloseÚreportlab.lib.utilsrc   )rH   ÚfÚ_frc   r#   r#   r$   ÚsaveŒ   s    


ù	zPSCanvas.savec                 C   s   |   | jf¡ |  d¡ d S )NÚgsave)r1   Ú_fontCodeLocr6   rW   r#   r#   r$   Ú	saveState¢   s    zPSCanvas.saveStatec                 C   s   |   d¡ |  ¡ \| _d S )NÚgrestore)r6   r3   rl   rW   r#   r#   r$   ÚrestoreState¦   s    
zPSCanvas.restoreStatec                 C   s    |p| j }|p| j}t|||ƒS )zlReturn the logical width of the string if it were drawn
        in the current font (defaults to self.font).)r;   r<   r   )rH   r   Úfontr,   r#   r#   r$   r   ª   s    

zPSCanvas.stringWidthc                 C   s"   | j |kr|| _ |  d| ¡ d S )Nz%d setlinecap)r=   r6   ©rH   Úvr#   r#   r$   rC   ±   s    
zPSCanvas.setLineCapc                 C   s"   | j |kr|| _ |  d| ¡ d S )Nz%d setlinejoin)r>   r6   rq   r#   r#   r$   rD   ¶   s    
zPSCanvas.setLineJoinr   c                 C   sn   d}t |ttfƒr(|  d|||f ¡ nBt |ttfƒrj|dksFJ dƒ‚d tt|ƒ¡}|  d|||f ¡ dS )z7Two notations.  pass two numbers, or an array and phaseZsetdashz[%s %s] 0 %sr   zphase is a length in user spaceú z
[%s] %s %sN)	Ú
isinstanceÚfloatÚintr6   ÚtupleÚlistr   ÚmapÚstr)rH   ÚarrayÚphaseZpsoperationZ	textarrayr#   r#   r$   ÚsetDash»   s    zPSCanvas.setDashc                 C   s   || _ |  |¡ d S ©N)r8   ÚsetColor©rH   Úcolorr#   r#   r$   rB   Æ   s    zPSCanvas.setStrokeColorc                 C   s`   | j |kr\|| _ |r\t|dƒr@|  dt|j|j|j|jƒ ¡ n|  dt|j|j	|j
ƒ ¡ d S )NÚcyanz%s setcmykcolorz%s setrgbcolor)r?   rd   r6   r   r‚   ZmagentaZyellowZblackZredZgreenZbluer€   r#   r#   r$   r   Ê   s    

"zPSCanvas.setColorc                 C   s   || _ |  |¡ d S r~   )r9   r   r€   r#   r#   r$   ÚsetFillColorÓ   s    zPSCanvas.setFillColorc                 C   s
   || _ d S r~   )rG   rq   r#   r#   r$   ÚsetFillMode×   s    zPSCanvas.setFillModec                 C   s"   || j kr|| _ |  d| ¡ d S )Nz%s setlinewidth)r:   r6   )rH   r/   r#   r#   r$   rE   Ú   s    
zPSCanvas.setLineWidthc                 C   s:   | j |ks| j|kr6t| jƒ| _|| _ || _|  d¡ d S )Nr   )r;   r<   r   r5   rl   r6   )rH   rp   r,   Úleadingr#   r#   r$   rA   ß   s
    zPSCanvas.setFontc                 C   s8   | j d kr4|  | j ¡ |  dt||ƒt||ƒf ¡ d S )Nú%s m %s l stroke)r8   r   r6   r   ©rH   rR   rS   Úx2Úy2r#   r#   r$   Úlineæ   s    
zPSCanvas.linec                 C   s,   z
t |ƒW S    tdt|ƒ ƒ‚Y n0 dS )z{
        return a copy of string s with special characters in postscript strings
        escaped with backslashes.
        zcannot escape %sN)r%   rP   Úascii)rH   r   r#   r#   r$   Ú_escapeë   s    
zPSCanvas._escapec           
      C   s  |dkrd S t ||ƒ}|  |¡}|dkrJ|  | j¡ |  d||f ¡ d S |dkph|dkph|dkph|dk}|dkpˆ|dkpˆ|dkpˆ|dk}|dk}|rú|rú| jd u rªd	}	nd
}	|  | j¡ |  d|||	f ¡ |  d¡ | jd urø|  | j¡ |  d¡ n|  | j¡ |  d||f ¡ d S )Né   r   z%s m (%s) show r)   é   é   r.   é   r   zfill z %s m (%s) true charpath gsave %sz	grestore zstroke z%s m (%s) true charpath stroke )r   rŒ   r   r9   r6   r8   )
rH   ÚxÚyr   ÚtextRenderModeZxyÚfillÚstrokeZ	addToClipÚopr#   r#   r$   Ú_textOutõ   s,    

  


zPSCanvas._textOutc                 C   s^  |}| j }| j}| j}	| j}
t|ƒs´z| d¡}W n€ ty² } zh|jdd… \}}t|jd d… d|jd ||d |… |||… |||d … f f Ž ‚W Y d }~n
d }~0 0 t||g|j	 ƒD ]r\}}||k�rt
|jjƒ}|d|t|ƒf ƒ ||	v�r|	 |¡ |}|  ||||¡ || | |j¡|¡7 }qÆ||k�rZd | _|  |jj|¡ d S )NÚutf8r)   rŽ   z%s
%s-->%s<--%sé
   ú"(%s) findfont %s scalefont setfont)r6   r<   r@   rŒ   r   ÚdecodeÚUnicodeDecodeErrorÚargsr   ZsubstitutionFontsr
   ÚfaceÚnamer   r   r—   r   rZ   r;   rA   )rH   r^   r‘   r’   r   r“   Zfcr6   r,   Z	fontsUsedÚescapeÚeÚiÚjrh   ÚtÚpsNamer#   r#   r$   Ú_issueT1String  s.    `



zPSCanvas._issueT1StringÚleftc                 C   sP  |dv }|dv }|s|�rL|dkrzt || j| jƒ}	|dkrD||	8 }n6|dkrZ||	d 8 }n |dkrz|t|||	| j| jƒ8 }t| jƒ}
| j| j sÌt|
jj	ƒ}d|t
| jƒf | j| j< || jvrÌ| j |¡ |d	krø|  d
t
||ƒt
|ƒf ¡ d	 }}| j}|
j�r| j||||d� n| j|
||||d� |  |¡ |d	k�rL|  d¡ d S )N)r   r)   rŽ   r�   )r.   r)   r�   r�   r§   ÚendÚmiddleç       @Únumericrš   r   zgsave %s translate %s rotate©r“   rn   )r   r;   r<   ÚnumericXShiftr   r5   rl   r
   rž   rŸ   r   r@   r   r6   r?   rY   r—   r¦   r   )rH   r‘   r’   r   ZangleÚtext_anchorr“   ZneedFillZ
needStrokeÚtextLenr^   r¥   ZoldColorr#   r#   r$   Ú
drawString+  s6    





zPSCanvas.drawStringr©   c                 C   s   | j |||||d� d S ©N)r®   r“   ©r°   )rH   r‘   r’   Útextr®   r“   r#   r#   r$   ÚdrawCentredStringI  s    zPSCanvas.drawCentredStringr¨   c                 C   s   | j |||||d� d S r±   r²   )rH   r³   r‘   r’   r®   r“   r#   r#   r$   ÚdrawRightStringL  s    zPSCanvas.drawRightStringc
                 C   s€   d}
t ||ƒt ||||||ƒf}| jd krH|  | j¡ |  |
| d ¡ | jd kr||  | j¡ |  |
| |	rpdprd d ¡ d S )Nz%s m %s curvetoz eofillz
 closepathr   z stroke)r   r9   r   r6   r8   )rH   rR   rS   rˆ   r‰   Úx3Úy3Zx4Zy4ÚclosedÚcodelineÚdatar#   r#   r$   Ú	drawCurveO  s    



ÿþzPSCanvas.drawCurver.   c                 C   sZ   t ||ƒt||ƒ }}t ||ƒt||ƒ }}| j||f||f||f||ffd||d� dS )z)Draw a rectangle between x1,y1, and x2,y2r.   )r¸   r•   r”   N)ÚminÚmaxÚpolygon)rH   rR   rS   rˆ   r‰   r•   r”   r#   r#   r$   Úrect]  s    zPSCanvas.recté   c           
      C   sÚ   t ||ƒt||ƒ }}t ||ƒt||ƒ }}d}dg}|j}	|	||| || || ddf ƒ |	||| || || ddf ƒ |	||| || || ddf ƒ |	||| || || ddf ƒ |	dƒ |  |¡ d	S )
z³Draw a rounded rectangle between x1,y1, and x2,y2,
        with corners inset as ellipses with x radius rx and y radius ry.
        These should have x1<x2, y1<y2, rx>0, and ry>0.zJmatrix currentmatrix %s %s translate %s %s scale 0 0 1 %s %s arc setmatrixÚnewpathéZ   é´   i  éh  r   Ú	closepathN)r¼   r½   r   Ú_fillAndStroke)
rH   rR   rS   rˆ   r‰   ÚrxÚryZellipsePathÚrrÚar#   r#   r$   Ú	roundRecte  s    """"zPSCanvas.roundRectc                 C   s   |   ||||¡ dS )zqDraw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.
        These should have x1<x2 and y1<y2.N)ÚdrawArcr‡   r#   r#   r$   Úellipse�  s    zPSCanvas.ellipsec                 C   s$   |   || || || || ¡ d S r~   )rÍ   )rH   ZxcZycÚrr#   r#   r$   Úcircle‡  s    zPSCanvas.circlerÄ   c                 C   sV  || d || d  }}	|| d || d  }
}|   ||||||¡}tj| d }tj| d }|| }d}| jdkrÒ|  | j¡ |  |¡ d}| jdkr¨|  d¡ |  ||	¡ |  d¡ | jdkrÒ|  d¡ | jdk�rR|  | j¡ ||
t |¡  |	|t 	|¡   }}|�s |  |¡ |�rH|  ||	¡ |  ||¡ |  d	¡ |  d
¡ dS )zÿDraw a partial ellipse inscribed within the rectangle x1,y1,x2,y2,
        starting at startAng degrees and covering extent degrees.   Angles
        start with 0 to the right (+x) and increase counter-clockwise.
        These should have x1<x2 and y1<y2.rª   g     €f@r   Nr.   rk   Úeofillrn   rÅ   r•   )
Ú_genArcCodeÚmathÚpir9   r   r6   r8   ÚlineToÚcosÚsin)rH   rR   rS   rˆ   r‰   ÚstartAngÚextentÚ
fromcenterÚcxÚcyrÇ   rÈ   r¹   ZstartAngleRadiansZextentRadiansZendAngleRadiansZcodelineAppendedZstartxZstartyr#   r#   r$   rÌ   Š  s2    


&

zPSCanvas.drawArcc                 C   sn   t || d ƒ}t || d ƒ}|| d || d  }	}
d}|dkrLd}nd}|	|
||||| |f}|| S )zOCalculate the path for an arc inscribed in rectangle defined by (x1,y1),(x2,y2)rª   zImatrix currentmatrix %s %s translate %s %s scale 0 0 1 %s %s %s setmatrixr   ÚarcZarcn)Úabs)rH   rR   rS   rˆ   r‰   r×   rØ   ZxScaleZyScaler‘   r’   r¹   rÜ   rº   r#   r#   r$   rÑ   µ  s    zPSCanvas._genArcCodec           	      C   s|   t |ƒdksJ dƒ‚|d }|dd … }g }|j}|dt|ƒ ƒ |D ]}|dt|ƒ ƒ qF|rh|dƒ | j|||d� d S )	Nr)   z"Polygon must have 2 or more pointsr   r.   ú%s mú%s lrÅ   )r•   r”   )r   r   r   rÆ   )	rH   Úpr¸   r•   r”   ÚstartZpolyrÊ   Zpointr#   r#   r$   r¾   Ç  s    zPSCanvas.polygonc                 C   sJ   | j d krF|  | j ¡ d}|D ]&}|  |t|d ƒt|d ƒf ¡ qd S )Nr†   r   r.   )r8   Z	_setColorr6   r   )rH   ZlineListr�   r/   r¹   rŠ   r#   r#   r$   Úlines×  s
    
zPSCanvas.linesc                 C   s   |   dt||ƒ ¡ d S )NrÞ   ©r6   r   ©rH   r‘   r’   r#   r#   r$   ÚmoveToÞ  s    zPSCanvas.moveToc                 C   s   |   dt||ƒ ¡ d S )Nrß   rã   rä   r#   r#   r$   rÔ   á  s    zPSCanvas.lineToc              
   C   s    |   dt||||||ƒ ¡ d S )Nz%s crã   )rH   rR   rS   rˆ   r‰   r¶   r·   r#   r#   r$   ÚcurveToä  s    zPSCanvas.curveToc                 C   s   |   d¡ d S )NrÅ   rV   rW   r#   r#   r$   Ú	closePathç  s    zPSCanvas.closePathc                 C   sz   t |ƒdksJ dƒ‚| jd krv|  | j¡ |  |d d |d d ¡ |dd … D ]}|  |d |d ¡ qR|  d¡ d S )Nr.   z#Polyline must have 1 or more pointsr   r•   )r   r8   r   rå   rÔ   r6   )rH   rà   r¤   r#   r#   r$   ÚpolyLineê  s    
zPSCanvas.polyLinec              
   C   sR  g }|j }d}|D �] }|d }t|dd … ƒ}|tkrŒ|rZd}|dt|d d… ƒ ƒ n|dt|d d… ƒ ƒ |dt|dd … ƒ ƒ q|tkrÊd}|d d… \}	}
}}}}||  |	|
||||¡ƒ q|tk�r(|röd}|dt|d d… ƒ ƒ n|dt|d d… ƒ ƒ |dt|dd … ƒ ƒ qtd| ƒ‚q|�rD|d	ƒ |  |¡ d S )
Nr.   r   rÞ   r)   rß   r�   z
%s curvetozunknown figure operator: rÅ   )	r   rx   Z
figureLiner   Z	figureArcrÑ   ZfigureCurveÚ	TypeErrorrÆ   )rH   ZpartListr¸   Z
figureCoderÊ   ÚfirstÚpartr–   r�   rR   rS   rˆ   r‰   Z
startAnglerØ   r#   r#   r$   Ú
drawFigureó  s4    

zPSCanvas.drawFigurec                 C   sÖ   | j o|}| jo|}|s |s |rÒ| j |¡ |r„|d u r>| j}|sF|rP|  d¡ |  | j ¡ |  |tkrldnd¡ |sz|r„|  d¡ |rº|r–|  d¡ |  | j¡ |  d¡ |rº|  d¡ |rÒ|  d¡ |  d¡ d S )Nrk   rÐ   r”   rn   r•   ÚcliprÁ   )r9   r8   r5   ÚextendrG   r6   r   r   )rH   r5   rí   r”   r•   ÚfillModer#   r#   r$   rÆ     s&    



zPSCanvas._fillAndStrokec                 C   s   |   dt||ƒ ¡ d S )Nz%s translaterã   rä   r#   r#   r$   Ú	translate,  s    zPSCanvas.translatec                 C   s   |   dt||ƒ ¡ d S )Nz%s scalerã   rä   r#   r#   r$   Úscale/  s    zPSCanvas.scalec              
   C   s    |   dt||||||ƒ ¡ d S )Nz[%s] concatrã   )rH   rÊ   Úbr"   Údr¡   rh   r#   r#   r$   Ú	transform2  s    zPSCanvas.transformc                 C   s   || | _ | _dS )z1if this is used we're probably in the wrong worldN)r/   r0   )rH   ÚwÚhr#   r#   r$   Ú_drawTimeResize5  s    zPSCanvas._drawTimeResizec              
   C   sê   d}|  d¡}|j\}}	|s |}|s(|	}| j dd||f d||f d| g¡ | j d||	|f d|d	d	|	 d	|	f d
dg¡ t|dƒr�|jn|jƒ }
|  |
¡}t|ƒ}| 	d¡}|dkrÒ|  
|¡ | 	d¡}q´|  
d¡ |  
d¡ d S )NrÀ   ÚRGBrk   ú%s %s translateú%s %s scalez/scanline %d 3 mul string defz%s %s %sz[%s %s %s %s %s %s]r   z2{ currentfile scanline readhexstring pop } false 3zcolorimage ÚtobyteséN   r   z% end of image datarn   )ÚconvertrI   r5   rî   rd   rû   ÚtostringÚ_AsciiHexEncoder   Úreadr6   )rH   rQ   rR   rS   r/   r0   Zcomponent_depthÚmyimageZimgwidthZ	imgheightÚrawimageÚhex_encodedÚ	outstreamÚdataliner#   r#   r$   rN   9  s8    



ü
ü




zPSCanvas._drawImageLevel1c                 C   s.   t ƒ }t|ƒD ]}| dt|ƒ ¡ q| ¡ S )zHelper function used by imagesz%02x)r   r   r`   r   Úgetvalue)rH   ÚinputÚoutputÚcharr#   r#   r$   rÿ   w  s    zPSCanvas._AsciiHexEncodec                 C   sr  |j dkrd}d}|}n0|j dkr6| d¡}d}|}n| d¡}d}d}|j\}	}
|sZ|	}|sb|
}| j dd||f d	||f g¡ |dkr˜|  d
¡ n|dkrª|  d¡ |  d|	|
|f ¡ |dkrÐ|  d¡ |dkrâ|  d¡ | j d|	|
 |
f dddg¡ t|dƒ�r|jn|jƒ }|  	|¡}t
|ƒ}| d¡}|dk�rZ|  |¡ | d¡}�q8|  d¡ |  d¡ dS )z"At present we're handling only PILÚLrÀ   r.   Ú1rø   r�   rk   rù   rú   z/DeviceRGB setcolorspacez/DeviceGray setcolorspacezY
<<
/ImageType 1
/Width %d /Height %d  %% dimensions of source image
/BitsPerComponent %dz/Decode [0 1]z6/Decode [0 1 0 1 0 1]  %% decode color values normallyz/ImageMatrix [%s 0 0 %s 0 %s]z./DataSource currentfile /ASCIIHexDecode filterz>> % End image dictionaryrQ   rû   rü   r   z> % end of image datarn   N)Úmoderý   rI   r5   rî   r6   rd   rû   rþ   rÿ   r   r   )rH   rQ   rR   rS   r/   r0   ZimBitsPerComponentZimNumComponentsr  ZimwidthZimheightr  r  r  r  r#   r#   r$   rO   ~  s\    






ý
ü

ý




zPSCanvas._drawImageLevel2)r'   r)   )NN)N)NN)N)r   )r   )r   r§   r   )r©   r   )r¨   r   )r   )r.   r.   )rÀ   rÀ   )r   rÄ   r   )r   r.   r.   )NN)r   )r   r.   r.   N)NN)NN)3Ú__name__Ú
__module__Ú__qualname__rJ   rM   rT   rX   r_   rj   rm   ro   r   rC   rD   r}   rB   r   rƒ   r„   rE   rA   rŠ   rŒ   r—   r¦   r°   r´   rµ   r»   r¿   rË   rÍ   rÏ   rÌ   rÑ   r¾   râ   rå   rÔ   ræ   rç   rè   rì   rÆ   rð   rñ   rô   r÷   rN   rÿ   rO   r#   r#   r#   r$   r&   Z   s`   

	

	










+

	
$

>r&   )Ú*c                 C   s"   t ƒ }|jt| ƒ||||d� dS )z
As it says©ÚshowBoundaryN)Ú_PSRendererÚdrawr   )ÚdrawingZcanvasr‘   r’   r  r    r#   r#   r$   r  Å  s    r  c                 C   s<   g }|j }tdt| ƒdƒD ]}|| | | |d  fƒ q|S )zo
    given a list of coordinates [x0, y0, x1, y1....]
    produce a list of points [(x0,y0), (y1,y0),....]
    r   r)   r.   )r   Úranger   )r
  ÚPrÊ   r¢   r#   r#   r$   Ú_pointsFromListÊ  s
    r  c                   @   s†   e Zd ZdZdd„ Zdddddd	d
dœZdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd#dd„Zdd „ Zd!d"„ ZdS )$r  z±This draws onto a EPS document.  It needs to be a class
    rather than a function, as some EPS-specific state tracking is
    needed outside of the state info in the SVG model.c                 C   sÌ   | j  d| ¡ | j j}t|tƒr(|js2| j  ¡  t|ƒ}| j 	|¡ |  
|i ¡ |  |¡ | j ¡ }t|tƒrv|js€| j  ¡  | j  d| ¡ || j _| ¡ D ]&\}}|| jv r t| j | j| |ƒ q dS )zEThis is the recursive method called for each node
        in the treezbegin node %rzend node %rN)Ú_canvasrM   r?   rt   ÚPathÚ
isClipPathrm   r   Ú_trackerÚpushÚapplyStateChangesZdrawNodeDispatcherr2   ro   ÚitemsÚ	_restoresÚsetattr)rH   Únoder�   ZdeltasZrDeltasÚkrr   r#   r#   r$   ÚdrawNodeÚ  s     




z_PSRenderer.drawNoder8   r:   r=   r>   r9   r;   r<   )r-   ÚstrokeWidthÚstrokeLineCapÚstrokeLineJoinÚ	fillColorr+   r,   c                 C   sv   |j |j  krdkrDn n(| j |j|j|j|j |j|j ¡ n.| j |j|j|j|j |j|j |j |j¡ d S )Nr   )	rÇ   rÈ   r  r¿   r‘   r’   r/   r0   rË   )rH   r¿   r#   r#   r$   ÚdrawRectü  s    þþz_PSRenderer.drawRectc                 C   s&   | j jr"| j  |j|j|j|j¡ d S r~   )r  r8   rŠ   rR   rS   rˆ   r‰   )rH   rŠ   r#   r#   r$   ÚdrawLine
  s    z_PSRenderer.drawLinec                 C   s   | j  |j|j|j¡ d S r~   )r  rÏ   rÚ   rÛ   rÎ   )rH   rÏ   r#   r#   r$   Ú
drawCircle  s    z_PSRenderer.drawCirclec              	   C   s²   |  ¡ \}}}|dks|d u r†|dks.|d u r†|js†|j}|j}|j}|j}|j}	|| }
| jj||	 || ||	 || ||
dd� n(| 	¡ }t
|tƒr¤|  |¡ n
|  |¡ d S )Nr   r.   )rÙ   )Z
_xtraRadiiZannularÚstartangledegreesÚendangledegreesÚcenterxÚcenteryÚradiusr  rÌ   Z	asPolygonrt   r  ÚdrawPathÚdrawPolygon)rH   ZwedgeZyradiusZradius1Zyradius1r,  r-  r.  r/  r0  rØ   r  r#   r#   r$   Ú	drawWedge  s    &ÿ
z_PSRenderer.drawWedgec                 C   s   | j jr| j  t|jƒ¡ d S r~   )r  r8   rè   r  Úpoints©rH   rà   r#   r#   r$   ÚdrawPolyLine#  s    z_PSRenderer.drawPolyLinec                 C   sF   |j |j }|j |j }|j|j }|j|j }| j ||||¡ d S r~   )rÚ   rÇ   rÛ   rÈ   r  rÍ   )rH   rÍ   rR   rˆ   rS   r‰   r#   r#   r$   ÚdrawEllipse'  s
    z_PSRenderer.drawEllipsec                 C   s   | j jt|jƒdd� d S )Nr.   )r¸   )r  r¾   r  r4  r5  r#   r#   r$   r2  /  s    z_PSRenderer.drawPolygonc              	   C   sØ   t |ddƒ}| jjs|rÔ| j ¡ }|d |j|j|jf\}}}}|dvrÀ|d |d  }}	t|||	ƒ}
|dkrx||
8 }nH|dkrŽ||
d	 8 }n2|d
kr°|t	|||
||	dd�8 }nt
dt|ƒ ƒ‚| jj||||d� d S )Nr“   r   Z
textAnchor)rá   Z	inheritedr+   r,   r¨   r©   r)   r«   Zwinansi)Úencodingzbad value for text_anchor r¬   )Úgetattrr  r9   r  ZgetStater‘   r’   r³   r   r­   rP   rz   r°   )rH   Z	stringObjr“   ÚSr®   r‘   r’   r³   rp   r,   r¯   r#   r#   r$   r°   2  s    

z_PSRenderer.drawStringNc                    s:  ddl m‰  | j‰ˆjˆjˆjˆjf‰tˆddƒ}‡ ‡‡fdd„}ˆd u rXtˆdˆjƒ‰ˆj	d u}ˆj
d u}ˆj}‡‡fdd	„}‡‡fd
d	„}	‡fdd	„}
|dkr¸|ƒ  ||||d� n~|dkrü|rÞ|dd� ||||d� n|sæ|rú|ƒ  ||d|d� n:|�r|dd��r|ƒ  n |�s"|�r6|ƒ  ||d|d� d S )Nr   )Ú_renderPathÚ	autocloser   c                     s   ˆ ˆˆfi | ¤ŽS r~   r#   ©Úkwds)r;  Ú	drawFuncsÚpathr#   r$   ÚrPI  s    z _PSRenderer.drawPath.<locals>.rPrï   c                     s   ˆ j g fdˆi| ¤ŽS )Nrï   ©rÆ   r=  ©r"   rï   r#   r$   Ú<lambda>P  ó    z&_PSRenderer.drawPath.<locals>.<lambda>c                      s   ˆ j g dˆd�S )Nr   )r•   rï   rB  r#   rC  r#   r$   rD  Q  rE  c                      s   ˆ j g dd�S )Nr   )r”   rB  r#   )r"   r#   r$   rD  R  rE  Úsvg)r•   r”   rí   ZpdfT)Z
forceClose)Z	countOnly)Úreportlab.graphics.shapesr;  r  rå   rÔ   ræ   rç   r9  rG   r9   r8   r  )rH   r@  rï   r<  rA  r”   r•   rí   ZfasZpathFillZ
pathStroker#   )r;  r"   r?  rï   r@  r$   r1  D  s8    


z_PSRenderer.drawPathc              
   C   sd  |  ¡ D �]T\}}|dkrJ| j |d |d |d |d |d |d ¡ q|dkr`| j |¡ q|d	krv| j |¡ q|d
krŒ| j |¡ q|dkr¢| j |¡ q|dk�r|�rt|tt	fƒrðt
|ƒdkrðt|d t	tfƒrð|d }|d }nd}| j ||¡ n
| j ¡  q|dk�r(| j |¡ q|dv r| d| jj¡}| d| jj¡}| j ||¡ qdS )z\This takes a set of states, and outputs the operators
        needed to set those propertiesrô   r   r.   r)   r�   rŽ   r�   r-   r%  r&  r'  ZstrokeDashArrayr(  )r,   r+   r+   r,   N)r  r  rô   rB   rE   rC   rD   rt   rx   rw   r   r}   rƒ   Úgetr;   r<   rA   )rH   ÚdeltaZnewStateÚkeyÚvaluer|   ZfontnameZfontsizer#   r#   r$   r  d  s6    ÿ
,

z_PSRenderer.applyStateChangesc                 C   s8   ddl m} ||jƒ}| j |j|j|j|j|j	¡ d S )Nr   )ÚImageReader)
rg   rL  r@  r  rT   Z_imager‘   r’   r/   r0   )rH   rQ   rL  Zimr#   r#   r$   rT   “  s    
z_PSRenderer.drawImage)N)r  r  r  Ú__doc__r$  r   r)  r*  r+  r3  r6  r7  r2  r°   r1  r  rT   r#   r#   r#   r$   r  Õ  s"   þ
 /r  c                 K   s8   t | ƒ} t| j| jfƒ}t| |dd|d� | |¡ d S )Nr   r  )r   r&   r/   r0   r  rj   )ró   Úfnr  Zkwdr"   r#   r#   r$   Ú
drawToFile˜  s    rO  c                 C   s   t ƒ }t| ||d� | ¡ S )z=Returns a PS as a string in memory, without touching the diskr  )r   rO  r  )ró   r  r   r#   r#   r$   ÚdrawToStringž  s    rP  ÚepsoutFc              
   C   s  ddl m} ddlm} |jd d … }g d¢|jd d …< zÎdd l}|j | ¡sX| | ¡ g }t	|ƒD ]>}|dd… dkrdt
||ƒ}|ƒ }	t
|ddƒ}
| |	|
f¡ qdd}|D ]H\}}
| |j d	|  }t||ƒ |sÜ|d
krìtdt|ƒ ƒ |d7 }q¬W ||jd d …< n||jd d …< 0 d S )Nr   )Ú
testshapes)Úverbose)zTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicZCourierr™   Z
getDrawingrM  r   zrenderPS_%d.epsr)   zrenderPS test saved %sr.   )Zreportlab.graphicsrR  Zreportlab.rl_configrS  Z_FONTSÚosr@  ÚisdirÚmkdirÚdirr9  r   ÚseprO  Úprintr‹   )ZoutDirÚshoutrR  rS  ZOLDFONTSrT  ZdrawingsÚfuncnameÚfuncr  Ú	docstringr¢   ró   Úfilenamer#   r#   r$   Útestª  s,    


r_  Ú__main__r.   T)rZ  )rQ  F)0Ú__version__rM  rÒ   Úior   r   Zreportlab.pdfbase.pdfmetricsr   r   r   rg   r   r   r	   r
   r   Zreportlab.lib.rl_accelr   Zreportlab.graphics.renderbaser   r   r   rG  r   Z	reportlabr   Zreportlab.pdfgen.canvasr   r   r  r"   ÚordÚchrr%   r\   r&   r  r  r  r  rO  rP  r_  r  Úsysr   ÚargvZoutdirr#   r#   r#   r$   Ú<module>   sN   /    i D

