
    Kwg1                     f   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 ]H  Zedk  sedk\  r	dez  ee<   e ed       ed       ed      fv rd e e      z   ee<   > e e      ee<   J [d Z!dZ" G d d      Z#	 ddl ddejH                  fdZ%d Z& G d de      Z'ejH                  fdZ(ejH                  fdZ)d$dZ*e+d k(  r6ddl,Z, e-e,j\                        d!kD  re,j\                  d!   Z/ndZ/ e*e/d"#       yy)%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                     t        |       } g }|j                  }d}| D ]:  }t        t        |         } ||       |t	        |      z  }|dk\  s1d} |d       < dj                  |      S )Nr      z\
 )r   append_ESCAPEDICTr	   lenjoin)sRaRncs        R/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/renderPS.py_escape_and_limitr'      sr    
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                   Z   e Zd Zd3dZd Zd4dZd Zd Zd5dZd Z	d	 Z
d4d
Zd Zd Zg dfdZd Zd Zd Zd Zd Zd5dZd Zd Zd6dZd6dZd7dZd8dZd9dZd6dZd:dZd;dZd Zd  Z d<d!Z!d" Z"d=d#Z#d4d$Z$d% Z%d& Z&d' Z'd( Z(d) Z)d6d*Z*d>d+Z+d, Z,d- Z-d. Z.d/ Z/d4d0Z0d1 Z1d4d2Z2y)?PSCanvasc                 B   |\  | _         | _        g }|j                  | _        |j                  | _        d| _        g | _        | j                  j                  | _        d| _	        d x| _
        x| _        x| _        x| _        x| _        x| _        x| _        | _        g | _        | j'                  t(        d   t(        d          | j+                  t(        d          | j-                  d       | j/                  d       | j1                  d       || _        t4        | _        y )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sizerI   	xtraStates       r&   __init__zPSCanvas.__init__[   s   "&
DK	(//'mm	99++	 ,0	0 	0DO 	0do 	0J	0	0*.-	0NT[^J/z0JKN=9:!,&r(   c                 F    | j                   r| j                  d|z          y y )N%)r7   r9   )rK   msgs     r&   commentzPSCanvas.commentq   s    ==$**3s73=r(   Nc                     | j                   dk(  r| j                  |||||       y | j                   dk(  r| j                  |||||       y t        d| j                   z        )Nr1   r0   zUnsupported Postscript Level %s)rI   _drawImageLevel1_drawImageLevel2
ValueError)rK   imagex1y1r2   r3   s         r&   	drawImagezPSCanvas.drawImaget   sa    "!!%Bv>!!1$!!%R?>AUAUUVVr(   c                 &    | j                  d       y )Nshowpager9   rK   s    r&   clearzPSCanvas.clear}   s    $r(   c                 `   | j                   sy g }| j                   D ]B  }t        |      }|j                  r|j                  dk(  s+|j	                  d|d|d       D |rL|j                  dt               | j                  j                  d| j                  j                  |             y y )NWinAnsiEncodingzWinAnsiEncoding /z /z REr   r1   )
rC   r   _dynamicFontencNamer   insertPS_WinAnsiEncodingr8   r:   r    )rK   Cr-   fontObjs       r&   _t1_re_encodezPSCanvas._t1_re_encode   s     	NHh'G''GOO=N,N8LM	N HHQ)*IIQ		q 12 r(   c                    t        |d      st        |d      }n|}| j                  d   dk7  r| j                          | j                  j	                  dd| j
                  | j                  fz         | j                          |j                  t        | j                  j                  | j                                     ||ur"|j                          ddlm}  ||dd	
       y y )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openr8   r_   rd   r2   r3   rh   rj   r
   r:   r    closereportlab.lib.utilsrm   )rK   f_frm   s       r&   savezPSCanvas.save   s    q!aBB99R=*$djjl		  zz$++ 	  	
