
    Q?h1                     |   S r SrSSKrSSKJrJr  SSKJrJrJ	r	  SSK
JrJrJrJrJr  SSKJr  SSKJrJrJr  SS	KJr  SS
KJr  SSKJr  0 r\" S5       HO  r\S:  d  \S:  a
  S\-  \\'   M  \\" S5      \" S5      \" S5      4;   a  S\ " \5      -   \\'   MD  \ " \5      \\'   MQ     CS r!Sr" " S S5      r# SSK7  SS\RH                  4S jr%S r& " S S\5      r'\RH                  4S jr(\RH                  4S jr)S$S jr*\+S :X  a4  SSK,r,\-" \,R\                  5      S!:  a  \,R\                  S!   r/OSr/\*" \/S"S#9  gg)%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                     [        U 5      n / nUR                  nSnU  H=  n[        [        U5         nU" U5        U[	        U5      -  nUS:  d  M3  SnU" S5        M?     SR                  U5      $ )Nr      z\
 )r   append_ESCAPEDICTr	   lenjoin)sRaRncs        M/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/renderPS.py_escape_and_limitr'      sm    
A
A	
B	A$
1	SVc6AvJ  771:    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                      \ rS rSrS5S jrS rS6S jrS rS rS7S jr	S	 r
S
 rS6S jrS rS r/ S4S jrS rS rS rS rS rS7S jrS rS rS8S jrS8S jrS9S jrS:S jrS;S jrS8S jrS<S jrS=S jrS  r S! r!S>S" jr"S# r#S?S$ jr$S6S% jr%S& r&S' r'S( r(S) r)S* r*S8S+ jr+S@S, jr,S- r-S. r.S/ r/S0 r0S6S1 jr1S2 r2S6S3 jr3S4r4g)APSCanvasZ   c                 @   Uu  U l         U l        / nUR                  U l        UR                  U l        SU l        / U l        U R                  R                  U l        SU l	        S =U l
        =U l        =U l        =U l        =U l        =U l        =U l        U l        / U l        U R'                  [(        S   [(        S   5        U R+                  [(        S   5        U R-                  S5        U R/                  S5        U R1                  S5        X l        [4        U l        g )Nr   
