
    kf1                     |   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 ]YZ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<   K e e          ee<   Z[d Z!dZ" G d d          Z#	 ddlT ddej$        fdZ%d Z& G d de          Z'ej$        fdZ(ej$        fdZ)d%d Z*e+d!k    r7ddl,Z, e-e,j.                  d"k    re,j.        d"         Z/ndZ/ e*e/d#$           dS dS )&z3.3.0z$Render drawing objects in Postscript    N)BytesIOStringIO)getFontstringWidth
unicode2T1)asByteschar2intrawBytesasNative	isUnicode)fp_str)RenderergetStateDeltarenderScaledDrawing)STATE_DEFAULTS)	rl_config)FILL_EVEN_ODD          z\%03o\()c                     t          |           } g }|j        }d}| D ]L}t          t          |                   } ||           |t	          |          z  }|dk    rd} |d           Md                    |          S )Nr      z\
 )r   append_ESCAPEDICTr	   lenjoin)sRaRncs        [/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/graphics/renderPS.py_escape_and_limitr'      s    

A
A	
B	A  $
1	SVVc66ABvJJJ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                   \   e Zd Zd;dZd Zd<dZd Zd Zd=d	Zd
 Z	d Z
d<dZd Zd Zg dfdZd Zd Zd Zd Zd Zd=dZd Zd Zd>dZd>dZd?dZd@dZdAd Zd>d!ZdBd#ZdCd%Zd& Zd' Z dDd)Z!d* Z"dEd+Z#d<d,Z$d- Z%d. Z&d/ Z'd0 Z(d1 Z)d>d2Z*dFd3Z+d4 Z,d5 Z-d6 Z.d7 Z/d<d8Z0d9 Z1d<d:Z2dS )GPSCanvas,  r,      c                 ^   |\  | _         | _        g }|j        | _        |j        | _        d| _        g | _        | j        j        | _        d| _	        d x| _
        x| _        x| _        x| _        x| _        x| _        x| _        | _        g | _        |                     t(          d         t(          d                    |                     t(          d                    |                     d           |                     d           |                     d           || _        t4          | _        d S )Nr   
fontNamefontSizestrokeColorr-      )widthheightr   _xtraState_pushpop_xtraState_popcommentscodecode_append_sep_strokeColor
_fillColor
_lineWidth_font	_fontSize_lineCap	_lineJoin_color
_fontsUsedsetFontr   setStrokeColor
setLineCapsetLineJoinsetLineWidthPostScriptLevelr   	_fillMode)selfsizerK   	xtraStates       r&   __init__zPSCanvas.__init__[   s$   "&
DK	(/'m	9+	 ,0	0 	0DO 	0do 	0J	0	0*.-	0NT[^J/z0JKKKN=9:::!,&r(   c                 H    | j         r|                     d|z              d S d S )N%)r9   r;   )rM   msgs     r&   commentzPSCanvas.commentq   s-    =3$**3s73333333r(   Nc                     | j         dk    r|                     |||||           d S | j         dk    r|                     |||||           d S t          d| j         z            )Nr3   r-   zUnsupported Postscript Level %s)rK   _drawImageLevel1_drawImageLevel2
ValueError)rM   imagex1y1r4   r5   s         r&   	drawImagezPSCanvas.drawImaget   sy    ""!!%Bv>>>>>!1$$!!%R?????>AUUVVVr(   c                 0    |                      d           d S )Nshowpager;   rM   s    r&   clearzPSCanvas.clear}   s    $$$$$r(   c                 N   | j         sd S g }| j         D ]?}t          |          }|j        s'|j        dk    r|                    d|d|d           @|rP|                    dt                     | j                            d| j        	                    |                     d S d S )NWinAnsiEncodingzWinAnsiEncoding /z /z REr   r3   )
rE   r   _dynamicFontencNamer   insertPS_WinAnsiEncodingr:   r<   r    )rM   Cr0   fontObjs       r&   _t1_re_encodezPSCanvas._t1_re_encode   s    & 	N 	NHh''G' NGO=N,N,N888LMMM 	3HHQ)***IQ	q 1 122222	3 	3r(   c                    t          |d          st          |d          }n|}| j        d         dk    r|                                  | j                            dd| j        | j        fz             |                                  |                    t          | j
                            | j                                       ||ur*|                                 ddlm}  ||dd	
           d S d S )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openr:   ra   rf   r4   r5   rj   rl   r
   r<   r    closereportlab.lib.utilsro   )rM   f_fro   s       r&   savezPSCanvas.save   s   q!! 	aBBB9R=*$$djjlll	  z$+ 	  	  	  	