$))..345Q;HHJ8vv> r(   c                 ^    | j                  | j                  f       | j                  d       y )Ngsave)r4   _fontCodeLocr9   r^   s    r&   	saveStatezPSCanvas.saveState   s'    d//12!r(   c                 T    | j                  d       | j                         \  | _        y )Ngrestore)r9   r6   r{   r^   s    r&   restoreStatezPSCanvas.restoreState   s$    $!002r(   c                 \    |xs | j                   }|xs | 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   )rK   r!   fontr.   s       r&   r   zPSCanvas.stringWidth   s/     !tzz-t~~1dH--r(   c                 Z    | j                   |k7  r|| _         | j                  d|z         y y )Nz%d setlinecap)r@   r9   rK   vs     r&   rF   zPSCanvas.setLineCap   s-    ==!DM_Q./ r(   c                 Z    | j                   |k7  r|| _         | j                  d|z         y y )Nz%d setlinejoin)rA   r9   r   s     r&   rG   zPSCanvas.setLineJoin   s.    >>1DN-a/0 r(   r   c                 "   d}t        |t        t        f      r| j                  d|d|d|       yt        |t        t
        f      rF|dk\  sJ d       dj                  t        t        |            }| j                  d|d|d|       yy)	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intr9   tuplelistr    mapstr)rK   arrayphasepsoperation	textarrays        r&   setDashzPSCanvas.setDash   sz      eU3K(ue[IJuTl+A:@@@:S%1IY{KL ,r(   c                 4    || _         | j                  |       y N)r;   setColorrK   colors     r&   rE   zPSCanvas.setStrokeColor   s    !er(   c           	      \   | j                   |k7  r|| _         |rt        |d      rI| j                  dt        |j                  |j
                  |j                  |j                        z         y | j                  dt        |j                  |j                  |j                        z         y y y )Ncyanz%s setcmykcolorz%s setrgbcolor)rB   rr   r9   r   r   magentayellowblackredgreenbluer   s     r&   r   zPSCanvas.setColor   s    ;;DK5&)$$%6

EMM[`[g[ginitit9u%uv$$%5uyy%++W\WaWa8b%bc	  r(   c                 4    || _         | j                  |       y r   )r<   r   r   s     r&   setFillColorzPSCanvas.setFillColor   s    er(   c                     || _         y r   )rJ   r   s     r&   setFillModezPSCanvas.setFillMode   s	    r(   c                 Z    || j                   k7  r|| _         | j                  d|z         y y )Nz%s setlinewidth)r=   r9   )rK   r2   s     r&   rH   zPSCanvas.setLineWidth   s.    DOO##DO.67 $r(   c                     | j                   |k7  s| j                  |k7  r:t        | j                        | _        || _         || _        | j                  d       y y )Nr   )r>   r?   r   r8   r{   r9   )rK   r   r.   leadings       r&   rD   zPSCanvas.setFont   sJ    ::tt~~x7 #DIIDDJ%DNR 	  8r(   c                     | j                   d k7  rG| j                  | j                          | j                  t        ||      dt        ||      d       y y )Nz m z	 l stroke)r;   r   r9   r   rK   rX   rY   x2y2s        r&   linezPSCanvas.line   sF    $MM$++,6"b>6"b>RS %r(   c                 R    	 t        |      S #  t        dt        |      z        xY w)z{
        return a copy of string s with special characters in postscript strings
        escaped with backslashes.
        zcannot escape %s)r'   rV   ascii)rK   r!   s     r&   _escapezPSCanvas._escape   s.    
	<$Q''	</%(:;;s   
 &c                    |dk(  ry t        ||      }| j                  |      }|dk(  r3| j                  | j                         | j	                  |d|d       y |dk(  xs |dk(  xs |dk(  xs |dk(  }|dk(  xs |dk(  xs |d	k(  xs |dk(  }|dk\  }|r|r| j                  d
}	nd}	| j                  | j                         | j	                  |d|d|	       | j	                  d       | j
                  -| j                  | j
                         | j	                  d       y y | j                  | j
                         | j	                  |d|d       y )N   r   z m (z) show r0         r1      r   zfill z) true charpath gsave z	grestore zstroke z) true charpath stroke )r   r   r   r<   r9   r;   )
rK   xyr!   textRenderModexyfillstroke	addToClipops
             r&   _textOutzPSCanvas._textOut   sS   1fAa[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                   }| j                  }| j                  }	| j                  }
t	        |      s	 |j                  d      }t        ||g|j                  z         D ]  \  }}||k7  rNt        |j                  j                        } |d|d	t        |      d
       ||	vr|	j                  |       |}| j                  ||||       ||j!                  |j                  |j"                        |      z  } ||k7  r.d | _        | j'                  |j                  j                  |       y y # t        $ rW}|j                  dd \  }}t        |j                  d d |j                  d   d||dz
  | d||| d|||dz    fz    d }~ww xY w)Nutf8r0   r   r,   
   z-->z<--r   ) findfont  scalefont setfont)r9   r?   rC   r   r   decodeUnicodeDecodeErrorargsr   substitutionFontsr   facenamer   r   r   r   rc   r>   rD   )rK   rg   r   r   r!   r   fcr9   r.   	fontsUsedescapeeijrv   tpsNames                    r&   _issueT1StringzPSCanvas._issueT1String  s   &&>>OO	|wHHV$
 q'7+D+D!DE 	=DAq"u!!&&++.F6RZK[\]*$$V,MM!Aa/qxx		28<<A	= B;DJLL**84  & wffQqk!(166"1:QVVTUYWXYZ[]Y]^_W`abcdefaghijklmnplphq7r6t+tvvws   D; ;	FAFFc                    |dv }|dv }|s|r|dk7  ret        || j                  | j                        }	|dk(  r||	z  }n9|dk(  r	||	dz  z  }n+|dk(  r&|t        |||	| j                  | j                        z  }t	        | j                        }
