o
    ´mX[xŽ  ã                   @   sÔ  d Z dZddlmZmZmZ ddlmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZmZmZmZ ddlmZ dd	lZdd
lmZ ddlmZmZmZ ddl m!Z!m"Z" i Z#edƒD ]-Z$e$dk sje$dkrqd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'„Z0e1d(krèdd	l2Z2e3e2j4ƒd)krÞe2j4d) Z5nd$Z5e0e5d*d+� d	S d	S )-z3.3.0z$Render drawing objects in Postscripté    )ÚgetFontÚstringWidthÚ
unicode2T1)Ú
getBytesIOÚgetStringIOÚasBytesÚchar2intÚrawBytesÚasNativeÚ	isUnicode)Úfp_str)Úblack)ÚRendererÚStateTrackerÚgetStateDeltaÚrenderScaledDrawing)ÚSTATE_DEFAULTSN)Úgetitem)Ú	rl_configÚxrangeÚascii)ÚFILL_EVEN_ODDÚFILL_NON_ZEROé   é    é   z\%03oú\ú(ú)c                 C   s^   t | ƒ} g }|j}d}| D ]}tt|ƒ }||ƒ |t|ƒ7 }|dkr)d}|dƒ qd |¡S )Nr   éÈ   z\
Ú )r   ÚappendÚ_ESCAPEDICTr   ÚlenÚjoin)ÚsÚRÚaRÚnÚc© r*   úM/var/www/html/env/lib/python3.10/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dgdd„Zdd„ Zdhdd	„Zd
d„ Zdd„ Zdidd„Zdd„ Z	dd„ Z
dhd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did'd(„Zd)d*„ Zd+d,„ Zd-d.„ Zdjd/d0„Zdkd2d3„Zd4d5„ Zdjd6d7„Zdld9d:„Zdmd<d=„Zd>d?„ Zd@dA„ ZdndCdD„Z dEdF„ Z!dodGdH„Z"dhdIdJ„Z#dKdL„ Z$dMdN„ Z%dOdP„ Z&dQdR„ Z'dSdT„ Z(djdUdV„Z)dpdWdX„Z*dYdZ„ Z+d[d\„ Z,d]d^„ Z-d_d`„ Z.dhdadb„Z/dcdd„ Z0dhdedf„Z1dS )qÚ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ÚstrokeColorr0   é   )Ú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ÚsizerM   Ú	xtraStater*   r*   r+   Ú__init__[   s2   
þÿÿÿ



zPSCanvas.__init__c                 C   s   | j r|  d| ¡ d S d S )Nú%)r;   r=   )rO   Úmsgr*   r*   r+   Úcommentq   s   zPSCanvas.commentNc                 C   sN   | j dkr|  |||||¡ d S | j dkr |  |||||¡ d S td| j  ƒ‚)Nr5   r0   zUnsupported Postscript Level %s)rM   Ú_drawImageLevel1Ú_drawImageLevel2Ú
ValueError)rO   ÚimageÚx1Úy1r6   r7   r*   r*   r+   Ú	drawImaget   s
   

zPSCanvas.drawImagec                 C   ó   |   d¡ d S )NÚshowpage©r=   ©rO   r*   r*   r+   Úclear}   ó   zPSCanvas.clearc                 C   sr   | j sd S g }| j D ]}t|ƒ}|js!|jdkr!| d||f ¡ q
|r7| dt¡ | j d| j 	|¡¡ d S d S )NÚWinAnsiEncodingzWinAnsiEncoding /%s /%s REr   r5   )
rG   r   Ú_dynamicFontÚencNamer!   ÚinsertÚPS_WinAnsiEncodingr<   r>   r$   )rO   ÚCr2   ÚfontObjr*   r*   r+   Ú_t1_re_encode€   s   

€þzPSCanvas._t1_re_encodec                 C   sœ   t |dƒst|dƒ}n|}| jd dkr|  ¡  | j dd| j| jf ¡ |  ¡  | t	| j
 | j¡ƒ¡ ||urL| ¡  ddlm} ||dd	d
� d S d S )NÚwriteÚwbéÿÿÿÿr^   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
)ÚmarkfilenameÚXPR3ÚEPSF)ÚcreatorcodeÚfiletype)ÚhasattrÚopenr<   ra   rf   r6   r7   rj   rk   r	   r>   r$   ÚcloseÚreportlab.lib.utilsrn   )rO   ÚfÚ_frn   r*   r*   r+   ÚsaveŒ   s   


ù	ýzPSCanvas.savec                 C   s   |   | jf¡ |  d¡ d S )NÚgsave)r8   Ú_fontCodeLocr=   r`   r*   r*   r+   Ú	saveState¢   s   zPSCanvas.saveStatec                 C   s   |   d¡ |  ¡ \| _d S )NÚgrestore)r=   r:   r{   r`   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).)rB   rC   r   )rO   r%   Úfontr3   r*   r*   r+   r   ª   s   

zPSCanvas.stringWidthc                 C   ó&   | j |kr|| _ |  d| ¡ d S d S )Nz%d setlinecap)rD   r=   ©rO   Úvr*   r*   r+   rJ   ±   ó   
þzPSCanvas.setLineCapc                 C   r€   )Nz%d setlinejoin)rE   r=   r�   r*   r*   r+   rK   ¶   rƒ   zPSCanvas.setLineJoinr   c                 C   st   d}t |ttfƒr|  d|||f ¡ dS t |ttfƒr8|dks$J dƒ‚d tt|ƒ¡}|  d|||f ¡ dS dS )z7Two notations.  pass two numbers, or an array and phaseÚsetdashz[%s %s] 0 %sr   zphase is a length in user spaceú z
[%s] %s %sN)	Ú
isinstanceÚfloatÚintr=   ÚtupleÚlistr$   ÚmapÚstr)rO   ÚarrayÚphaseÚpsoperationÚ	textarrayr*   r*   r+   ÚsetDash»   s   ýzPSCanvas.setDashc                 C   ó   || _ |  |¡ d S ©N)r?   ÚsetColor©rO   Úcolorr*   r*   r+   rI   Æ   ó   zPSCanvas.setStrokeColorc                 C   sj   | j |kr1|| _ |r3t|dƒr!|  dt|j|j|j|jƒ ¡ d S |  dt|j|j	|j
ƒ ¡ d S d S d S )NÚcyanz%s setcmykcolorz%s setrgbcolor)rF   rs   r=   r   r˜   ÚmagentaÚyellowr   ÚredÚgreenÚbluer•   r*   r*   r+   r”   Ê   s   

$ úzPSCanvas.setColorc                 C   r’   r“   )r@   r”   r•   r*   r*   r+   ÚsetFillColorÓ   r—   zPSCanvas.setFillColorc                 C   s
   || _ d S r“   )rN   r�   r*   r*   r+   ÚsetFillMode×   s   
zPSCanvas.setFillModec                 C   s&   || j kr|| _ |  d| ¡ d S d S )Nz%s setlinewidth)rA   r=   )rO   r6   r*   r*   r+   rL   Ú   rƒ   zPSCanvas.setLineWidthc                 C   s>   | j |ks
| j|krt| jƒ| _|| _ || _|  d¡ d S d S )Nr    )rB   rC   r#   r<   r{   r=   )rO   r   r3   Úleadingr*   r*   r+   rH   ß   s   üzPSCanvas.setFontc                 C   s<   | j d kr|  | j ¡ |  dt||ƒt||ƒf ¡ d S d S )Nú%s m %s l stroke)r?   r”   r=   r   ©rO   rZ   r[   Úx2Úy2r*   r*   r+   Úlineæ   s   
"þzPSCanvas.linec                 C   s"   zt |ƒW S    tdt|ƒ ƒ‚)z{
        return a copy of string s with special characters in postscript strings
        escaped with backslashes.
        zcannot escape %s)r,   rX   r   )rO   r%   r*   r*   r+   Ú_escapeë   s   
zPSCanvas._escapec                 C   sZ  |}| j }| j}| j}| j}	t|ƒsTz| d¡}W n: tyS }
 z.|
jdd… \}}t|
jd d… d|
jd ||d |… |||… |||d … f f Ž ‚d }
~
ww t||g|j	 ƒD ]<\}}||kr€t
|jjƒ}|d|t|ƒf ƒ ||vr~| |¡ |}|dt||ƒ|	|ƒf ƒ || | |j¡|¡7 }q]||kr«d | _|  |jj|¡ d S d S )NÚutf8r0   é   z%s
%s-->%s<--%sé
   ú"(%s) findfont %s scalefont setfontú%s m (%s) show )r=   rC   rG   r¦   r   ÚdecodeÚUnicodeDecodeErrorÚargsr   ÚsubstitutionFontsr
   ÚfaceÚnamer   r!   r   re   rB   rH   )rO   ri   ÚxÚyr%   Úfcr=   r3   Ú	fontsUsedÚescapeÚeÚiÚjrw   ÚtÚpsNamer*   r*   r+   Ú_issueT1Stringõ   s4   J€þ
þzPSCanvas._issueT1Stringc                 C   sì   | j d krrt| jƒ}| j| j s.t|jjƒ}d|t| j	ƒf | j| j< || j
vr.| j
 |¡ |  | j ¡ |dkrJ|  dt||ƒt|ƒf ¡ d }}|jr_|  |¡}|  dt||ƒ|f ¡ n|  ||||¡ |dkrt|  d¡ d S d S d S )Nrª   r   zgsave %s translate %s rotater«   r}   )r@   r   rB   r<   r{   r
   r°   r±   r   rC   rG   r!   r”   r=   rd   r¦   r¼   )rO   r²   r³   r%   Úangleri   r»   r*   r*   r+   Ú
drawString  s&   



ïzPSCanvas.drawStringÚmiddlec                 C   sx   | j d ur:t|| j| jƒ}|dkr||8 }n|dkr!||d 8 }n|dkr1|t|||| j| jƒ8 }|  |||¡ d S d S )NÚendr¿   ç       @Únumeric)r@   r   rB   rC   ÚnumericXShiftr¾   )rO   r²   r³   ÚtextÚtext_anchorÚtextLenr*   r*   r+   ÚdrawCentredString#  s   

øzPSCanvas.drawCentredStringc                 C   s   | j |||dd� d S )NrÀ   )rÅ   )rÇ   )rO   rÄ   r²   r³   r*   r*   r+   ÚdrawRightString.  s   zPSCanvas.drawRightStringc
                 C   s„   d}
t ||ƒt ||||||ƒf}| jd kr$|  | j¡ |  |
| d ¡ | jd kr@|  | j¡ |  |
| |	r8dp9d d ¡ d S d S )Nz%s m %s curvetoz eofillz
 closepathr    z stroke)r   r@   r”   r=   r?   )rO   rZ   r[   r£   r¤   Úx3Úy3Úx4Úy4ÚclosedÚcodelineÚdatar*   r*   r+   Ú	drawCurve1  s   



ÿ
þþzPSCanvas.drawCurver5   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,y2r5   )rÍ   ÚstrokeÚfillN)ÚminÚmaxÚpolygon)rO   rZ   r[   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)
rO   rZ   r[   r£   r¤   ÚrxÚryÚellipsePathÚrrÚar*   r*   r+   Ú	roundRectG  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+   Úellipsec  s   zPSCanvas.ellipsec                 C   s$   |   || || || || ¡ d S r“   )rå   )rO   ÚxcÚycÚrr*   r*   r+   Úcirclei  s   $zPSCanvas.circlerÛ   c                 C   sT  || d || d }}	|| d || d }
}|   ||||||¡}tj| d }tj| d }|| }d}| jdkri|  | j¡ |  |¡ d}| jdkrT|  d¡ |  ||	¡ |  d¡ | jdkri|  d¡ | jdkr¨|  | j¡ ||
t |¡  |	|t 	|¡  }}|sŽ|  |¡ |r¡|  ||	¡ |  ||¡ |  d	¡ |  d
¡ dS 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   Nr5   rz   Úeofillr}   rÜ   rÑ   )
Ú_genArcCodeÚmathÚpir@   r”   r=   r?   ÚlineToÚcosÚsin)rO   rZ   r[   r£   r¤   ÚstartAngÚextentÚ
fromcenterÚcxÚcyrÞ   rß   rÎ   ÚstartAngleRadiansÚextentRadiansÚendAngleRadiansÚcodelineAppendedÚstartxÚstartyr*   r*   r+   rä   l  s4   



&

õzPSCanvas.drawArcc                 C   sn   t || d ƒ}t || d ƒ}|| d || d }	}
d}|dkr&d}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   ÚarcÚarcn)Úabs)rO   rZ   r[   r£   r¤   rñ   rò   ÚxScaleÚ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|ƒ ƒ q#|r4|dƒ | j|||d� d S )	Nr0   z"Polygon must have 2 or more pointsr   r5   ú%s mú%s lrÜ   )rÑ   rÒ   )r#   r!   r   rÝ   )	rO   ÚprÍ   rÑ   rÒ   ÚstartÚpolyrâ   Úpointr*   r*   r+   rÕ   ©  s   zPSCanvas.polygonc                 C   sN   | j d kr#|  | j ¡ d}|D ]}|  |t|d ƒt|d ƒf ¡ qd S d S )Nr¡   r   r5   )r?   Ú	_setColorr=   r   )rO   ÚlineListr–   r6   rÎ   r¥   r*   r*   r+   Úlines¹  s   
$üzPSCanvas.linesc                 C   ó   |   dt||ƒ ¡ d S )Nr  ©r=   r   ©rO   r²   r³   r*   r*   r+   ÚmoveToÀ  ó   zPSCanvas.moveToc                 C   r
  )Nr  r  r  r*   r*   r+   rî   Ã  r  zPSCanvas.lineToc              
   C   ó    |   dt||||||ƒ ¡ d S )Nz%s cr  )rO   rZ   r[   r£   r¤   rÉ   rÊ   r*   r*   r+   ÚcurveToÆ  ó    zPSCanvas.curveToc                 C   r]   )NrÜ   r_   r`   r*   r*   r+   Ú	closePathÉ  rb   zPSCanvas.closePathc                 C   s~   t |ƒdks
J dƒ‚| jd kr=|  | j¡ |  |d d |d d ¡ |dd … D ]}|  |d |d ¡ q)|  d¡ d S d S )Nr5   z#Polyline must have 1 or more pointsr   rÑ   )r#   r?   r”   r  rî   r=   )rO   r  rº   r*   r*   r+   ÚpolyLineÌ  s   
ûzPSCanvas.polyLinec              
   C   sJ  g }|j }d}|D ]Ž}|d }t|dd … ƒ}|tkrE|r,d}|dt|d d… ƒ ƒ n|dt|d d… ƒ ƒ |dt|dd … ƒ ƒ q	|tkrdd}|d d… \}	}
}}}}||  |	|
||||¡ƒ q	|tkr’|ryd}|dt|d d… ƒ ƒ n|dt|d d… ƒ ƒ |dt|dd … ƒ ƒ q	td| ƒ‚|rž|d	ƒ |  |¡ d S )
Nr5   r   r  r0   r  é   z
%s curvetozunknown figure operator: rÜ   )	r!   rŠ   Ú
figureLiner   Ú	figureArcrë   ÚfigureCurveÚ	TypeErrorrÝ   )rO   ÚpartListrÍ   Ú
figureCoderâ   ÚfirstÚpartÚopr®   rZ   r[   r£   r¤   Ú
startAnglerò   r*   r*   r+   Ú
drawFigureÕ  s4   zPSCanvas.drawFigurec                 C   sÞ   | j o|}| jo	|}|s|s|rk| j |¡ |rB|d u r| j}|s#|r(|  d¡ |  | j ¡ |  |tkr6dnd¡ |s=|rB|  d¡ |r]|rK|  d¡ |  | j¡ |  d¡ |r]|  d¡ |rm|  d¡ |  d¡ d S d S d S )Nrz   rê   rÒ   r}   rÑ   ÚcliprØ   )r@   r?   r<   ÚextendrN   r=   r”   r   )rO   r<   r   rÒ   rÑ   ÚfillModer*   r*   r+   rÝ   ù  s*   