$)..3344555Q;;HHJJJ888888Lvv>>>>>> ;r(   c                 f    |                      | j        f           |                     d           d S )Ngsave)r6   _fontCodeLocr;   r`   s    r&   	saveStatezPSCanvas.saveState   s6    d/1222!!!!!r(   c                 f    |                      d           |                                 \  | _        d S )Ngrestore)r;   r8   r}   r`   s    r&   restoreStatezPSCanvas.restoreState   s3    $$$!0022r(   c                 H    |p| j         }|p| j        }t          |||          S )zlReturn the logical width of the string if it were drawn
        in the current font (defaults to self.font).)r@   rA   r   )rM   r!   fontr1   s       r&   r   zPSCanvas.stringWidth   s.     !tz-t~1dH---r(   c                 ^    | j         |k    r!|| _         |                     d|z             d S d S )Nz%d setlinecap)rB   r;   rM   vs     r&   rH   zPSCanvas.setLineCap   s=    =!DM_Q.///// r(   c                 ^    | j         |k    r!|| _         |                     d|z             d S d S )Nz%d setlinejoin)rC   r;   r   s     r&   rI   zPSCanvas.setLineJoin   s>    >1DN-a/00000 r(   r   c                 j   d}t          |t          t          f          r |                     d|d|d|           dS t          |t          t
          f          rX|dk    s
J d            d                    t          t          |                    }|                     d|d|d|           dS dS )	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)rM   arrayphasepsoperation	textarrays        r&   setDashzPSCanvas.setDash   s      eU3K(( 	Muuueee[[IJJJJJuTl++ 	MA:::@:::S%11IYYY{{KLLLLL	M 	Mr(   c                 >    || _         |                     |           d S N)r=   setColorrM   colors     r&   rG   zPSCanvas.setStrokeColor   s"    !er(   c           	      >   | j         |k    r|| _         |rt          |d          r>|                     dt          |j        |j        |j        |j                  z             d S |                     dt          |j        |j	        |j
                  z             d S d S d S )Ncyanz%s setcmykcolorz%s setrgbcolor)rD   rt   r;   r   r   magentayellowblackredgreenbluer   s     r&   r   zPSCanvas.setColor   s    ;DK d5&)) d$$%6
EM[`[ginit9u9u%uvvvvv$$%5uy%+W\Wa8b8b%bccccc d dr(   c                 >    || _         |                     |           d S r   )r>   r   r   s     r&   setFillColorzPSCanvas.setFillColor   s!    er(   c                     || _         d S r   )rL   r   s     r&   setFillModezPSCanvas.setFillMode   s    r(   c                 ^    || j         k    r!|| _         |                     d|z             d S d S )Nz%s setlinewidth)r?   r;   )rM   r4   s     r&   rJ   zPSCanvas.setLineWidth   s>    DO###DO.677777 $#r(   c                     | j         |k    s| j        |k    r>t          | j                  | _        || _         || _        |                     d           d S d S )Nr   )r@   rA   r   r:   r}   r;   )rM   r   r1   leadings       r&   rF   zPSCanvas.setFont   s[    :tt~x77 #DIDDJ%DNR     	  87r(   c                     | j         d k    rS|                     | j                    |                     t          ||          dt          ||          d           d S d S )Nz m z	 l stroke)r=   r   r;   r   rM   rZ   r[   x2y2s        r&   linezPSCanvas.line   sd    $$MM$+,,,6"b>>>>6"b>>>>RSSSSS %$r(   c                 j    	 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'   rX   ascii)rM   r!   s     r&   _escapezPSCanvas._escape   s8    
	<$Q'''	</%((:;;;s    !2c                    |dk    rd S t          ||          }|                     |          }|dk    r7|                     | j                   |                     |d|d           d S |dk    p|dk    p|dk    p|dk    }|dk    p|dk    p|d	k    p|dk    }|dk    }|r|r| j        d
}	nd}	|                     | j                   |                     |d|d|	           |                     d           | j        1|                     | j                   |                     d           d S d S |                     | j                   |                     |d|d           d S )N   r   z m (z) show r-         r3      r   zfill z) true charpath gsave z	grestore zstroke z) true charpath stroke )r   r   r   r>   r;   r=   )
rM   xyr!   textRenderModexyfillstroke	addToClipops
             r&   _textOutzPSCanvas._textOut   s   1ffAa[[LLOO1MM$/***"""QQQ7888Fq _NA$5_9J_n^_N_"ana&7a>1;LaP^`aPa"A%	 	IF 	I&do...222aaaKLLL[))) ,d/000  +++++ -, MM$+,,,"""QQQGHHHHHr(   c                 R   |}| j         }| j        }| j        }	| j        }