| j
                  | j                     s{t        |
j                  j                        }d|d	t        | j                        d
| j
                  | j                  <   || j                  vr| j                  j                  |       |dk7  r/| j                  dt        ||      dt        |      d       dx}}| j                  }|
j                  r| j!                  ||||       n| j#                  |
||||       | j%                  |       |dk7  r| j                  d       y y y )N)r   r0   r   r   )r1   r0   r   r   leftendmiddle       @numericr   r   r   r   zgsave z translate z rotater   r~   )r   r>   r?   numericXShiftr   r8   r{   r   r   r   r   rC   r   r9   rB   rb   r   r   r   )rK   r   r   r!   angletext_anchorr   needFill
needStroketextLenrg   r   oldColors                r&   
drawStringzPSCanvas.drawString+  s   !Y.#y0
zF"%aDNNC%LA (*OA )+{1WTZZWWAdjj)G99T../!',,"3"34U[\bcgcqcq\r-s		$++,0OO**62ax  6!A;vV[}!]^	A{{H##aAnE##GAa.#QMM(#ax  , 1 "r(   c                 0    | j                  |||||       y N)r   r   r   )rK   r   r   textr   r   s         r&   drawCentredStringzPSCanvas.drawCentredStringI  s    OOAa+nO]r(   c                 0    | j                  |||||       y r   r   )rK   r   r   r   r   r   s         r&   drawRightStringzPSCanvas.drawRightStringL  s    Qq[Xr(   c
           	      \   d}
t        ||      t        ||||||      f}| j                  d k7  r2| j                  | j                         | j                  |
|z  dz          | j                  d k7  r>| j                  | j                         | j                  |
|z  |	xr dxs dz   dz          y y )Nz%s m %s curvetoz eofillz
 closepathr   z stroke)r   r<   r   r9   r;   )rK   rX   rY   r   r   x3y3x4y4closedcodelinedatas               r&   	drawCurvezPSCanvas.drawCurveO  s    $r2r2r2r2 >???d"MM$//*ho:;$MM$++,ho & 7<>B@'( ) %r(   c                     t        ||      t        ||      }}t        ||      t        ||      }}| j                  ||f||f||f||ffd||       y)z)Draw a rectangle between x1,y1, and x2,y2r1   )r   r   r   N)minmaxpolygon)rK   rX   rY   r   r   r   r   s          r&   rectzPSCanvas.rect]  s\     RSR[BRSR[Br"gr"gr"gr"g6qX\]r(   c           	      x   t        ||      t        ||      }}t        ||      t        ||      }}d}dg}|j                  }	 |	|||z   ||z   || ddfz          |	|||z   ||z
  || ddfz          |	|||z
  ||z
  || ddfz          |	|||z
  ||z   || ddfz          |	d       | j                  |       y	)
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newpathZ      i  h  r   	closepathN)r   r   r   _fillAndStroke)
rK   rX   rY   r   r   rxryellipsePathrras
             r&   	roundRectzPSCanvas.roundRecte  s     RSR[BRSR[B c [II	+B2rB3C8
89	+B2rB3S9
9:	+B2rB3S9
9:	+B2rB3B7
79	+Br(   c                 ,    | j                  ||||       y)zqDraw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.
        These should have x1<x2 and y1<y2.N)drawArcr   s        r&   ellipsezPSCanvas.ellipse  s     	RBr"r(   c                 D    | j                  ||z
  ||z
  ||z   ||z          y r   )r  )rK   xcycrs       r&   circlezPSCanvas.circle  s$    RT"Q$1RT*r(   c                    ||z   dz  ||z   dz  }	}||z
  dz  ||z
  dz  }}