fontNamefontSizestrokeColor      )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sizerJ   	xtraStates       r&   __init__PSCanvas.__init__[   s
   "&
DK	(//'mm	99++	 ,0	0 	0DO 	0do 	0J	0	0*.-	0NT[^J/z0JKN=9:!,&r(   c                 P    U R                   (       a  U R                  SU-   5        g g )N%)r8   r:   )rL   msgs     r&   commentPSCanvas.commentq   s    ==$**3s73=r(   Nc                     U R                   S:X  a  U R                  XX4U5        g U R                   S:X  a  U R                  XX4U5        g [        SU R                   -  5      e)Nr2   r1   zUnsupported Postscript Level %s)rJ   _drawImageLevel1_drawImageLevel2
ValueError)rL   imagex1y1r3   r4   s         r&   	drawImagePSCanvas.drawImaget   sY    "!!%Bv>!!1$!!%R?>AUAUUVVr(   c                 &    U R                  S5        g )Nshowpager:   rL   s    r&   clearPSCanvas.clear}   s    $r(   c                    U R                   (       d  g / nU R                    HM  n[        U5      nUR                  (       a  M!  UR                  S:X  d  M3  UR	                  SU< SU< S35        MO     U(       aL  UR                  S[        5        U R                  R                  SU R                  R                  U5      5        g g )NWinAnsiEncodingzWinAnsiEncoding /z /z REr   r2   )
rD   r   _dynamicFontencNamer   insertPS_WinAnsiEncodingr9   r;   r    )rL   Cr.   fontObjs       r&   _t1_re_encodePSCanvas._t1_re_encode   s    Hh'G'''GOO=N,N8LM ( HHQ)*IIQ		q 12 r(   c                    [        US5      (       d  [        US5      nOUnU R                  S   S:w  a  U R                  5         U R                  R	                  SSU R
                  U R                  4-  5        U R                  5         UR                  [        U R                  R                  U R                  5      5      5        X!La  UR                  5         SSKJn  U" USS	S
9  g g )Nwritewbr`   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openr9   rc   ri   r3   r4   rm   rp   r
   r;   r    closereportlab.lib.utilsrs   )rL   f_frs   s       r&   savePSCanvas.save   s    q!!aBB99R=*$djjl		  zz$++ 	  	
$))..345;HHJ8vv> r(   c                 ^    U R                  U R                  45        U R                  S5        g )Ngsave)r5   _fontCodeLocr:   rb   s    r&   	saveStatePSCanvas.saveState   s'    d//12!r(   c                 T    U R                  S5        U R                  5       u  U l        g )Ngrestore)r:   r7   r   rb   s    r&   restoreStatePSCanvas.restoreState   s$    $!002r(   c                 n    U=(       d    U R                   nU=(       d    U R                  n[        XU5      $ )zdReturn the logical width of the string if it were drawn
in the current font (defaults to self.font).)r?   r@   r   )rL   r!   fontr/   s       r&   r   PSCanvas.stringWidth   s-     !tzz-t~~1H--r(   c                 Z    U R                   U:w  a  Xl         U R                  SU-  5        g g )Nz%d setlinecap)rA   r:   rL   vs     r&   rG   PSCanvas.setLineCap   s+    ==!M_Q./ r(   c                 Z    U R                   U:w  a  Xl         U R                  SU-  5        g g )Nz%d setlinejoin)rB   r:   r   s     r&   rH   PSCanvas.setLineJoin   s,    >>1N-a/0 r(   r   c                 D   Sn[        U[        [        45      (       a  U R                  SU< SU< SU< 35        g[        U[        [
        45      (       aJ  US:  d   S5       eSR                  [        [        U5      5      nU R                  SU< SU< SU< 35        gg)	z7Two notations.  pass two numbers, or an array and phasesetdash[ z] 0 r   zphase is a length in user spacez] N)	
isinstancefloatintr:   tuplelistr    mapstr)rL   arrayphasepsoperation	textarrays        r&   setDashPSCanvas.setDash   s      eU3K((ue[IJuTl++A:@@@:S%1IY{KL ,r(   c                 2    Xl         U R                  U5        g N)r<   setColorrL   colors     r&   rF   PSCanvas.setStrokeColor   s    !er(   c           	      p   U R                   U:w  a  Xl         U(       a  [        US5      (       aI  U R                  S[        UR                  UR
                  UR                  UR                  5      -  5        g U R                  S[        UR                  UR                  UR                  5      -  5        g g g )Ncyanz%s setcmykcolorz%s setrgbcolor)rC   rx   r:   r   r   magentayellowblackredgreenbluer   s     r&   r   PSCanvas.setColor   s    ;;K5&))$$%6

EMM[`[g[ginitit9u%uv$$%5uyy%++W\WaWa8b%bc	  r(   c                 2    Xl         U R                  U5        g r   )r=   r   r   s     r&   setFillColorPSCanvas.setFillColor   s    er(   c                     Xl         g r   )rK   r   s     r&   setFillModePSCanvas.setFillMode   s    r(   c                 X    XR                   :w  a  Xl         U R                  SU-  5        g g )Nz%s setlinewidth)r>   r:   )rL   r3   s     r&   rI   PSCanvas.setLineWidth   s*    OO##O.67 $r(   c                     U R                   U:w  d  U R                  U:w  a8  [        U R                  5      U l        Xl         X l        U R                  S5        g g )Nr   )r?   r@   r   r9   r   r:   )rL   r   r/   leadings       r&   rE   PSCanvas.setFont   sF    ::tt~~x7 #DIIDJ%NR 	  8r(   c                     U R                   S :w  aG  U R                  U R                   5        U R                  [        X5      < S[        X45      < S35        g g )Nz m z	 l stroke)r<   r   r:   r   rL   r[   r\   x2y2s        r&   linePSCanvas.line   sB    $MM$++,6">6">RS %r(   c                 R     [        U5      $ !   [        S[        U5      -  5      e= f)zc
return a copy of string s with special characters in postscript strings
escaped with backslashes.
zcannot escape %s)r'   rY   ascii)rL   r!   s     r&   _escapePSCanvas._escape   s.    
	<$Q''	</%(:;;s   
 &c                    US:X  a  g [        X5      nU R                  U5      nUS:X  a5  U R                  U R                  5        U R	                  U< SU< S35        g US:H  =(       d    US:H  =(       d    US:H  =(       d    US:H  nUS:H  =(       d    US:H  =(       d    US	:H  =(       d    US:H  nUS:  nU(       a  U(       a  U R                  c  S
n	OSn	U R                  U R                  5        U R	                  U< SU< SU	< 35        U R	                  S5        U R
                  b-  U R                  U R
                  5        U R	                  S5        g g U R                  U R
                  5        U R	                  U< SU< S35        g )N   r   z m (z) show r1         r2      r   zfill z) true charpath gsave z	grestore zstroke z) true charpath stroke )r   r   r   r=   r:   r<   )
rL   xyr!   textRenderModexyfillstroke	addToClipops
             r&   _textOutPSCanvas._textOut   sQ   1fA[LLO1MM$//*"Q78q _NA$5_9J_n^_N_"ana&7a>1;LaP^`aPa"A%	F&doo.2aKL[)  ,d//0  + - MM$++,"QGHr(   c                 J   UnU R                   nU R                  nU R                  n	U R                  n
[	        U5      (       d   UR                  S5      n[        XA/UR                  -   5       H  u  pX:w  aR  [        UR                  R                  5      nU" SU< S	[        U5      < S
35        UU	;  a  U	R                  U5        UnU R                  X#X5        X.R!                  UR                  UR"                  5      U5      -  nM     X:w  a.  S U l        U R'                  UR                  R                  U5        g g ! [         aW  nUR                  SS u  p[        UR                  S S UR                  S   < SXLS-
  U < SXLU < SXMUS-    < 34-   6 eS nAff = f)Nutf8r1   r   r-   
   z-->z<--r   ) findfont  scalefont setfont)r:   r@   rD   r   r   decodeUnicodeDecodeErrorargsr   substitutionFontsr   facenamer   r   r   r   rh   r?   rE   )rL   rl   r   r   r!   r   fcr:   r/   	fontsUsedescapeeijr|   tpsNames                    r&   _issueT1StringPSCanvas._issueT1String  s~   &&>>OO	||wHHV$
 q7+D+D!DEDAu!!&&++.F6RZK[\]*$$V,MM!a/qxx		28<<A F ;DJLL**84  & wffQqk(166"1:QVVTUYWX[]Y]^_W`abefaghilmnplphq7r6t+tvvws   E 
F"AFF"c                    US;   nUS;   nU(       d  U(       Ga  US:w  ac  [        X0R                  U R                  5      n	US:X  a  X-  nO8US:X  a  XS-  -  nO*US:X  a$  U[        XSXR                  U R                  5      -  n[	        U R                  5      n
U R
                  U R                     (       d~  [        U
R                  R                  5      nSU< S	[        U R                  5      < S
3U R
                  U R                  '   XR                  ;  a  U R                  R                  U5        US:w  a/  U R                  S[        X5      < S[        U5      < S35        S=pU R                  nU
R                  (       a  U R!                  XX6S9  OU R#                  XX#US9  U R%                  U5        US:w  a  U R                  S5        g g g )N)r   r1   r   r   )r2   r1   r   r   leftendmiddle       @numericr   r   r   r   zgsave z translate z rotater   r   )r   r?   r@   numericXShiftr   r9   r   r   r   r   r   rD   r   r:   rC   rg   r   r   r   )rL   r   r   r!   angletext_anchorr   needFill
needStroketextLenrl   r   oldColors                r&   
drawStringPSCanvas.drawString+  s~   !Y.#y0
zF"%aDNNC%LA (*OA )+{WZZWWAdjj)G99T../!',,"3"34U[\bcgcqcq\r-s		$++,0OO**62ax  6!;vV[}!]^	{{H##aAE##Ga.#QMM(#ax  , 1 "r(   c                 &    U R                  XX4US9  g N)r   r   r   )rL   r   r   textr   r   s         r&   drawCentredStringPSCanvas.drawCentredStringI  s    OOAnO]r(   c                 &    U R                  XX4US9  g r   r   )rL   r   r   r   r   r   s         r&   drawRightStringPSCanvas.drawRightStringL  s    qXr(   c
           	      h   Sn
[        X5      [        X4XVXx5      4nU R                  S :w  a1  U R                  U R                  5        U R                  X-  S-   5        U R                  S :w  aG  U R                  U R                  5        U R                  X-  U	=(       a    S=(       d    S-   S-   5        g g )Nz%s m %s curvetoz eofillz
 closepathr   z stroke)r   r=   r   r:   r<   )rL   r[   r\   r   r   x3y3x4y4closedcodelinedatas               r&   	drawCurvePSCanvas.drawCurveO  s    $rrrr >???d"MM$//*ho:;$MM$++,ho & 7<>B@'( ) %r(   c                     [        X5      [        X5      p1[        X$5      [        X$5      pBU R                  X4X24X44X44SXVS9  g)z)Draw a rectangle between x1,y1, and x2,y2r2   )r	  r   r   N)minmaxpolygon)rL   r[   r\   r   r   r   r   s          r&   rectPSCanvas.rect]  sE     RS[BRS[Brgrgrgrg6q]r(   c           	      T   [        X5      [        X5      p1[        X$5      [        X$5      pBSnS/nUR                  n	U	" XqU-   X&-   XV* SS4-  5        U	" XqU-   XF-
  XV* SS4-  5        U	" XsU-
  XF-
  XV* SS4-  5        U	" XsU-
  X&-   XV* SS4-  5        U	" S5        U R                  U5        g	)
zDraw 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newpathr+      i  h  r   	closepathN)r  r  r   _fillAndStroke)
rL   r[   r\   r   r   rxryellipsePathrras
             r&   	roundRectPSCanvas.roundRecte  s     RS[BRS[B c [II	+Br3C8
89	+Br3S9
9:	+Br3S9
9:	+Br3B7
79	+Br(   c                 (    U R                  XX45        g)ziDraw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.
These should have x1<x2 and y1<y2.N)drawArcr   s        r&   ellipsePSCanvas.ellipse  s     	RB"r(   c                 <    U R                  X-
  X#-
  X-   X#-   5        g r   )r#  )rL   xcycrs       r&   circlePSCanvas.circle  s    RT"$RT*r(   c                    X-   S-  X$-   S-  pX1-
  S-  XB-
  S-  pU R                  XX4XV5      n[        R                  U-  S-  n[        R                  U-  S-  nX-   nSnU R                  S:w  a  U R	                  U R                  5        U R                  U5        SnU R                  S:w  a  U R                  S5        U R                  X5        U R                  S5        U R                  S:w  a  U R                  S5        U R                  S:w  a  U R	                  U R                  5        X[        R                  " U5      -  -   X[        R                  " U5      -  -   nnU(       d  U R                  U5        U(       a4  U R                  X5        U R                  UU5        U R                  S	5        U R                  S
5        gg)zDraw 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   Nr2   r   eofillr   r  r   )
_genArcCodemathpir=   r   r:   r<   lineTocossin)rL   r[   r\   r   r   startAngextent
fromcentercxcyr  r  r
  startAngleRadiansextentRadiansendAngleRadianscodelineAppendedstartxstartys                      r&   r"  PSCanvas.drawArc  s    %ruckB%ruckB##BBHE GGH,U2u,+; ??d"MM$//*X&   $&(8(8(AKKX&  $&(8(8(D $MM$++, "dhh/@&A#A A2RcIdFdCdVV#  *B"FF+  -X& %r(   c                     [        X1-
  S-  5      n[        XB-
  S-  5      nX-   S-  X$-   S-  pSnUS:  a  SnOSnXXxXUU-   U4nX-  $ )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)rL   r[   r\   r   r   r3  r4  xScaleyScaler   r   r
  r@  r  s                 r&   r-  PSCanvas._genArcCode  sg     beS[!beS[!s{RUCK1^Q;CCVXDr(   c                     [        U5      S:  d   S5       eUS   nUSS  n/ nUR                  nU" S[        U5      -  5        U H  nU" S[        U5      -  5        M     U(       a  U" S5        U R                  XcUS9  g )	Nr1   z"Polygon must have 2 or more pointsr   r2   %s m%s lr  )r   r   )r   r   r   r  )	rL   pr	  r   r   startpolyr  points	            r&   r  PSCanvas.polygon  s    1v{@@@{!abEKK	&6%=
 !Efve}$% kNDD9r(   c           	          U R                   S :w  aU  U R                  U R                   5        SnU H1  nU R                  U[        US   5      [        US   5      4-  5        M3     g g )Nz%s m %s l stroker   r2   )r<   	_setColorr:   r   )rL   lineListr   r3   r
  r   s         r&   linesPSCanvas.lines  s^    $NN4,,-)H   VDG_VDG_,M!MN ! %r(   c                 >    U R                  S[        X5      -  5        g )NrG  r:   r   rL   r   r   s      r&   moveToPSCanvas.moveTo      &,./r(   c                 >    U R                  S[        X5      -  5        g )NrH  rT  rU  s      r&   r0  PSCanvas.lineTo  rX  r(   c                 B    U R                  S[        XX4XV5      -  5        g )Nz%s crT  )rL   r[   r\   r   r   r  r  s          r&   curveToPSCanvas.curveTo  s    &rR";;<r(   c                 &    U R                  S5        g )Nr  ra   rb   s    r&   	closePathPSCanvas.closePath  s    %r(   c                 .   [        U5      S:  d   S5       eU R                  S :w  ao  U R                  U R                  5        U R                  US   S   US   S   5        USS   H  nU R	                  US   US   5        M     U R                  S5        g g )Nr2   z#Polyline must have 1 or more pointsr   r   )r   r<   r   rV  r0  r:   )rL   rI  r   s      r&   polyLinePSCanvas.polyLine  s    1v{AAA{$MM$++,KK!Q1a)qrUAaD!A$' X& %r(   c                    / nUR                   nSnU GH  nUS   n[        USS  5      nU[        :X  aQ  U(       a  SnU" S[        US S 5      -  5        OU" S[        US S 5      -  5        U" S[        USS  5      -  5        Mr  U[        :X  a&  SnUS S u  pppU" U R                  XXX5      5        M  U[        :X  aQ  U(       a  SnU" S[        US S 5      -  5        OU" S[        US S 5      -  5        U" S[        USS  5      -  5        M  [        SU-   5      e   U(       a  U" S	5        U R                  U5        g )
Nr2   r   rG  r1   rH  r   z
%s curvetozunknown figure operator: r  )	r   r   
figureLiner   	figureArcr-  figureCurve	TypeErrorr  )rL   partListr	  
figureCoder  firstpartr   r   r[   r\   r   r   
startAngler4  s                  r&   
drawFigurePSCanvas.drawFigure  sI   
DaBQR>DZEfvd2Ah//0fvd2Ah//0&6$qr(++,y04Ra-bJ$""2zAB{"Efvd2Ah//0fvd2Ah//0,QR!112 ;B >??3 6 kNJ'r(   c                    U R                   =(       a    UnU R                  =(       a    UnU(       d  U(       d  U(       Ga5  U R                  R                  U5        U(       a  Uc  U R                  nU(       d  U(       a  U R                  S5        U R                  U R                   5        U R                  U[        :X  a  SOS5        U(       d  U(       a  U R                  S5        U(       a\  U(       a  U R                  S5        U R                  U R                  5        U R                  S5        U(       a  U R                  S5        U(       a#  U R                  S5        U R                  S5        g g g )Nr   r,  r   r   r   clipr  )r=   r<   r9   extendrK   r:   r   r   )rL   r9   rq  r   r   fillModes         r&   r  PSCanvas._fillAndStroke  s   '4""-v6TIIT"##~~HT4#3#3G#<doo.  X}-D&QT4#3#3J#?))'2d//0  *))*5  (  +  "r(   c                 >    U R                  S[        X5      -  5        g )Nz%s translaterT  rU  s      r&   	translatePSCanvas.translate,  s    &+56r(   c                 >    U R                  S[        X5      -  5        g )Nz%s scalerT  rU  s      r&   scalePSCanvas.scale/  s    fQk12r(   c                 B    U R                  S[        XX4XV5      -  5        g )Nz[%s] concatrT  )rL   r  br%   dr   r|   s          r&   	transformPSCanvas.transform2  s    A)<<=r(   c                      XsU l         U l        g)z1if this is used we're probably in the wrong worldN)r3   r4   )rL   whs      r&   _drawTimeResizePSCanvas._drawTimeResize5  s    "#
DKr(   c                    SnUR                  S5      nUR                  u  pU(       d  UnU(       d  U	nU R                  R                  SU< SU< S3U< SU< S3SU-  /5        U R                  R                  U< SU	< SU< 3SU< SS	< SS	< SU	* < SS	< SU	< S
3SS/5        [	        US5      (       a  UR
                  OUR                  " 5       n
U R                  U
5      n[        U5      nUR                  S5      nUS:w  a*  U R                  U5        UR                  S5      nUS:w  a  M*  U R                  S5        U R                  S5        g )N   RGBr   r   
 translate scalez/scanline %d 3 mul string defr   r   ]z2{ currentfile scanline readhexstring pop } false 3zcolorimage tobytesN   r   z% end of image datar   )convertrM   r9   rr  rx   r  tostring_AsciiHexEncoder   readr:   )rL   rZ   r[   r\   r3   r4   component_depthmyimageimgwidth	imgheightrawimagehex_encoded	outstreamdatalines                 r&   rW   PSCanvas._drawImageLevel19  s<    --&%llEF& 			!#B'"6*+h6	 	 			"I?%-q!iZIN@	 	 (/wy'A'AGOOwGWGWWZ**84 [)	>>"%"nX&nnR(H "n 	./$r(   c                     [        5       n[        U5       H   nUR                  S[        U5      -  5        M"     UR	                  5       $ )zHelper function used by imagesz%02x)r   r   rp   r	   getvalue)rL   inputoutputchars       r&   r  PSCanvas._AsciiHexEncodew  s9    ENDLL(4.01 #  r(   c           	         UR                   S:X  a  SnSnUnO;UR                   S:X  a  UR                  S5      nSnUnOUR                  S5      nSnSnUR                  u  pU(       d  U	nU(       d  U
nU R                  R	                  SU< SU< S	3U< SU< S
3/5        US:X  a  U R                  S5        OUS:X  a  U R                  S5        U R                  SXW4-  5        US:X  a  U R                  S5        US:X  a  U R                  S5        U R                  R	                  SU	< SU
* < SU
< S3SSS/5        [        US5      (       a  UR                  OUR                  " 5       nU R                  U5      n[        U5      nUR                  S5      nUS:w  a*  U R                  U5        UR                  S5      nUS:w  a  M*  U R                  S5        U R                  S5        g)z"At present we're handling only PILLr  r2   1r  r   r   r   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 [z 0 0 z 0 r  z./DataSource currentfile /ASCIIHexDecode filterz>> % End image dictionaryrZ   r  r  r   z> % end of image datar   N)moder  rM   r9   rr  r:   rx   r  r  r  r   r  )rL   rZ   r[   r\   r3   r4   imBitsPerComponentimNumComponentsr  imwidthimheightr  r  r  r  s                  r&   rX   PSCanvas._drawImageLevel2~  s    ::s?!"OGZZ3mmC(GOGmmE*GO!"#LLEF		!#B'"6*, 	-
 a78!89  #.@A	B 	D a_-aUV		w	S[\L7#% 	&
 (/wy'A'AGOOwGWGWWZ**84 [)	>>"%"nX&nnR(H "n 	01$r(   )rJ   rC   r=   rK   r?   r   r@   rD   rA   rB   r>   r;   r<   r7   r5   r9   r:   r8   r4   r3   )),  r  r1   )NNr   )r   )r   r   r   )r   r   )r   r   )r2   r2   )r  r  )r   r  r   )r   r2   r2   )r   r2   r2   N)5__name__
__module____qualname____firstlineno__rO   rT   r]   rc   rm   r~   r   r   r   rG   rH   r   rF   r   r   r   rI   rE   r   r   r   r   r   r   r  r  r  r  r#  r)  r"  r-  r  rQ  rV  r0  r\  r_  rb  rn  r  rv  ry  r~  r  rW   r  rX   __static_attributes__ r(   r&   r*   r*   Z   s   ',4W%
3?,"3.0
1
 a 	Md8
!T
<I854-<^Y
)^ 8#+)'V$: O00=&'"(H,*73>';%|!:%r(   r*   )*c                 L    [        5       nUR                  [        U 5      XX4S9  g)z
As it saysshowBoundaryN)_PSRendererdrawr   )drawingcanvasr   r   r  r"   s         r&   r  r    s!    AFFw'AFQr(   c                 ~    / nUR                   n[        S[        U 5      S5       H  nU" X   XS-      45        M     U$ )zc
given a list of coordinates [x0, y0, x1, y1....]
produce a list of points [(x0,y0), (y1,y0),....]
r   r1   r2   )r   ranger   )r  Pr  r   s       r&   _pointsFromListr    sB    
 	A	A1SVA	14A#- Hr(   c                   x    \ rS rSrSrS rSSSSSS	S
S.rS rS rS r	S r
S rS rS rS rSS jrS rS rSrg)r  i  zThis 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                 *   U R                   R                  SU-  5        U R                   R                  n[        U[        5      (       a  UR
                  (       d  U R                   R                  5         [        U5      nU R                  R                  U5        U R                  U0 5        U R                  U5        U R                  R                  5       n[        U[        5      (       a  UR
                  (       d  U R                   R                  5         U R                   R                  SU-  5        X R                   l        UR                  5        H:  u  pVXPR                  ;   d  M  [!        U R                   U R                  U   U5        M<     g)z=This is the recursive method called for each node
in the treezbegin node %rzend node %rN)_canvasrT   rC   r   Path
isClipPathr   r   _trackerpushapplyStateChangesdrawNodeDispatcherr6   r   items	_restoressetattr)rL   noder   deltasrDeltaskr   s          r&   drawNode_PSRenderer.drawNode  s    	_T12##4&&4??LL""$ t$6"vr* 	%--##%4&&4??LL%%']4/0# MMODANN"T^^A%6q9 $r(   r<   r>   rA   rB   r=   r?   r@   )r0   strokeWidthstrokeLineCapstrokeLineJoin	fillColorr.   r/   c                    UR                   UR                  s=:X  a  S:X  ad  O  OaU R                  R                  UR                  UR
                  UR                  UR                  -   UR
                  UR                  -   5        g U R                  R                  UR                  UR
                  UR                  UR                  -   UR
                  UR                  -   UR                   UR                  5        g )Nr   )	r  r  r  r  r   r   r3   r4   r  )rL   r  s     r&   drawRect_PSRenderer.drawRect  s    77dgg""LLFFDFFFF4::%tvvdkk'9; LL""FFDFFFF4::%tvvdkk'9477DGGr(   c                     U R                   R                  (       aG  U R                   R                  UR                  UR                  UR
                  UR                  5        g g r   )r  r<   r   r[   r\   r   r   )rL   r   s     r&   drawLine_PSRenderer.drawLine
  s<    <<$$LLdggtwwA %r(   c                 z    U R                   R                  UR                  UR                  UR                  5        g r   )r  r)  r6  r7  r(  )rL   r)  s     r&   
drawCircle_PSRenderer.drawCircle  s$    VYY		688<r(   c           
         UR                  5       u  p#nUS:X  d  Uc  US:X  d  Ucx  UR                  (       dg  UR                  nUR                  nUR                  nUR
                  nUR                  n	Xe-
  n
U R                  R                  Xy-
  X-
  Xy-   X-   XZSS9  g UR                  5       n[        U[        5      (       a  U R                  U5        g U R                  U5        g )Nr   r2   )r5  )
_xtraRadiiannularstartangledegreesendangledegreescenterxcenteryradiusr  r"  	asPolygonr   r  drawPathdrawPolygon)rL   wedgeyradiusradius1yradius1r  r  r  r  r  r4  r  s               r&   	drawWedge_PSRenderer.drawWedge  s    %*%5%5%7"(QJ'/!x?OY^YfYf % 7 7#33O]]GmmG\\F$8FLL  '.RYRa!a ! 9 !A!D!!a   #r(   c                     U R                   R                  (       a/  U R                   R                  [        UR                  5      5        g g r   )r  r<   rb  r  pointsrL   rI  s     r&   drawPolyLine_PSRenderer.drawPolyLine#  s/    <<$$LL!!/!((";< %r(   c                    UR                   UR                  -
  nUR                   UR                  -   nUR                  UR                  -
  nUR                  UR                  -   nU R                  R                  X$X55        g r   )r6  r  r7  r  r  r#  )rL   r#  r[   r   r\   r   s         r&   drawEllipse_PSRenderer.drawEllipse'  s^    ZZ'**$ZZ'**$ZZ'**$ZZ'**$R2)r(   c                 ^    U R                   R                  [        UR                  5      SS9  g )Nr2   )r	  )r  r  r  r  r  s     r&   r  _PSRenderer.drawPolygon/  s"    _QXX6qAr(   c           
         [        USS5      nU R                  R                  (       d  U(       a  U R                  R	                  5       nUS   UR
                  UR                  UR                  4u  pEpgUS;  a[  US   US   p[        XxU	5      n
US:X  a  XZ-  nO;US:X  a  XZS	-  -  nO-US
:X  a  U[        XGXU	SS9-  nO[        S[        U5      -   5      eU R                  R                  XVXrS9  g g )Nr   r   
textAnchor)rJ  	inheritedr.   r/   r   r   r1   r   winansi)encodingzbad value for text_anchor r   )getattrr  r=   r  getStater   r   r   r   r   rY   r   r   )rL   	stringObjr   Sr   r   r   r   r   r/   r   s              r&   r   _PSRenderer.drawString2  s     +;A><<""n&&(A&'oy{{9;;y~~&]#KA"77!":*h%d:%LA (*NA )+{XW`aaA$%A#kBR%RSSLL##A#L '5r(   Nc                 r  ^^^^^ SSK Jm  U R                  mTR                  TR                  TR
                  TR                  4m[        TSS5      nUUU4S jnTc  [        TSTR                  5      mTR                  S LnTR                  S LnTR                  nUU4S jnUU4S jn	U4S	 jn
US
:X  a  U" 5         U" XeUS9  g US:X  a4  U(       a  U" SS9  U" XeUS9  g U(       d  U(       a  U" 5         U" USUS9  g g U(       a  U" SS9(       a  U" 5         g U(       d  U(       a  U" 5         U" USUS9  g g )Nr   )_renderPath	autocloser   c                     > T" TT40 U D6$ r   r  )kwdsr  	drawFuncspaths    r&   rP _PSRenderer.drawPath.<locals>.rPI  s    tY7$77r(   rs  c                  .   > TR                   " / 4ST0U D6$ )Nrs  r  )r  r%   rs  s    r&   <lambda>&_PSRenderer.drawPath.<locals>.<lambda>P  s    Q--bL8LtLr(   c                  &   > T R                  / STS9$ )Nr   )r   rs  r
  )r%   rs  s   r&   r  r  Q  s    A,,RH,Mr(   c                  $   > T R                  / SS9$ )Nr   )r   r
  )r%   s   r&   r  r  R  s    a..r.:r(   svg)r   r   rq  pdfT)
forceClose)	countOnly)reportlab.graphics.shapesr  r  rV  r0  r\  r_  r  rK   r=   r<   r  )rL   r  rs  r  r  r   r   rq  faspathFill
pathStroker  r%   r  s    ``        @@@r&   r  _PSRenderer.drawPathD  s   9LLXXqxxAKK@	DR0		8tJq{{;H||4't+LM:
eDvT2d#6646qd3   T*46qd3  r(   c           
      (   UR                  5        GH  u  p4US:X  a4  U R                  R                  US   US   US   US   US   US   5        M@  US:X  a  U R                  R                  U5        Mc  US	:X  a  U R                  R	                  U5        M  US
:X  a  U R                  R                  U5        M  US:X  a  U R                  R                  U5        M  US:X  a  U(       as  [        U[        [        45      (       a8  [        U5      S:X  a)  [        US   [        [        45      (       a  US   nUS   nOSnU R                  R                  XE5        GML  U R                  R                  5         GMi  US:X  a  U R                  R                  U5        GM  US;   d  GM  UR                  SU R                  R                  5      nUR                  SU R                  R                  5      nU R                  R!                  Xg5        GM      g)zTThis takes a set of states, and outputs the operators
needed to set those propertiesr~  r   r2   r1   r   r   r   r0   r  r  r  strokeDashArrayr  )r/   r.   r.   r/   N)r  r  r~  rF   rI   rG   rH   r   r   r   r   r   r   getr?   r@   rE   )rL   deltanewStatekeyvaluer   fontnamefontsizes           r&   r  _PSRenderer.applyStateChangesd  s     ++-JCk!&&uQxq58!&q58U1X?% ++E2%))%0'''.((((/))!%e55#e*a-JW\]^W_afgk`lLmLm %a %a !LL((5LL((* # ))%0
 00 !99Z1C1CD 99Z1G1GH$$X8U (r(   c                     SSK Jn  U" UR                  5      nU R                  R	                  UR
                  UR                  UR                  UR                  UR                  5        g )Nr   )ImageReader)
r{   r#  r  r  r]   _imager   r   r3   r4   )rL   rZ   r#  ims       r&   r]   _PSRenderer.drawImage  sA    3$ryyU\\Rr(   r  r   )r  r  r  r  __doc__r  r  r  r  r  r  r  r  r  r   r  r  r]   r  r  r(   r&   r  r    se    ::<  .\Zd!,QX&(IB=$$=*BM$4@-9^Sr(   r  c                     [        U 5      n [        U R                  U R                  45      n[	        XSSUS9  UR                  U5        g )Nr   r  )r   r*   r3   r4   r  r~   )r}  fnr  kwdr%   s        r&   
drawToFiler+    s<    AA!''!((#$Aq!,/FF2Jr(   c                 J    [        5       n[        XUS9  UR                  5       $ )z=Returns a PS as a string in memory, without touching the diskr  )r   r+  r  )r}  r  r!   s      r&   drawToStringr-    s    	Aq,/::<r(   epsoutc                 T   SSK Jn  SSKJn  UR                  S S  n/ SQUR                  S S &  SS KnUR                  R                  U 5      (       d  UR                  U 5        / n[        U5       H?  nUSS S:X  d  M  [        X'5      nU" 5       n	[        USS5      n
UR                  X45        MA     SnU HM  u  pXR                  -   S	U-  -   n[        X5        U(       d  US
:  a  [        S[        U5      -  5        US-  nMO     XBR                  S S & g ! XBR                  S S & f = f)Nr   )
testshapes)verbose)zTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicCourierr   
getDrawingr'  r   zrenderPS_%d.epsr1   zrenderPS test saved %sr2   )reportlab.graphicsr0  reportlab.rl_configr1  _FONTSosr  isdirmkdirdirr  r   sepr+  printr   )outDirshoutr0  r1  OLDFONTSr7  drawingsfuncnamefuncr  	docstringr   r}  filenames                 r&   testrE    s   -+  #HdJa(ww}}V$$HHVJH"~-z3&#D26	 45 ( &NQ):1)<<Hq"	5)AE(O)S#TFA	 '  (!x!s   AD >B
D D'__main__r2   T)r>  )r.  F)0__version__r'  r.  ior   r   reportlab.pdfbase.pdfmetricsr   r   r   r{   r   r	   r
   r   r   reportlab.lib.rl_accelr   reportlab.graphics.renderbaser   r   r   r  r   	reportlabr   reportlab.pdfgen.canvasr   r   r  r%   ordchrr'   rj   r*   r  r  r  r  r+  r-  rE  r  sysr   argvoutdirr  r(   r&   <module>rS     sR   2    I I P P ) V V 4  1	sAtq#v 1A	
s4yS#c(+	+c!fAQA 
  - ^^	% ^	%B1 ( 1G1G R
	AS( ASF #,"8"8  "+!7!7 (: Z
388}Q!d r(   