t	          |          s	 |                    d          }nr# t          $ re}|j        dd         \  }}t          |j        d d         |j        d         d||dz
  |         d|||         d|||dz            fz    d }~ww xY wt          ||g|j	        z             D ]\  }}||k    rSt          |j        j                  } |d|d	t          |          d
           ||	vr|	                    |           |}|                     ||||           ||                    |                    |j                  |          z  }||k    r)d | _        |                     |j        j        |           d S d S )Nutf8r-   r   r/   
   z-->z<--r   ) findfont  scalefont setfont)r;   rA   rE   r   r   decodeUnicodeDecodeErrorargsr   substitutionFontsr   facenamer   r   r   r   re   r@   rF   )rM   ri   r   r   r!   r   fcr;   r1   	fontsUsedescapeeijrx   tpsNames                    r&   _issueT1StringzPSCanvas._issueT1String  s   &>O	|| 	wwHHV$$% w w wfQqSk!(16"1":QVTUYYYWXYZ[]Y]^_Y_W`W`W`abcdefcfagagaghijklmnplpjphqhq7r6t+tvvw q'7+D!DEE 	= 	=DAq"uu!!&+..FFF6RZK[K[K[K[\]]]**$$V,,,MM!Aa///qxx	228<<<AAB;;DJLL*844444 ;s   A 
B4A B//B4leftc                 f   |dv }|dv }|s|r|dk    r\t          || j        | j                  }	|dk    r||	z  }n5|dk    r	||	dz  z  }n&|dk    r |t          |||	| j        | j                  z  }t	          | j                  }
| j        | j                 sdt          |
j        j	                  }d|d	t          | j                  d
| j        | j        <   || j        vr| j                            |           |dk    r;|                     dt          ||          dt          |          d           dx}}| j        }|
j        r|                     ||||           n|                     |
||||           |                     |           |dk    r|                     d           d S d S d S )N)r   r-   r   r   )r3   r-   r   r   r   endmiddle       @numericr   r   r   r   zgsave z translate z rotater   r   )r   r@   rA   numericXShiftr   r:   r}   r   r   r   r   rE   r   r;   rD   rd   r   r   r   )rM   r   r   r!   angletext_anchorr   needFill
needStroketextLenri   r   oldColors                r&   
drawStringzPSCanvas.drawString+  s   !Y.#y0
 	-z 	-F""%aDNCC%%LAA (**OAA )++{1WTZWWWAdj))G9T./ 3!',"344U[U[U[\bcgcq\r\r\r\r-s	$+,00O**6222axx   6!A;;;;vV[}}}}!]^^^	A{H# RaAnEEEE##GAa.#QQQMM(###axx  ,,,,,3	- 	-0 xr(   r   c                 :    |                      |||||           d S N)r   r   r   )rM   r   r   textr   r   s         r&   drawCentredStringzPSCanvas.drawCentredStringI  s$    OOAa+nO]]]]]r(   r   c                 :    |                      |||||           d S r   r   )rM   r   r   r   r   r   s         r&   drawRightStringzPSCanvas.drawRightStringL  s$    Qq[XXXXXr(   c
           	      d   d}
t          ||          t          ||||||          f}| j        d k    r5|                     | j                   |                     |
|z  dz              | j        d k    r>|                     | j                   |                     |
|z  |	rdpdz   dz              d S d S )Nz%s m %s curvetoz eofillz
 closepathr   z stroke)r   r>   r   r;   r=   )rM   rZ   r[   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(   r3   c                     t          ||          t          ||          }}t          ||          t          ||          }}|                     ||f||f||f||ffd||           dS )z)Draw a rectangle between x1,y1, and x2,y2r3   )r   r   r   N)minmaxpolygon)rM   rZ   r[   r   r   r   r   s          r&   rectzPSCanvas.rect]  sp     RSR[[BRSR[[Br"gr"gr"gr"g6qX\]]]]]r(      c           	         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           |                     |           d	S )
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)
rM   rZ   r[   r   r   rxryellipsePathrras
             r&   	roundRectzPSCanvas.roundRecte  s%    RSR[[BRSR[[B c [I	+B2rB3C8
8999	+B2rB3S9
9:::	+B2rB3S9
9:::	+B2rB3B7
7999	+Br(   c                 6    |                      ||||           dS )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                 N    |                      ||z
  ||z
  ||z   ||z              d S r   )r
  )rM   xcycrs       r&   circlezPSCanvas.circle  s0    RT"Q$1RT*****r(   r   c                    ||z   dz  ||z   dz  }	}||z
  dz  ||z
  dz  }}
|                      ||||||          }t          j        |z  dz  }t          j        |z  dz  }||z   }d}| j        dk    r|                     | j                   |                     |           d}| j        dk    r|                     d           |                     ||	           |                     d           | j        dk    r|                     d           | j        dk    r|                     | j                   ||
t          j        |          z  z   |	|t          j	        |          z  z   }}|s|                     |           |rA|                     ||	           |                     ||           |                     d	           |                     d
           dS dS )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   Nr3   r|   eofillr   r   r   )
_genArcCodemathpir>   r   r;   r=   lineTocossin)rM   rZ   r[   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E GH,U2u,+m; ?d""MM$/***X&&&  $&&(8(8(A(A(AKK2X&&& $&&(8(8(D(D(D $$MM$+,,, "2dh/@&A&A#A A2bRcIdIdFdCdVV# +  *** .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)rM   rZ   r[   r   r   r  r  xScaleyScaler   r   r   r$  r   s                 r&   r  zPSCanvas._genArcCode  s     beS[!!beS[!!2s{RUCK1^Q;;CCC!VVXxD$r(   c                 6   t          |          dk    s
J d            |d         }|dd          }g }|j        } |dt          |          z             |D ]} |dt          |          z             |r |d           |                     |||           d S )	Nr-   z"Polygon must have 2 or more pointsr   r3   %s m%s lr   )r   r   )r   r   r   r  )	rM   pr   r   r   startpolyr  points	            r&   r   zPSCanvas.polygon  s    1vv{{{@{{{!abbEK	&6%==
 !!! 	& 	&EAfve}}$%%%% 	AkNNNDD99999r(   c           	          | j         d k    ra|                     | j                    d}|D ]D}|                     |t          |d                   t          |d                   fz             Cd S d S )Nz%s m %s l stroker   r3   )r=   	_setColorr;   r   )rM   lineListr   r4   r   r   s         r&   lineszPSCanvas.lines  s    $$NN4,---)H  O O  VDG__VDG__,M!MNNNN	 %$O Or(   c                 R    |                      dt          ||          z             d S )Nr*  r;   r   rM   r   r   s      r&   moveTozPSCanvas.moveTo  )    &A,,./////r(   c                 R    |                      dt          ||          z             d S )Nr+  r5  r6  s      r&   r  zPSCanvas.lineTo  r8  r(   c                 Z    |                      dt          ||||||          z             d S )Nz%s cr5  )rM   rZ   r[   r   r   r   r   s          r&   curveTozPSCanvas.curveTo  s3    &Br"R";";;<<<<<r(   c                 0    |                      d           d S )Nr   r_   r`   s    r&   	closePathzPSCanvas.closePath  s    %%%%%r(   c                 r   t          |          dk    s
J d            | j        d k    r|                     | j                   |                     |d         d         |d         d                    |dd          D ]$}|                     |d         |d                    %|                     d           d S d S )Nr3   z#Polyline must have 1 or more pointsr   r   )r   r=   r   r7  r  r;   )rM   r,  r   s      r&   polyLinezPSCanvas.polyLine  s    1vv{{{A{{{$$MM$+,,,KK!Q1a)))qrrU ( (AaD!A$''''X&&&&& %$r(   c                 :   g }|j         }d}|D ]i}|d         }t          |dd                    }|t          k    ro|r&d} |dt          |d d                   z             n# |dt          |d d                   z              |dt          |dd                    z             |t          k    r7d}|d d         \  }	}
}}}} ||                     |	|
||||                     |t          k    rp|r&d} |dt          |d d                   z             n# |dt          |d d                   z              |dt          |dd                    z             Yt          d|z             |r |d	           |                     |           d S )
Nr3   r   r*  r-   r+  r   z
%s curvetozunknown figure operator: r   )	r   r   
figureLiner   	figureArcr  figureCurve	TypeErrorr  )rM   partListr   
figureCoder  firstpartr   r   rZ   r[   r   r   
startAngler  s                  r&   
drawFigurezPSCanvas.drawFigure  s   
 	@ 	@DaBQRR>>DZ 1EAfvd2A2h///0000Afvd2A2h///000&6$qrr(+++,,,,y04RaR-2bJv$""2bBz&AABBBB{"" 1EAfvd2A2h///0000Afvd2A2h///000,QRR!1!112222 ;B >??? 	AkNNNJ'''''r(   c                 |   | j         o|}| j        o|}|s|s|r | j                            |           |rw|| j        }|s|r|                     d           |                     | j                    |                     |t          k    rdnd           |s|r|                     d           |r]|r|                     d           |                     | j                   |                     d           |r|                     d           |r.|                     d           |                     d           d S d S d S )Nr|   r  r   r   r   clipr   )r>   r=   r:   extendrL   r;   r   r   )rM   r:   rL  r   r   fillModes         r&   r  zPSCanvas._fillAndStroke  s|   '4"-v 	,6 	,T 	,IT""" @##~H<T<4#3#3G#<#<#<do...  X}-D-D&QQQ?T?4#3#3J#?#?#? 62))'222d/000  ***5))*555 ,  (((  +++++!	, 	,, ,r(   c                 R    |                      dt          ||          z             d S )Nz%s translater5  r6  s      r&   	translatezPSCanvas.translate,  s)    &1++566666r(   c                 R    |                      dt          ||          z             d S )Nz%s scaler5  r6  s      r&   scalezPSCanvas.scale/  s)    fQqkk122222r(   c                 Z    |                      dt          ||||||          z             d S )Nz[%s] concatr5  )rM   r  br%   dr   rx   s          r&   	transformzPSCanvas.transform2  s3    !Aa!)<)<<=====r(   c                 $    ||c| _         | _        dS )z1if this is used we're probably in the wrong worldN)r4   r5   )rM   whs      r&   _drawTimeResizezPSCanvas._drawTimeResize5  s    "#Q
DKKKr(   c                    d}|                     d          }|j        \  }}	|s|}|s|	}| j                            d|d|d|d|dd|z  g           | j                            |d|	d|d|dd	dd	d|	 dd	d|	d
ddg            t	          |d          r|j        n|j                    }
|                     |
          }t          |          }|	                    d          }|dk    r0| 
                    |           |	                    d          }|dk    0| 
                    d           | 
                    d           d S )Nr   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   )convertrN   r:   rM  rt   r`  tostring_AsciiHexEncoder   readr;   )rM   rY   rZ   r[   r4   r5   component_depthmyimageimgwidth	imgheightrawimagehex_encoded	outstreamdatalines                 r&   rV   zPSCanvas._drawImageLevel19  s    --&&%l) 	E 	F& 		!#BBB'"UU666*+h6	 	 	 	 		"((III??%-XXqqq!!!iZZZIIIN@	 	 	 	 Xwwy'A'AWGOOwGWZZ**844 [))	>>"%%"nnX&&&nnR((H "nn 	.///$$$$$r(   c                     t                      }t          |          D ]'}|                    dt          |          z             (|                                S )zHelper function used by imagesz%02x)r   r   rl   r	   getvalue)rM   inputoutputchars       r&   rd  zPSCanvas._AsciiHexEncodew  sP    ENN 	2 	2DLL(4..01111   r(   c           	         |j         dk    rd}d}|}n>|j         dk    r|                    d          }d}|}n|                    d          }d}d}|j        \  }	}
|s|	}|s|
}| j                            d|d|d	|d|d
g           |dk    r|                     d           n|dk    r|                     d           |                     d|	|
|fz             |dk    r|                     d           |dk    r|                     d           | j                            d|	d|
 d|
ddddg            t          |d          r|j        n|j                    }| 	                    |          }t          |          }|                    d          }|dk    r0|                     |           |                    d          }|dk    0|                     d           |                     d           dS )z"At present we're handling only PILLr   r3   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 dictionaryrY   r`  ra  r   z> % end of image datar   N)moderb  rN   r:   rM  r;   rt   r`  rc  rd  r   re  )rM   rY   rZ   r[   r4   r5   imBitsPerComponentimNumComponentsrg  imwidthimheightrj  rk  rl  rm  s                  r&   rW   zPSCanvas._drawImageLevel2~  s    :s??!"OGGZ3mmC((GOGGmmE**GO!"#L 	E 	F	!#BBB'"UU666*, 	- 	- 	-
 a78888!!8999  #H.@A	B 	D 	D 	D a_---aUVVV	www			S[S[S[\L7#% 	& 	& 	&
 Xwwy'A'AWGOOwGWZZ**844 [))	>>"%%"nnX&&&nnR((H "nn 	0111$$$$$r(   )r+   r-   )NNr   )r   )r   r   r   )r   r   )r   r   )r3   r3   )r   r   )r   r   r   )r   r3   r3   )r   r3   r3   N)3__name__
__module____qualname__rP   rT   r\   ra   rj   rz   r~   r   r   rH   rI   r   rG   r   r   r   rJ   rF   r   r   r   r   r   r   r   r   r   r  r
  r  r	  r  r   r3  r7  r  r;  r=  r?  rJ  r  rP  rR  rV  rZ  rV   rd  rW    r(   r&   r*   r*   Z   sy       ' ' ' ',4 4 4W W W W% % %
3 
3 
3? ? ? ?," " "3 3 3. . . .0 0 0
1 1 1
 a 	M 	M 	M 	M  d d d    8 8 8
! ! ! !T T T
< < <I I I I85 5 5 54- - - -<^ ^ ^ ^Y Y Y Y
) 
) 
) 
)^ ^ ^ ^       8# # #+ + +)' )' )' )'V  $: : : : O O O O0 0 00 0 0= = =& & &' ' '"( "( "( "(H, , , ,*7 7 73 3 3> > >' ' ';% ;% ;% ;%|! ! !:% :% :% :% :% :%r(   r*   )*c                 p    t                      }|                    t          |           ||||           dS )z
As it saysshowBoundaryN)_PSRendererdrawr   )drawingcanvasr   r   r  r"   s         r&   r  r    s6    AFFw''ALFQQQQ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   r-   r3   )r   ranger   )rt  Pr  r   s       r&   _pointsFromListr    sY    
 	A	A1SVVA  	1Q4!A#-Hr(   c                   p    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dS )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                             d|z             | j         j        }t          |t                    r|j        s| j                                          t          |          }| j        	                    |           | 
                    |i            |                     |           | j                                        }t          |t                    r|j        s| j                                          | j                             d|z             || j         _        |                                D ]/\  }}|| j        v r!t!          | j         | j        |         |           0dS )zEThis is the recursive method called for each node
        in the treezbegin node %rzend node %rN)_canvasrT   rD   r   Path
isClipPathr~   r   _trackerpushapplyStateChangesdrawNodeDispatcherr7   r   items	_restoressetattr)rM   noder   deltasrDeltaskr   s          r&   drawNodez_PSRenderer.drawNode  s`    	_T1222#4&& 	%4? 	%L""$$$ t$$6"""vr*** 	%%%-##%%4&& 	(4? 	(L%%''']4/000# MMOO 	: 	:DAqDN""T^A%6q999	: 	:r(   r=   r?   rB   rC   r>   r@   rA   )r2   strokeWidthstrokeLineCapstrokeLineJoin	fillColorr0   r1   c                 Z   |j         |j        cxk    rdk    rFn nC| j                            |j        |j        |j        |j        z   |j        |j        z              d S | j                            |j        |j        |j        |j        z   |j        |j        z   |j         |j                   d S )Nr   )	r  r  r  r   r   r   r4   r5   r  )rM   r   s     r&   drawRectz_PSRenderer.drawRect  s    7dg"""""""""LFDFF4:%tvdk'9; ; ; ; ; L""FDFF4:%tvdk'947DG    r(   c                     | j         j        r3| j                             |j        |j        |j        |j                   d S d S r   )r  r=   r   rZ   r[   r   r   )rM   r   s     r&   drawLinez_PSRenderer.drawLine
  sF    <$ 	BLdgtwAAAAA	B 	Br(   c                 \    | j                             |j        |j        |j                   d S r   )r  r  r  r  r  )rM   r  s     r&   