| j                  ||||||      }t        j                  |z  dz  }t        j                  |z  dz  }||z   }d}| j                  dk7  r| j	                  | j                         | j                  |       d}| j                  dk7  r| j                  d       | j                  ||	       | j                  d       | j                  dk7  r| j                  d       | j                  dk7  r| j	                  | j                         ||
t        j                  |      z  z   |	|t        j                  |      z  z   }}|s| j                  |       |r5| j                  ||	       | j                  ||       | j                  d	       | j                  d
       yy)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   Nr1   rz   eofillr~   r   r   )
_genArcCodemathpir<   r   r9   r;   lineTocossin)rK   rX   rY   r   r   startAngextent
fromcentercxcyr   r   r   startAngleRadiansextentRadiansendAngleRadianscodelineAppendedstartxstartys                      r&   r  zPSCanvas.drawArc  s    R%r"uckBR%r"uckB##BBHfE GGH,U2u,+m; ??d"MM$//*X&   $&(8(8(AKK2X&  $&(8(8(D $MM$++, "2dhh/@&A#A A2bRcIdFdCdVV#  *Br"FF+  -X& %r(   c                     t        ||z
  dz        }t        ||z
  dz        }||z   dz  ||z   dz  }
}	d}|dk\  rd}nd}|	|
|||||z   |f}||z  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)rK   rX   rY   r   r   r  r  xScaleyScaler   r   r   r!  r   s                 r&   r  zPSCanvas._genArcCode  sy     beS[!beS[!2s{RUCK1^Q;CC!VVXxD$r(   c                     t        |      dk\  sJ d       |d   }|dd  }g }|j                  } |dt        |      z         |D ]  } |dt        |      z          |r |d       | j                  |||       y )	Nr0   z"Polygon must have 2 or more pointsr   r1   %s m%s lr   )r   r   )r   r   r   r   )	rK   pr   r   r   startpolyr  points	            r&   r   zPSCanvas.polygon  s    1v{@@@{!abEKK	&6%=
 ! 	&Efve}$%	&kNDD9r(   c           	          | j                   d k7  rS| j                  | j                          d}|D ]0  }| j                  |t        |d         t        |d         fz         2 y y )Nz%s m %s l stroker   r1   )r;   	_setColorr9   r   )rK   lineListr   r2   r   r   s         r&   lineszPSCanvas.lines  se    $NN4,,-)H  O  VDG_VDG_,M!MNO %r(   c                 @    | j                  dt        ||      z         y )Nr'  r9   r   rK   r   r   s      r&   moveTozPSCanvas.moveTo      &A,./r(   c                 @    | j                  dt        ||      z         y )Nr(  r2  r3  s      r&   r  zPSCanvas.lineTo  r5  r(   c                 H    | j                  dt        ||||||      z         y )Nz%s cr2  )rK   rX   rY   r   r   r   r   s          r&   curveTozPSCanvas.curveTo  s$    &Br"R";;<r(   c                 &    | j                  d       y )Nr   r]   r^   s    r&   	closePathzPSCanvas.closePath  s    %r(   c                 &   t        |      dk\  sJ d       | j                  d k7  rm| j                  | j                         | j                  |d   d   |d   d          |dd  D ]  }| j	                  |d   |d           | j                  d       y y )Nr1   z#Polyline must have 1 or more pointsr   r   )r   r;   r   r4  r  r9   )rK   r)  r   s      r&   polyLinezPSCanvas.polyLine  s    1v{AAA{$MM$++,KK!Q1a)qrU (AaD!A$'(X& %r(   c                 `   g }|j                   }d}|D ]  }|d   }t        |dd        }|t        k(  rK|rd} |dt        |d d       z         n |dt        |d d       z          |dt        |dd        z         j|t        k(  r+d}|d d \  }	}
}}}} || j                  |	|
||||             |t        k(  rK|rd} |dt        |d d       z         n |dt        |d d       z          |dt        |dd        z         t        d|z          |r |d	       | j                  |       y )
Nr1   r   r'  r0   r(  r   z
%s curvetozunknown figure operator: r   )	r   r   
figureLiner   	figureArcr  figureCurve	TypeErrorr   )rK   partListr   
figureCoder  firstpartr   r   rX   rY   r   r   
startAngler  s                  r&   
drawFigurezPSCanvas.drawFigure  s\   
 	@DaBQR>DZEfvd2Ah//0fvd2Ah//0&6$qr(++,y04Ra-2bJv$""2bBz&AB{"Efvd2Ah//0fvd2Ah//0,QR!112 ;B >??3	@6 kNJ'r(   c                 ^   | j                   xr |}| j                  xr |}|s|s|r| j                  j                  |       |ro|| j                  }|s|r| j                  d       | j                  | j                          | j                  |t        k(  rdnd       |s|r| j                  d       |rR|r| j                  d       | j                  | j                         | j                  d       |r| j                  d       |r#| j                  d       | j                  d       y y y )Nrz   r  r   r~   r   clipr   )r<   r;   r8   extendrJ   r9   r   r   )rK   r8   rI  r   r   fillModes         r&   r   z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                 @    | j                  dt        ||      z         y )Nz%s translater2  r3  s      r&   	translatezPSCanvas.translate,  s    &1+56r(   c                 @    | j                  dt        ||      z         y )Nz%s scaler2  r3  s      r&   scalezPSCanvas.scale/  s    fQqk12r(   c                 H    | j                  dt        ||||||      z         y )Nz[%s] concatr2  )rK   r  br%   dr   rv   s          r&   	transformzPSCanvas.transform2  s$    !Aa!)<<=r(   c                 "    ||c| _         | _        y)z1if this is used we're probably in the wrong worldN)r2   r3   )rK   whs      r&   _drawTimeResizezPSCanvas._drawTimeResize5  s    "#Q
DKr(   c                 t   d}|j                  d      }|j                  \  }}	|s|}|s|	}| j                  j                  d|d|d|d|dd|z  g       | j                  j                  |d|	d|d|dd	dd	d|	 dd	d|	d
ddg        t	        |d      r|j
                  n|j                         }
| j                  |
      }t        |      }|j                  d      }|dk7  r(| j                  |       |j                  d      }|dk7  r(| j                  d       | j                  d       y )N   RGBrz   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~   )convertrL   r8   rJ  rr   r^  tostring_AsciiHexEncoder   readr9   )rK   rW   rX   rY   r2   r3   component_depthmyimageimgwidth	imgheightrawimagehex_encoded	outstreamdatalines                 r&   rT   zPSCanvas._drawImageLevel19  s;    --&%ll)EF& 			!#B'"6*+h6	 	 			"I?%-q!iZIN@	 	 Xwwy'AGOOwGWGWZ**84 [)	>>"%"nX&nnR(H "n 	./$r(   c                     t               }t        |      D ]  }|j                  dt        |      z         ! |j	                         S )zHelper function used by imagesz%02x)r   r   rj   r	   getvalue)rK   inputoutputchars       r&   rb  zPSCanvas._AsciiHexEncodew  s>    EN 	2DLL(4.01	2  r(   c           	         |j                   dk(  rd}d}|}n:|j                   dk(  r|j                  d      }d}|}n|j                  d      }d}d}|j                  \  }	}
|s|	}|s|
}| j                  j	                  d|d|d	|d|d
g       |dk(  r| j                  d       n|dk(  r| j                  d       | j                  d|	|
fz         |dk(  r| j                  d       |dk(  r| j                  d       | j                  j	                  d|	d|
 d|
ddddg        t        |d      r|j                  n|j                         }| j                  |      }t        |      }|j                  d      }|dk7  r(| j                  |       |j                  d      }|dk7  r(| j                  d       | j                  d       y)z"At present we're handling only PILLrY  r1   1rZ  r   rz   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 dictionaryrW   r^  r_  r   z> % end of image datar~   N)moder`  rL   r8   rJ  r9   rr   r^  ra  rb  r   rc  )rK   rW   rX   rY   r2   r3   imBitsPerComponentimNumComponentsre  imwidthimheightrh  ri  rj  rk  s                  r&   rU   zPSCanvas._drawImageLevel2~  s    ::s?!"OGZZ3mmC(GOGmmE*GO!"#LLEF		!#B'"6*, 	-
 a78!89  #H.@A	B 	D a_-aUV		w	S[\L7#% 	&
 Xwwy'AGOOwGWGWZ**84 [)	>>"%"nX&nnR(H "n 	01$r(   )),  ry  r0   )NNr   )r   )r   r   r   )r   r   )r   r   )r1   r1   )rY  rY  )r   r   r   )r   r1   r1   )r   r1   r1   N)3__name__
__module____qualname__rN   rR   rZ   r_   rh   rx   r|   r   r   rF   rG   r   rE   r   r   r   rH   rD   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r0  r4  r  r8  r:  r<  rG  r   rM  rO  rS  rW  rT   rb  rU    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                 V    t               }|j                  t        |       ||||       y)z
As it saysshowBoundaryN)_PSRendererdrawr   )drawingcanvasr   r   r  r"   s         r&   r  r    s%    AFFw'ALFQr(   c                 ~    g }|j                   }t        dt        |       d      D ]  } || |   | |dz      f        |S )zo
    given a list of coordinates [x0, y0, x1, y1....]
    produce a list of points [(x0,y0), (y1,y0),....]
    r   r0   r1   )r   ranger   )rr  Pr  r   s       r&   _pointsFromListr    sK    
 	A	A1SVA 	1Q4!A#-Hr(   c                   n    e Zd ZdZd Zddddddd	d