ðzPSCanvas._fillAndStrokec                 C   r
  )Nz%s translater  r  r*   r*   r+   Ú	translate  r  zPSCanvas.translatec                 C   r
  )Nz%s scaler  r  r*   r*   r+   Úscale  r  zPSCanvas.scalec              
   C   r  )Nz[%s] concatr  )rO   râ   Úbr)   Údr·   rw   r*   r*   r+   Ú	transform  r  zPSCanvas.transformc                 C   s   ||| _ | _dS )z1if this is used we're probably in the wrong worldN)r6   r7   )rO   ÚwÚhr*   r*   r+   Ú_drawTimeResize  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ƒrH|jn|jƒ }
|  |
¡}t|ƒ}| 	d¡}|dkrl|  
|¡ | 	d¡}|dks^|  
d¡ |  
d¡ d S )Nr×   ÚRGBrz   ú%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 datar}   )ÚconvertrP   r<   r!  rs   r.  ÚtostringÚ_AsciiHexEncoder   Úreadr=   )rO   rY   rZ   r[   r6   r7   Úcomponent_depthÚmyimageÚimgwidthÚ	imgheightÚrawimageÚhex_encodedÚ	outstreamÚdataliner*   r*   r+   rV     s:   



ü
ü




þ
zPSCanvas._drawImageLevel1c                 C   s.   t ƒ }t|ƒD ]}| dt|ƒ ¡ q| ¡ S )zHelper function used by imagesz%02x)r   r   rk   r   Úgetvalue)rO   ÚinputÚoutputÚcharr*   r*   r+   r2  Y  s   zPSCanvas._AsciiHexEncodec                 C   sr  |j dkrd}d}|}n|j dkr| d¡}d}|}n	| d¡}d}d}|j\}	}
|s-|	}|s1|
}| j dd||f d	||f g¡ |dkrL|  d
¡ n	|dkrU|  d¡ |  d|	|
|f ¡ |dkrh|  d¡ |dkrq|  d¡ | j d|	|
 |