drawCirclez_PSRenderer.drawCircle  s(    VY	68<<<<<r(   c           	         |                                 \  }}}|dk    s|f|dk    s|^|j        sW|j        }|j        }|j        }|j        }|j        }	||z
  }
| j                            ||	z
  ||z
  ||	z   ||z   ||
d           d S |	                                }t          |t                    r|                     |           d S |                     |           d S )Nr   r3   )r  )
_xtraRadiiannularstartangledegreesendangledegreescenterxcenteryradiusr  r	  	asPolygonr   r  drawPathdrawPolygon)rM   wedgeyradiusradius1yradius1r  r  r  r  r  r  r  s               r&   	drawWedgez_PSRenderer.drawWedge  s   %*%5%5%7%7"(QJJ'/!x?OY^Yf?O % 7#3O]GmG\F$'88FL  '&.RYZaRa!6a ! 9 9 9 9 9 !!A!D!! $a       #####r(   c                 z    | j         j        r.| j                             t          |j                             d S d S r   )r  r=   r?  r  pointsrM   r,  s     r&   drawPolyLinez_PSRenderer.drawPolyLine#  s?    <$ 	=L!!/!(";";<<<<<	= 	=r(   c                     |j         |j        z
  }|j         |j        z   }|j        |j        z
  }|j        |j        z   }| j                            ||||           d S r   )r  r  r  r  r  r
  )rM   r
  rZ   r   r[   r   s         r&   drawEllipsez_PSRenderer.drawEllipse'  s\    Z'*$Z'*$Z'*$Z'*$R2b)))))r(   c                 b    | j                             t          |j                  d           d S )Nr3   )r   )r  r   r  r  r  s     r&   r  z_PSRenderer.drawPolygon/  s-    _QX66qAAAAAr(   c           	         t          |dd          }| j        j        s|r| j                                        }|d         |j        |j        |j        f\  }}}}|dvrz|d         |d         }	}t          |||	          }
|dk    r||
z  }nM|dk    r	||
d	z  z  }n>|d
k    r|t          |||
||	d          z  }nt          dt          |          z             | j                            ||||           d S d S )Nr   r   
textAnchor)r-  	inheritedr0   r1   r   r   r-   r   winansi)encodingzbad value for text_anchor r   )getattrr  r>   r  getStater   r   r   r   r   rX   r   r   )rM   	stringObjr   Sr   r   r   r   r   r1   r   s              r&   r   z_PSRenderer.drawString2  s6    +;A>><" 	Mn 	M&&((A&'oy{9;y~&]#KAt"777!":*h%dD::%%LAA (**NAA )++{4XW`aaaaAA$%A#kBRBR%RSSSL##Aa^#LLLLL	M 	Mr(   Nc                 J   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 |              ||||           d S |dk    r>|r |d            ||||           d S |s|r |              ||d|           d S d S |r |d          r |             d S |s|r |              ||d|           d S d S )Nr   )_renderPath	autocloser   c                       fi | S r   r~  )kwdsr  	drawFuncspaths    r&   rPz _PSRenderer.drawPath.<locals>.rPI  s    ;tY77$777r(   rN  c                  $     j         g fdi| S )NrN  r  )r  r%   rN  s    r&   <lambda>z&_PSRenderer.drawPath.<locals>.<lambda>P  s"    -Q-bLL8LtLL r(   c                  4                          g d          S )Nr   )r   rN  r  )r%   rN  s   r&   r  z&_PSRenderer.drawPath.<locals>.<lambda>Q  s    A,,RH,MM r(   c                  2                          g d          S )Nr   )r   r  )r%   s   r&   r  z&_PSRenderer.drawPath.<locals>.<lambda>R  s    a..r.:: r(   svg)r   r   rL  pdfT)
forceClose)	countOnly)reportlab.graphics.shapesr  r  r7  r  r;  r=  r  rL   r>   r=   r  )rM   r  rN  r  r  r   r   rL  faspathFill
pathStroker  r%   r  s    ``        @@@r&   r  z_PSRenderer.drawPathD  s   999999LXqxAK@	DR00		8 	8 	8 	8 	8 	8 	8tJq{;;H|4't+LLLLLMMMMM::::
eBDDDCv4T222222 4d####6t666666 44 46qd3333334 4  4T*** 4 44 46qd3333334 4r(   c           
      $   |                                 D ]\  }}|dk    rD| j                            |d         |d         |d         |d         |d         |d                    P|dk    r| j                            |           q|d	k    r| j                            |           |d