Zd Zd Zd Zd Z	d Z
d Zd Zd ZddZd Zd Zy)r  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                    | j                   j                  d|z         | j                   j                  }t        |t              r|j
                  s| j                   j                          t        |      }| j                  j                  |       | j                  |i        | j                  |       | j                  j                         }t        |t              r|j
                  s| j                   j                          | j                   j                  d|z         || j                   _        |j                         D ]8  \  }}|| j                  v st!        | j                   | j                  |   |       : y)zEThis is the recursive method called for each node
        in the treezbegin node %rzend node %rN)_canvasrR   rB   r   Path
isClipPathr|   r   _trackerpushapplyStateChangesdrawNodeDispatcherr5   r   items	_restoressetattr)rK   noder   deltasrDeltaskr   s          r&   drawNodez_PSRenderer.drawNode  s    	_T12##4&4??LL""$ t$6"vr* 	%--##%4&4??LL%%']4/0# MMO 	:DAqDNN"T^^A%6q9	:r(   r;   r=   r@   rA   r<   r>   r?   )r/   strokeWidthstrokeLineCapstrokeLineJoin	fillColorr-   r.   c                    |j                   |j                  cxk(  rdk(  rdn na| j                  j                  |j                  |j
                  |j                  |j                  z   |j
                  |j                  z          y | j                  j                  |j                  |j
                  |j                  |j                  z   |j
                  |j                  z   |j                   |j                         y )Nr   )	r   r   r  r   r   r   r2   r3   r  )rK   r   s     r&   drawRectz_PSRenderer.drawRect  s    77dgg""LLFFDFFFF4::%tvvdkk'9; LL""FFDFFFF4::%tvvdkk'9477DGGr(   c                     | j                   j                  rG| j                   j                  |j                  |j                  |j
                  |j                         y y r   )r  r;   r   rX   rY   r   r   )rK   r   s     r&   drawLinez_PSRenderer.drawLine
  s<    <<$$LLdggtwwA %r(   c                 z    | j                   j                  |j                  |j                  |j                         y r   )r  r  r  r  r  )rK   r  s     r&   