f dddg¡ t|dƒr‰|jn|jƒ }|  	|¡}t
|ƒ}| d¡}|dkr­|  |¡ | d¡}|dksŸ|  d¡ |  d¡ dS )z"At present we're handling only PILÚLr×   r5   Ú1r+  é   rz   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 dictionaryrY   r.  r/  r    z> % end of image datar}   N)Úmoder0  rP   r<   r!  r=   rs   r.  r1  r2  r   r3  )rO   rY   rZ   r[   r6   r7   ÚimBitsPerComponentÚimNumComponentsr5  ÚimwidthÚimheightr8  r9  r:  r;  r*   r*   r+   rW   `  s^   






ý
ü

ý



þ
zPSCanvas._drawImageLevel2)r.   r0   )NNr“   )r   )r¿   )r5   r5   )r×   r×   )r   rÛ   r   )r   r5   r5   )r   r5   r5   N)2Ú__name__Ú
__module__Ú__qualname__rR   rU   r\   ra   rj   ry   r|   r~   r   rJ   rK   r‘   rI   r”   rž   rŸ   rL   rH   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*  rV   r2  rW   r*   r*   r*   r+   r-   Z   s`    

	

	







+


	
$
>r-   )Ú*c                 C   s"   t ƒ }|jt| ƒ||||d� dS )z
As it says©ÚshowBoundaryN)Ú_PSRendererÚdrawr   )ÚdrawingÚcanvasr²   r³   rM  r&   r*   r*   r+   rO  §  s   rO  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   r0   r5   )r!   Úranger#   )r@  ÚPrâ   r¸   r*   r*   r+   Ú_pointsFromList¬  s
   rT  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 )$rN  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s| j  ¡  t|ƒ}| j 	|¡ |  
|i ¡ |  |¡ | j ¡ }t|tƒr;|js@| j  ¡  | j  d| ¡ || j _| ¡ D ]\}}|| jv rct| j | j| |ƒ qPdS )zEThis is the recursive method called for each node
        in the treezbegin node %rzend node %rN)Ú_canvasrU   rF   r†   ÚPathÚ
isClipPathr|   r   Ú_trackerÚpushÚapplyStateChangesÚdrawNodeDispatcherr9   r~   ÚitemsÚ	_restoresÚsetattr)rO   Únoder–   ÚdeltasÚrDeltasÚkr‚   r*   r*   r+   ÚdrawNode¼  s$   




€þz_PSRenderer.drawNoder?   rA   rD   rE   r@   rB   rC   )r4   ÚstrokeWidthÚstrokeLineCapÚstrokeLineJoinÚ	fillColorr2   r3   c                 C   sx   |j |j  krdkr#n n| j |j|j|j|j |j|j ¡ d S | j |j|j|j|j |j|j |j |j¡ d S )Nr   )	rÞ   rß   rU  rÖ   r²   r³   r6   r7   rã   )rO   rÖ   r*   r*   r+   ÚdrawRectÞ  s   þþz_PSRenderer.drawRectc                 C   s*   | j jr| j  |j|j|j|j¡ d S d S r“   )rU  r?   r¥   rZ   r[   r£   r¤   )rO   r¥   r*   r*   r+   ÚdrawLineì  s   ÿz_PSRenderer.drawLinec                 C   s   | j  |j|j|j¡ d S r“   )rU  ré   rô   rõ   rè   )rO   ré   r*   r*   r+   Ú
drawCircleð  ó   z_PSRenderer.drawCirclec              	   C   s¶   |  ¡ \}}}|dks|d u rD|dks|d u rD|jsD|j}|j}|j}|j}|j}	|| }
| jj||	 || ||	 || ||
dd� d S | 	¡ }t
|tƒrT|  |¡ d S |  |¡ d S )Nr   r5   )ró   )Ú
_xtraRadiiÚannularÚstartangledegreesÚendangledegreesÚcenterxÚcenteryÚradiusrU  rä   Ú	asPolygonr†   rV  ÚdrawPathÚdrawPolygon)rO   ÚwedgeÚyradiusÚradius1Úyradius1rn  ro  rp  rq  rr  rò   rS  r*   r*   r+   Ú	drawWedgeó  s   &
ÿ
z_PSRenderer.drawWedgec                 C   s"   | j jr| j  t|jƒ¡ d S d S r“   )rU  r?   r  rT  Úpoints©rO   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ß   rU  rå   )rO   rå   rZ   r£   r[   r¤   r*   r*   r+   ÚdrawEllipse	  s
   z_PSRenderer.drawEllipsec                 C   s   | j jt|jƒdd� d S )Nr5   )rÍ   )rU  rÕ   rT  r{  r|  r*   r*   r+   ru    rk  z_PSRenderer.drawPolygonc           
   	   C   sÈ   | j jrb| j ¡ }|d |j|j|jf\}}}}|dvrX|d |d }}t|||ƒ}	|dkr4||	8 }n$|dkr?||	d 8 }n|dkrP|t|||	||d	d
�8 }nt	dt
|ƒ ƒ‚| j  |||¡ d S d S )NÚ
textAnchor)r  Ú	inheritedr2   r3   rÀ   r¿   r0   rÂ   Úwinansi)Úencodingzbad value for text_anchor )rU  r@   rX  ÚgetStater²   r³   rÄ   r   rÃ   rX   rŒ   r¾   )
rO   Ú	stringObjÚSrÅ   r²   r³   rÄ   r   r3   rÆ   r*   r*   r+   r¾     s   

òz_PSRenderer.drawStringNc                    s<  ddl m‰  | j‰ˆjˆjˆjˆjf‰tˆddƒ}‡ ‡‡fdd„}ˆd u r,tˆdˆjƒ‰ˆj	d u}ˆj
d u}ˆj}‡‡fdd	„}‡‡fd
d	„}	‡fdd	„}
|dkr]|ƒ  ||||d� d S |dkrƒ|rq|dd� ||||d� d S |su|r�|ƒ  ||d|d� d S d S |r�|dd�r�|ƒ  d S |s“|rœ||d|d� d S d S )Nr   )Ú_renderPathÚ	autocloser    c                     s   ˆ ˆˆfi | ¤ŽS r“   r*   ©Úkwds)r†  Ú	drawFuncsÚpathr*   r+   ÚrP*  s   z _PSRenderer.drawPath.<locals>.rPr"  c                     s   ˆ j g fdˆi| ¤ŽS )Nr"  ©rÝ   rˆ  ©r)   r"  r*   r+   Ú<lambda>1  s    z&_PSRenderer.drawPath.<locals>.<lambda>c                      s   ˆ j g dˆd�S )Nr   )rÑ   r"  r�  r*   rŽ  r*   r+   r�  2  s    c                      s   ˆ j g dd�S )Nr   )rÒ   r�  r*   )r)   r*   r+   r�  3  s    Úsvg)rÑ   rÒ   r   ÚpdfT)Ú
forceClose)Ú	countOnly)Úreportlab.graphics.shapesr†  rU  r  rî   r  r  ÚgetattrrN   r@   r?   rW  )rO   r‹  r"  r‡  rŒ  rÒ   rÑ   r   ÚfasÚpathFillÚ
pathStroker*   )r†  r)   rŠ  r"  r‹  r+   rt  %  s:   


þ
ÿz_PSRenderer.drawPathc              
   C   s\  |  ¡ D ]§\}}|dkr$| j |d |d |d |d |d |d ¡ q|dkr/| j |¡ q|d	kr:| j |¡ q|d
krE| j |¡ q|dkrP| j |¡ q|dkr…|rt|tt	fƒrut
|ƒdkrut|d t	tfƒru|d }|d }nd}| j ||¡ q| 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   r5   r0   rB  r¨   é   r4   rd  re  rf  ÚstrokeDashArrayrg  )r3   r2   r2   r3   N)r\  rU  r'  rI   rL   rJ   rK   r†   rŠ   r‰   r#   r‘   rž   ÚgetrB   rC   rH   )rO   ÚdeltaÚnewStateÚkeyÚvaluerŽ   ÚfontnameÚfontsizer*   r*   r+   rZ  D  s:   ÿ,
€Öz_PSRenderer.applyStateChangesc                 C   s8   ddl m} ||jƒ}| j |j|j|j|j|j	¡ d S )Nr   )ÚImageReader)
rv   r¢  r‹  rU  r\   Ú_imager²   r³   r6   r7   )rO   rY   r¢  Úimr*   r*   r+   r\   s  s   
"z_PSRenderer.drawImager“   )rH  rI  rJ  Ú__doc__rc  r]  rh  ri  rj  rz  r}  r~  ru  r¾   rt  rZ  r\   r*   r*   r*   r+   rN  ·  s$    þ
/rN  c                 K   s8   t | ƒ} t| j| jfƒ}t| |dd|d� | |¡ d S )Nr   rL  )r   r-   r6   r7   rO  ry   )r&  ÚfnrM  Úkwdr)   r*   r*   r+   Ú
drawToFilex  s   r¨  c                 C   s   t ƒ }t| ||d� | ¡ S )z=Returns a PS as a string in memory, without touching the diskrL  )r   r¨  r<  )r&  rM  r%   r*   r*   r+   ÚdrawToString~  s   r©  ÚepsoutFc              
   C   s  ddl m} ddlm} |jd d … }g d¢|jd d …< zjdd l}|j | ¡s,| | ¡ g }t	|ƒD ]!}|dd… dkrSt
d| d ƒ}t
d| d	 ƒ}	| ||	f¡ q2d}
|D ]$\}}	| |j d
|
  }t||ƒ |sp|dkrxtdt|ƒ ƒ |
d7 }
qXW ||jd d …< d S ||jd d …< w )Nr   )Ú
testshapes)Úverbose)zTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicÚCourierr©   Ú
getDrawingztestshapes.z()z.__doc__zrenderPS_%d.epsr0   zrenderPS test saved %sr5   )Úreportlab.graphicsr«  Úreportlab.rl_configr¬  Ú_FONTSÚosr‹  ÚisdirÚmkdirÚdirÚevalr!   Úsepr¨  Úprintr   )ÚoutDirÚshoutr«  r¬  ÚOLDFONTSr²  ÚdrawingsÚfuncnamerP  Ú	docstringr¸   r&  Úfilenamer*   r*   r+   ÚtestŠ  s.   
€

ü"rÀ  Ú__main__r5   T)rº  )rª  F)6Ú__version__r¥  Úreportlab.pdfbase.pdfmetricsr   r   r   rv   r   r   r   r   r	   r
   r   Úreportlab.lib.rl_accelr   Úreportlab.lib.colorsr   Úreportlab.graphics.renderbaser   r   r   r   r”  r   rì   Úoperatorr   Ú	reportlabr   r   r   Úreportlab.pdfgen.canvasr   r   r"   r)   ÚordÚchrr,   rg   r-   rM  rO  rT  rN  r¨  r©  rÀ  rH  Úsysr#   ÚargvÚoutdirr*   r*   r*   r+   Ú<module>   sV   $/    G B
ú