k    r| j                            |           |dk    r| j                            |           |dk    r|rt          |t          t          f          rFt          |          dk    r3t          |d         t          t          f          r|d         }|d         }nd}| j                            ||           ]| j                                         x|dk    r| j                            |           |dv r[|                    d| j        j                  }|                    d| j        j                  }| j                            ||           dS )z\This takes a set of states, and outputs the operators
        needed to set those propertiesrV  r   r3   r-   r   r   r   r2   r  r  r  strokeDashArrayr  )r1   r0   r0   r1   N)r  r  rV  rG   rJ   rH   rI   r   r   r   r   r   r   getr@   rA   rF   )rM   deltanewStatekeyvaluer   fontnamefontsizes           r&   r  z_PSRenderer.applyStateChangesd  s,     ++-- *	9 *	9JCk!!&&uQxq58!&q58U1X? ? ? ?%% ++E2222%%))%0000''''....(((((////))) +!%e55 "#e**a--JW\]^W_afgk`lLmLm- %a %a !L((u5555L((**** ## ))%0000
 000 !99Z1CDD 99Z1GHH$$Xx888U*	9 *	9r(   c                     ddl m}  ||j                  }| j                            |j        |j        |j        |j        |j	                   d S )Nr   )ImageReader)
rw   r  r  r  r\   _imager   r   r4   r5   )rM   rY   r  ims       r&   r\   z_PSRenderer.drawImage  sS    333333[$$ryU\RRRRRr(   r   )r{  r|  r}  __doc__r  r  r  r  r  r  r  r  r  r   r  r  r\   r~  r(   r&   r  r    s       : :: : :<  .\Zd!,QX&( (I  B B B= = =$ $ $$= = =* * *B B BM M M$4 4 4 4@-9 -9 -9^S S S S Sr(   r  c                     t          |           } t          | j        | j        f          }t	          | |dd|           |                    |           d S )Nr   r  )r   r*   r4   r5   r  rz   )rU  fnr  kwdr%   s        r&   
drawToFiler    sQ    AA!'!(#$$AAq!,////FF2JJJJJr(   c                 j    t                      }t          | ||           |                                S )z=Returns a PS as a string in memory, without touching the diskr  )r   r  ro  )rU  r  r!   s      r&   drawToStringr    s.    		Aq!,////::<<r(   epsoutFc                 p   ddl m} ddlm} |j        d d          }g d|j        d d <   	 dd l}|j                            |           s|                    |            g }t          |          D ]R}|dd         dk    rBt          ||          } |            }	t          |dd          }
|                    |	|
f           Sd}|D ]Q\  }}
| |j        z   d	|z  z   }t          ||           |s|d
k    rt          dt          |          z             |dz  }R	 ||j        d d <   d S # ||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.epsr-   zrenderPS test saved %sr3   )reportlab.graphicsr  reportlab.rl_configr  _FONTSosr  isdirmkdirdirr  r   sepr  printr   )outDirshoutr  r  OLDFONTSr  drawingsfuncnamefuncr  	docstringr   rU  filenames                 r&   testr    s   ------++++++ #HdddJaaa(			w}}V$$ 	HHVJ 	6 	6H"~--z(33$&&#D266	) 4555& 	 	NQ	):1)<<Hq"""T		5)AE(OO)S#T#T#TFAA		  (
!!!x
!!!''''s   C-D' 'D5__main__r3   T)r  )r  F)0__version__r  r  ior   r   reportlab.pdfbase.pdfmetricsr   r   r   rw   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'   rg   r*   r  r  r  r  r  r  r  r{  sysr   argvoutdirr~  r(   r&   <module>r     s   2                  I I I I I I I I I I P P P P P P P P P P P P P P ) ) ) ) ) ) V V V V V V V V V V 4 4 4 4 4 4       1 1 1 1 1 1	s    Attq#vv 1A	
ss4yyS##c((+	+	+cc!ffAQA   - ^^	% ^	% ^	% ^	% ^	% ^	% ^	% ^	%B1 ( ' ' ' 1G R R R R
	 	 	AS AS AS AS AS( AS AS ASF #,"8     "+!7    ( ( ( (: ZJJJ
s38}}Q!Dd r(   