drawCirclez_PSRenderer.drawCircle  s$    VYY		688<r(   c           	         |j                         \  }}}|dk(  s||dk(  s|||j                  sp|j                  }|j                  }|j                  }|j
                  }|j                  }	||z
  }
| j                  j                  ||	z
  ||z
  ||	z   ||z   ||
d       y |j                         }t        |t              r| j                  |       y | j                  |       y )Nr   r1   )r  )
_xtraRadiiannularstartangledegreesendangledegreescenterxcenteryradiusr  r  	asPolygonr   r  drawPathdrawPolygon)rK   wedgeyradiusradius1yradius1r  r  r  r  r  r  r  s               r&   	drawWedgez_PSRenderer.drawWedge  s    %*%5%5%7"(QJ'/!x?OY^YfYf % 7 7#33O]]GmmG\\F$'88FLL  '&.RYZaRa!6a ! 9 !A!D!a   #r(   c                     | j                   j                  r/| j                   j                  t        |j                               y y r   )r  r;   r<  r  pointsrK   r)  s     r&   drawPolyLinez_PSRenderer.drawPolyLine#  s/    <<$$LL!!/!((";< %r(   c                    |j                   |j                  z
  }|j                   |j                  z   }|j                  |j                  z
  }|j                  |j                  z   }| j                  j                  ||||       y r   )r  r   r  r   r  r  )rK   r  rX   r   rY   r   s         r&   drawEllipsez_PSRenderer.drawEllipse'  sb    ZZ'**$ZZ'**$ZZ'**$ZZ'**$R2b)r(   c                 d    | j                   j                  t        |j                        d       y )Nr1   )r   )r  r   r  r  r  s     r&   r  z_PSRenderer.drawPolygon/  s"    _QXX6qAr(   c           	         t        |dd      }| j                  j                  s|r| j                  j	                         }|d   |j
                  |j                  |j                  f\  }}}}|dvra|d   |d   }	}t        |||	      }
|dk(  r||
z  }n?|dk(  r	||
d	z  z  }n1|d
k(  r|t        |||
||	d      z  }nt        dt        |      z         | j                  j                  ||||       y y )Nr   r   
textAnchor)r*  	inheritedr-   r.   r   r   r0   r   winansi)encodingzbad value for text_anchor r   )getattrr  r<   r  getStater   r   r   r   r   rV   r   r   )rK   	stringObjr   Sr   r   r   r   r   r.   r   s              r&   r   z_PSRenderer.drawString2  s     +;A><<""n&&(A&'oy{{9;;y~~&]#KAt"77!":*h%dD:%LA (*NA )+{4XW`aaA$%A#kBR%RSSLL##Aa^#L '5r(   Nc                 F   ddl m | j                  j                  j                  j
                  j                  ft        dd      }fd}t        dj                        j                  d u}j                  d u}j                  }fd}fd}	fd	}
|d
k(  r |         ||||       y |dk(  r/|r |d        ||||       y |s|r |         ||d|       y y |r |d      r |        y |s|r |         ||d|       y y )Nr   )_renderPath	autocloser   c                       fi | S r   r}  )kwdsr  	drawFuncspaths    r&   rPz _PSRenderer.drawPath.<locals>.rPI  s    tY7$77r(   rK  c                  .     j                   g fdi| S )NrK  r   )r  r%   rK  s    r&   <lambda>z&_PSRenderer.drawPath.<locals>.<lambda>P  s    -Q--bL8LtL r(   c                  ,     j                  g d      S )Nr   )r   rK  r  )r%   rK  s   r&   r  z&_PSRenderer.drawPath.<locals>.<lambda>Q  s    A,,RH,M r(   c                  *     j                  g d      S )Nr   )r   r  )r%   s   r&   r  z&_PSRenderer.drawPath.<locals>.<lambda>R  s    a..r.: r(   svg)r   r   rI  pdfT)
forceClose)	countOnly)reportlab.graphics.shapesr  r  r4  r  r8  r:  r  rJ   r<   r;   r  )rK   r  rK  r  r  r   r   rI  faspathFill
pathStroker  r%   r  s    ``        @@@r&   r  z_PSRenderer.drawPathD  s   9LLXXqxxAKK@	DR0		8tJq{{;H||4't+LM:
eDv4T2d#6t646qd3   T*46qd3  r(   c           
         |j                         D ]  \  }}|dk(  r3| j                  j                  |d   |d   |d   |d   |d   |d          ?|dk(  r| j                  j                  |       `|d	k(  r| j                  j	                  |       |d
k(  r| j                  j                  |       |dk(  r| j                  j                  |       |dk(  r|rht        |t        t        f      r2t        |      dk(  r$t        |d   t        t        f      r|d   }|d   }nd}| j                  j                  ||       2| j                  j                          N|dk(  r| j                  j                  |       p|dv sv|j                  d| j                  j                        }|j                  d| j                  j                        }| j                  j!                  ||        y)z\This takes a set of states, and outputs the operators
        needed to set those propertiesrS  r   r1   r0   r   r   r   r/   r  r  r  strokeDashArrayr  )r.   r-   r-   r.   N)r  r  rS  rE   rH   rF   rG   r   r   r   r   r   r   getr>   r?   rD   )rK   deltanewStatekeyvaluer   fontnamefontsizes           r&   r  z_PSRenderer.applyStateChangesd  s     ++- *	9JCk!&&uQxq58!&q58U1X?% ++E2%))%0'''.((((/))!%e5#e*a-JW\]^W_afgk`lLm %a %a !LL((u5LL((* # ))%0
 00 !99Z1C1CD 99Z1G1GH$$Xx8U*	9r(   c                     ddl m}  ||j                        }| j                  j	                  |j
                  |j                  |j                  |j                  |j                         y )Nr   )ImageReader)
ru   r  r  r  rZ   _imager   r   r2   r3   )rK   rW   r  ims       r&   rZ   z_PSRenderer.drawImage  sA    3$ryyU\\Rr(   r   )rz  r{  r|  __doc__r  r  r  r  r  r  r  r  r  r   r  r  rZ   r}  r(   r&   r  r    se    ::<  .\Zd!,QX&(IB=$$=*BM$4@-9^Sr(   r  c                     t        |       } t        | j                  | j                  f      }t	        | |dd|       |j                  |       y )Nr   r  )r   r*   r2   r3   r  rx   )rR  fnr  kwdr%   s        r&   
drawToFiler    s>    AA!''!((#$AAq!,/FF2Jr(   c                 R    t               }t        | ||       |j                         S )z=Returns a PS as a string in memory, without touching the diskr  )r   r  rm  )rR  r  r!   s      r&   drawToStringr    s!    	Aq!,/::<r(   epsoutc                 B   ddl m} ddlm} |j                  d d  }g d|j                  d d  	 dd l}|j                  j                  |       s|j                  |        g }t        |      D ]>  }|dd dk(  st        ||      } |       }	t        |dd      }
|j                  |	|
f       @ d}|D ]I  \  }}
| |j                  z   d	|z  z   }t        ||       |s|d
kD  rt        dt        |      z         |dz  }K 	 ||j                  d d  y # ||j                  d d  w xY w)Nr   )
testshapes)verbose)zTimes-Romanz
Times-BoldzTimes-ItaliczTimes-BoldItalicCourierr   
getDrawingr  r   zrenderPS_%d.epsr0   zrenderPS test saved %sr1   )reportlab.graphicsr  reportlab.rl_configr  _FONTSosr  isdirmkdirdirr  r   sepr  printr   )outDirshoutr  r  OLDFONTSr  drawingsfuncnamefuncr  	docstringr   rR  filenames                 r&   testr    s&   -+  #HdJa(ww}}V$HHVJ 	6H"~-z(3&#D26	) 45	6 & 	NQ	):1)<<Hq"	5)AE(O)S#TFA		  (
!x
!s   AD 7BD D__main__r1   T)r  )r  F)0__version__r  r  ior   r   reportlab.pdfbase.pdfmetricsr   r   r   ru   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'   re   r*   r  r  r  r  r  r  r  rz  sysr   argvoutdirr}  r(   r&   <module>r     sW   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(   