
    Q?h=                       S r SrSSKrSSKJrJr  SSK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JrJr  SS
KJr  SSKJr  SSKJr  SSKJrJrJrJr  SR?                  5       r  " S S5      r! " S S5      r" " S S\"5      r#S r$SS jr%Sr&S r'S r( " S S\"5      r) " S S\"5      r* " S S\"5      r+ " S  S!\+5      r, " S" S#\+5      r- " S$ S%\-5      r. " S& S'\.5      r/ " S( S)\.5      r0 " S* S+\,5      r1SS, jr2S- r3 " S. S/5      r4 " S0 S1\4\"5      r5 " S2 S3\55      r6 " S4 S5\"5      r7S6 r8 " S7 S8\"5      r9 " S9 S:\"5      r: " S; S<\+5      r; " S= S>\"5      r< " S? S@\"5      r= " SA SB5      r>SC r? " SD SE\45      r@ " SF SG\@\"5      rASH rBSI rC " SJ SK\@\"5      rD " SL SM\"5      rE " SN SO5      rF " SP SQ\@\F\"5      rG " SR SS\+5      rH " ST SU\+5      rI " SV SW\+5      rJ " SX SY\F\+5      rK " SZ S[\,5      rL " S\ S]\5      rM " S^ S_\L5      rN " S` Sa\+5      rOSSbKPJQrQ  \R" ScSdSeSfSgShSiSjSkSlSm9
rSSSn jrT " So Sp5      rUSq rV " Sr Ss\"5      rW " St Su\W5      rXSSvKJYrY   " Sw Sx5      rZ " Sy Sz5      r[ " S{ S|\@\"5      r\ " S} S~\"5      r] " S S\+5      r^ " S S\^5      r_ " S S\^5      r` " S S\`5      ra " S S\`5      rb " S S\b5      rc " S S\+5      rd " S S\+5      reg)z3.3.0a  
A flowable is a "floating element" in a document whose exact position is determined by the
other elements that precede it, such as a paragraph, a diagram interspersed between paragraphs,
a section header, etcetera.  Examples of non-flowables include page numbering annotations,
headers, footers, fixed diagrams or logos, among others.

Flowables are defined here as objects which know how to determine their size and which
can draw themselves onto a page with respect to a relative "origin" position determined
at a higher level. The object's draw() method should assume that (0,0) corresponds to the
bottom left corner of the enclosing rectangle that will contain the object. The attributes
vAlign and hAlign may be used by 'packers' as hints as to how the object should be placed.

Some Flowables also know how to "split themselves".  For example a
long paragraph might split itself between one page and the next.

Packers should set the canv attribute during wrap, split & draw operations to allow
the flowable to work out sizes etc in the proper context.

The "text" of a document usually consists mainly of a sequence of flowables which
flow into a document from top to bottom (with column and page breaks controlled by
higher level components).
    N)deepcopycopy)gray	lightgrey)fp_str)TA_LEFT	TA_CENTERTA_RIGHT)_baseFontName)strTypesrl_safe_execannotateException)ABag)pdfutils)stringWidth)_FUZZoverlapAttachedSpaceignoreContainerActionslistWrapOnFakeWidtha  AnchorFlowable BalancedColumns BulletDrawer CallerMacro CondPageBreak DDIndenter DocAssert
        DocAssign DocExec DocIf DocPara DocWhile FailOnDraw FailOnWrap Flowable FrameBG FrameSplitter
        HRFlowable Image ImageAndFlowables KeepInFrame KeepTogether LIIndenter ListFlowable ListItem
        Macro NullDraw PTOContainer PageBreak PageBreakIfNotEmpty ParagraphAndImage Preformatted
        SetPageTopFlowables SetTopFlowables SlowPageBreak Spacer TopPadder TraceInfo UseUpSpace XBox
        splitLine splitLines PlacedStoryc                       \ rS rSrSrS rSrg)	TraceInfo.   z0Holder for info about where an object originatedc                 J    SU l         SU l        SU l        SU l        SU l        g )Nz	(unknown))srcFilestartLineNostartLinePos	endLineNo
endLinePosselfs    N/var/www/html/env/lib/python3.13/site-packages/reportlab/platypus/flowables.py__init__TraceInfo.__init__0   s'    "    )r   r   r   r   r   N__name__
__module____qualname____firstlineno____doc__r#   __static_attributes__ r%   r"   r   r   .   s
    6r%   r   c                       \ rS rSrSrSrSrS rS rSS jr	SS jr
S rS	 rS
 rS rS rS rS rS rS rSS jr\S 5       rS rS rSrg)Flowable=   zAbstract base class for things to be drawn.  Key concepts:

1. It knows its size
2. It draws in its own coordinate system (this requires the
   base API to provide a translate() function.

r   c                 t    SU l         SU l        SU l        SU l        SU l        S U l        S U l        S U l        g )Nr   LEFTBOTTOM)widthheightwrappedhAlignvAlign
_traceInfo_showBoundaryencodingr    s    r"   r#   Flowable.__init__H   sA    
  !
 r%   c                 4    Xl         U R                  5         U ? g)z#ensure canv is set on and then drawN)canvdrawr!   r>   s     r"   _drawOnFlowable._drawOnZ   s    			Ir%   c                     U(       ai  [        U S5      (       aX  U R                  nUSS[        4;   a
  USU-  -  nU$ US[        4;   a  X-  nU$ US[        4;  a  [        S[        U5      -   5      eU$ )Nr7   CENTERCENTRE      ?RIGHTr2   zBad hAlign value )hasattrr7   r	   r
   r   
ValueErrorstr)r!   xsWas       r"   _hAlignAdjustFlowable._hAlignAdjust`   s    '$x((AXh	22SV
 	 wx((  6'** !4SV!;<<r%   c                 h   U R                  X$5      nUR                  5         UR                  X#5        U R                  U5        [	        U S5      (       aN  U R
                  (       a=  UR                  [        5        UR                  SSU R                  U R                  5        UR                  5         g)z6Tell it to draw itself on the canvas.  Do not overrider:   r   N)rN   	saveState	translaterA   rH   r:   setStrokeColorr   rectr4   r5   restoreStater!   canvasrK   y_sWs        r"   drawOnFlowable.drawOnk   s    q%V4))d.@.@!!$'KK!DJJ4r%   c                 >    Xl         U R                  X#5      u  pEU ? XE4$ )zOintended for use by packers allows setting the canvas on
during the actual wrap)r>   wrap)r!   r>   aWaHwhs         r"   wrapOnFlowable.wrapOnw   s%     	yyItr%   c                 2    U R                   U R                  4$ )zThis will be called by the enclosing frame before objects
are asked their size, drawn or whatever.  It returns the
size actually used.r4   r5   r!   
availWidthavailHeights      r"   r]   Flowable.wrap   s     

DKK((r%   c                 0    [        U SU R                  5      $ )z-This should return the minimum required width	_minWidth)getattrr4   r    s    r"   minWidthFlowable.minWidth   s    tK

33r%   c                 8    Xl         U R                  X#5      nU ? U$ )zPintended for use by packers allows setting the canvas on
during the actual split)r>   split)r!   r>   r^   r_   Ss        r"   splitOnFlowable.splitOn   s!     	JJrIr%   c                     / $ )aG  This will be called by more sophisticated frames when
wrap fails. Stupid flowables should return []. Clever flowables
should split themselves and return a list of flowables.
If they decide that nothing useful can be fitted in the
available space (e.g. if you have a table and not enough
space for the first row), also return []r-   )r!   rg   availheights      r"   rp   Flowable.split   s	     	r%   c                     [        U S5      (       a  U R                  $ [        U S5      (       a1  [        U R                  S5      (       a  U R                  R                  $ g)zOreturns boolean determining whether the next flowable should stay with this onekeepWithNextstyler   )rH   rx   ry   r    s    r"   getKeepWithNextFlowable.getKeepWithNext   sL    4''0A0A)AT'""wtzz.'I'IRVR\R\RiRiKir%   c                     [        U S5      (       a  U R                  $ [        U S5      (       a1  [        U R                  S5      (       a  U R                  R                  $ g)zXreturns how much space should follow this item if another item follows on the same page.
spaceAfterry   r   )rH   r}   ry   r    s    r"   getSpaceAfterFlowable.getSpaceAfter   sJ    4%%doo'=T'""wtzz,'G'GPTPZPZPePeIer%   c                     [        U S5      (       a  U R                  $ [        U S5      (       a1  [        U R                  S5      (       a  U R                  R                  $ g)z[returns how much space should precede this item if another item precedess on the same page.spaceBeforery   r   )rH   r   ry   r    s    r"   getSpaceBeforeFlowable.getSpaceBefore   sL    4&&t/?/?(?T'""wtzz-'H'HQUQ[Q[QgQgJgr%   c                     g)z?Hook for IndexingFlowables - things which have cross referencesr   r-   r    s    r"   
isIndexingFlowable.isIndexing   s    r%   Nc                 F   [        U S5      (       a  U R                  SS9nO)[        U S5      (       a  [        U R                  5      nOSnU(       a  U(       a  USU nSU R                  R
                  < S[        [        U 5      5      < U R                  5       < S	U< 3$ )
z
This method should attempt to return a string that can be used to identify
a particular flowable uniquely. The result can then be used for debugging
and or error printouts
getPlainText   )identifytextz...N< at >)	rH   r   rJ   r   	__class__r'   hexid
_frameNamer!   maxLenrs      r"   identityFlowable.identity   s}     4((!!1!-AT6""DIIAA'6
A#'>>#:#:C4M4??K\^_``r%   c                 2    [        [        U SS 5      SS 5      $ )Nr>   _doctemplaterl   r    s    r"   r   Flowable._doctemplate   s    wtF40EEr%   c                 0    [        U R                  US 5      $ N)rl   r   r!   rM   s     r"   _doctemplateAttrFlowable._doctemplateAttr   s    t((400r%   c                     [        U SS 5      nU(       d  U R                  S5      nU(       a   UR                  (       a  SUR                  -  $ g)N_frameframez	 frame=%s )rl   r   r   r!   fs     r"   r   Flowable._frameName   s<    D$'d++G4!kADD00r%   )	r:   r9   r>   r;   r7   r5   r8   r4   r6   r   r   )r'   r(   r)   r*   r+   _fixedWidth_fixedHeightr#   rA   rN   rZ   rb   r]   rm   rr   rp   rz   r~   r   r   r   propertyr   r   r   r,   r-   r%   r"   r/   r/   =   sz     KL$	
)4a  F F1r%   r/   c                   .    \ rS rSrSrSS jrS rS rSrg)	XBox   zzExample flowable - a box with an x through it and a caption.
This has a known size, so does not need to respond to wrap().c                 R    [         R                  U 5        Xl        X l        X0l        g r   )r/   r#   r4   r5   r   )r!   r4   r5   r   s       r"   r#   XBox.__init__   s    $
	r%   c                 \    SU R                   < SU R                  < SU R                  < S3$ )NzXBox(w=z, h=z, t=))r4   r5   r   r    s    r"   __repr__XBox.__repr__   s    +/::t{{DIINNr%   c                    U R                   R                  SSU R                  U R                  5        U R                   R	                  SSU R                  U R                  5        U R                   R	                  SU R                  U R                  S5        U R                   R                  [        S5        U R                   R                  SU R                  -  SU R                  -  U R                  5        g )Nr      rF   )	r>   rT   r4   r5   linesetFontr   drawCentredStringr   r    s    r"   r?   	XBox.draw   s    		q!TZZ5		q!TZZ5		q$++tzz15 			-+		##C

NCOTYYOr%   )r5   r   r4   N)zA Box)	r'   r(   r)   r*   r+   r#   r   r?   r,   r-   r%   r"   r   r      s    EOPr%   r   c                 Z   [        U 5      (       aE  U S   R                  5       S:X  a.  U SS  n [        U 5      (       a  U S   R                  5       S:X  a  M.  [        U 5      (       aE  U S   R                  5       S:X  a.  U S S n [        U 5      (       a  U S   R                  5       S:X  a  M.  U $ )Nr   r   r   r   )lenstrip)liness    r"   _trimEmptyLinesr      s    
e**q)R/ab	 e**q)R/
e**r*b0cr
 e**r*b0Lr%   c                     U R                  S5      nUS:  a;  [        U5      n/ nU H&  nXAS R                  5       nUR                  U5        M(     U$ [        U5      nU$ )z
tidy up text - carefully, it is probably code.  If people want to
indent code within a source script, you can supply an arg to dedent
and it will chop off that many character, otherwise it leaves
left edge intact.

r   N)rp   r   rstripappend)r   dedentr   	templinesr   s        r"   	_dedenterr      sh     JJtEax#E*	D='')DLL  L  &Lr%   z[{( ,.;:/\-c                     Uc  [         nUc  Sn/ nU  H2  n[        U5      U:  a  [        XTUX#5        M!  UR                  U5        M4     U$ )Nr   )SPLIT_CHARSr   	splitLiner   )r   maximum_lengthsplit_charactersnew_line_characterslines_splittedr   s         r"   
splitLinesr      s\    &" Nt9~%dN3 !!$'  r%   c                    SnU (       a  [        U 5      S:  a  Sn[        U 5      U::  a  [        U 5      nO![        U5       H  nX   U;   d  M  US-   nM     US:X  a  WS-   nU(       a%  UR                  U SU 5        SnU[        U5      -  nOUR                  UU SU -   5        XS  n U (       a  [        U 5      S:  a  M  g g g g )NTr   r   F)r   ranger   )line_to_splitr   r   r   r   
first_linesplit_index
line_indexs           r"   r   r     s     J C.q0  }/m,K $N3
 !,0@@",q.K	 4 >$q.K!!-+">?Jc"566N!!"5!K(#) * &l3? C.q0-0-r%   c                   @    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
rg)Preformattedi6  au  This is like the HTML <PRE> tag.
It attempts to display text exactly as you typed it in a fixed width "typewriter" font.
By default the line breaks are exactly where you put them, and it will not be wrapped.
You can optionally define a maximum line length and the code will be wrapped; and
extra characters to be inserted at the beginning of each wrapped line (e.g. '> ').
Nc                     X l         X0l        [        X5      U l        U(       a&  U(       a  [	        U R                  UUU5      U l        ggg)ztext is the text to display. If dedent is set then common leading space
will be chopped off the front (for example if the entire text is indented
6 spaces or more then each line will have 6 spaces removed from the front).
N)ry   
bulletTextr   r   r   )r!   r   ry   r   r   maxLineLength
splitCharsnewLineCharss           r"   r#   Preformatted.__init__=  sB    
 
$t+
M# $

 - * ,	DJ "4r%   c                     U R                   nSnUb  S[        U5      -  nU< SSR                  U R                  5      < S3$ )NzPreformatted(zPreformatted(bulletText=%s,z'''\ 
r   z'''))r   reprjoinr   )r!   bTHs      r"   r   Preformatted.__repr__M  s;    __>-R8A%&		$**(=>>r%   c                     Xl         U R                  R                  [        U R                  5      -  U l        U R                   U R
                  4$ r   )r4   ry   leadingr   r   r5   rf   s      r"   r]   Preformatted.wrapT  s8    
jj((TZZ8

DKK((r%   c           
          U R                   nUR                  nUR                  n[        U R                   Vs/ s H  n[        XCU5      PM     sn5      $ s  snf r   )ry   fontSizefontNamemaxr   r   )r!   ry   r   r   r   s        r"   rm   Preformatted.minWidthY  sE    

>>>>DJJOJDKh7JOPPOs   Ac                    X R                   R                  :  a  / $ [        US-  U R                   R                  -  5      nSR                  U R                  SU 5      nSR                  U R                  US  5      nU R                   nUR
                  S:w  a  [        U5      nSUl        [        X@R                   5      [        XV5      /$ )N      ?r   r   )ry   r   intr   r   firstLineIndentr   r   )r!   rg   rh   linesThatFittext1text2ry   s          r"   rp   Preformatted.split_  s     +++I;,tzz/A/AAB		$**Q|45		$**\]34

  A%UOE$%E!UJJ/e1KLLr%   c                    U R                   R                  nU R                  U R                   R                  -
  nU R                  R                  S5        U R                   R                  (       a/  U R                  R                  U R                   R                  5        U R                  R                  X5      nUR                  U R                   R                  U R                   R                  U R                   R                  5        U R                   H  nUR                  U5        M     U R                  R                  U5        g )Nz%PreformattedPara)ry   
leftIndentr5   r   r>   
addLiteral	textColorsetFillColor	beginTextr   r   r   r   textLinedrawText)r!   cur_xcur_ytxr   s        r"   r?   Preformatted.drawp  s    
 

%%djj111		01::II""4::#7#78YY  .


DJJ''JJ''JJ&&	( JJDKK 		2r%   )r   r5   r   ry   r4   )Nr   NNr   )r'   r(   r)   r*   r+   r#   r   r]   rm   rp   r?   r,   r-   r%   r"   r   r   6  s'     ?)
QM"r%   r   c                   h    \ rS rSrSrSrSr  SS jrS rS r	S r
S	 rS
 rS rS rS rSS jrSrg)Imagei  a  an image (digital picture).  Formats supported by PIL/Java 1.4 (the Python/Java Imaging Library
are supported. Images as flowables may be aligned horizontally in the
frame with the hAlign parameter - accepted values are 'CENTER',
'LEFT' or 'RIGHT' with 'CENTER' being the default.
We allow for two kinds of lazyness to allow for many images in a document
which could lead to file handle starvation.
lazy=1 don't open image until required.
lazy=2 open image when required then shut it.
r   Nc	                 6   Xpl         XPl        [        US5      n	SU l        U	(       a  Xl        [        U5      U l        OF[        US5      (       a'  Xl        [        U5      U l        SU l        SU l        Sn	OU=U l        U l        Xl        U	(       d  [        R                  R                  U5      S   S;   ax  SSKJn
  U
" US	5      n  [        R                  " U5      n UR#                  5         US   U l        US   U l        U(       a
  US
   U l        SU l        U R!                  X#US5        gU	(       a  U R!                  X#US5        gU R!                  X#XF5        g!   U R!                  X#XF5         UR#                  5         g= f! UR#                  5         f = f)z8If size to draw at not specified, get it from the image.readN	_renderPyTr   )z.jpgz.JPGz.jpegz.JPEGr   )open_for_readb   )r7   _maskrH   _drawing_filer   filename_img_dpiospathsplitextreportlab.lib.utilsr  r   readJPEGInfo_setupclose
imageWidthimageHeight)r!   r
  r4   r5   kindmasklazyr7   useDPIfpr  r   infos                r"   r#   Image.__init__  sS    
Xf%!J NDMXk**$Mx.DMDJDIB)11DJ	bgg&&x037YY :h,A#003D 	"1gDO#AwD G	DIKKT!,KKT!,KKT/KKT7		s   E F1F F Fc                     U R                   nU(       aJ  US   S:w  a  U =R                  SUS   -  -  sl        US   S:w  a  U =R                  SUS   -  -  sl        g g g )Nr   H   g      R@r   )r  r  r  )r!   dpis     r"   
_dpiAdjustImage._dpiAdjust  sX    ii1vrz4??dSVm;?1vrz4++tc!f}<+z r%   c                 b    X@l         Xl        X l        X0l        US::  a  U R	                  5         g g Nr   )_lazy_width_height_kind_setup_inner)r!   r4   r5   r  r  s        r"   r  Image._setup  s*    

7D%%'7r%   c                    U R                   nU R                  nU R                  nU R                  nU(       ak  UR	                  5       u  U l        U l        U R                  (       a<  [        US5      (       a+  UR                  R                  R                  SS5      U l        OOU R                  (       a>  U R                  R                  U R                  R                  sU l        U l        SU l        U R                  5         U R                   S:  a  U ?US;   a5  U=(       d    U R
                  U l        U=(       d    U R                  U l        g US;   a/  U R
                  U-  S-  U l        U R                  U-  S-  U l        g US	;   aa  ['        [)        U5      U R
                  -  [)        U5      U R                  -  5      nU R
                  U-  U l        U R                  U-  U l        g g )
N_imager  )r  r  F   )directabsolute)
percentage%{Gz?)boundproportional)r%  r&  r'  r  getSizer  r  r  rH   r+  r  getr  r4   r5   r   r$  	drawWidth
drawHeightminfloat)r!   r4   r5   r  imgfactors         r"   r(  Image._setup_inner  sr   zzii03-DOT-yyWS22JJOO//g>	]]040C0CDMMDXDX-DOT-DI::q=di(("5dooDN$8(8(8DO''!__U247DN"..v5d:DO--udoo5eFmDDTDT6TUF!__V3DN"..v5DO .r%   c                    U R                   U[        -   :  d  U R                  U[        -   :  a  U R                   U R                  4U l        [	        [        U5      U R                   -  [        U5      U R                  -  5      nU =R                   U-  sl         U =R                  U-  sl        U R                   U R                  4$ r   )r6  r   r7  _oldDrawSizer8  r9  )r!   r^   r_   r;  s       r"   _restrictSizeImage._restrictSize  s    >>"U("doobh&> $ ?Dr4>>1%)DOO2KLFNNf$NOOv%O~~t..r%   c                 L    [        U SS 5      nU(       a  Uu  U l        U l        g g )Nr>  )rl   r6  r7  )r!   dwhs     r"   _unRestrictSizeImage._unRestrictSize  s&    d>$/.1+DNDO r%   c                 V   US:X  af  SSK Jn  U" U R                  5      U l        [	        U R                  [
        5      (       d  S U l        U R                  S:  a  SU l        U R                  $ US;   a  U R                  5         U R                  U   $ [        S[        U 5      U4-  5      e)Nr  r   )ImageReaderr,  r   )r6  r7  r  r  z<Image @ 0x%x>.%s)r  rF  r	  r  
isinstancer   r$  r(  __dict__AttributeErrorr   )r!   rM   rF  s      r"   __getattr__Image.__getattr__  s    f97#DJJ/DIdjj22!
::q=q$*99GG==##0BtHQ<?@@r%   c                 2    U R                   U R                  4$ r   )r6  r7  rf   s      r"   r]   
Image.wrap  s    ~~t..r%   c           	         [        U SS5      n[        U SS5      nU R                  nU(       a  U R                  [        U R                  5      -  nU R
                  [        U R                  5      -  nUR                  n UR                  XE5        UR                  U R                  X5        Xcl        g U R                  nUS:  a  SU l        U R                  R                  U R                  =(       d    U R                  UUU R                  U R
                  U R                  S9  US:  a  S =U l        U l        Xpl        g g ! Xcl        f = f)N_offs_xr   _offs_yr,  r   )r  )rl   r  r6  r9  r  r7  r  	transformscalerZ   r>   r$  	drawImager  r
  r  r	  )r!   dxdydsxsyotransr  s           r"   r?   
Image.draw   s   T)A&T)A&MM%"88B5)9)9#::B[[F%2)$::DQwQ
IIDII$>$&$&$(NN$(OO)-   & Qw)--	DJ!
  %s   ?-E E	c                     [         R                  X5      nUSS  S:X  a6  [        U R                  [        5      (       a  US S < SU R                  < S3nU$ )Nz>...z
 filename=r   )r/   r   rG  r
  rJ   r   s      r"   r   Image.identity  sH    d*RS66>js;;%&sVDMM:Ar%   )r  r  r	  r&  r  r'  r$  r  r>  r%  r7  r6  r
  r7   r  r  )NNr-  autor   rD   Fr   )r'   r(   r)   r*   r+   r   r   r#   r   r  r(  r?  rC  rJ  r]   r?   r   r,   r-   r%   r"   r   r     sM     KL?G>C*0X=(62/2
A/"6r%   r   c                       \ rS rSrS rSrg)NullDrawi!  c                     g r   r-   r    s    r"   r?   NullDraw.draw"      r%   r-   N)r'   r(   r)   r*   r?   r,   r-   r%   r"   r`  r`  !  s    r%   r`  c                   0    \ rS rSrSrSrSrSS jrS rSr	g)	Spaceri%  z]A spacer just takes up space and doesn't draw anything - it guarantees
a gap between objects.r   c                 D    Xl         U(       a  SU l        X l        X l        g )Ng-C6?)r4   r5   spacebefore)r!   r4   r5   isGlues       r"   r#   Spacer.__init__*  s    
DK%r%   c                 n    U R                   R                  < SU R                  < SU R                  < S3$ )N(, r   )r   r'   r4   r5   r    s    r"   r   Spacer.__repr__1  s!    #~~66tzz4;;OOr%   )r5   rg  r4   NF)
r'   r(   r)   r*   r+   r   r   r#   r   r,   r-   r%   r"   re  re  %  s    !KLPr%   re  c                   &    \ rS rSrS rS rS rSrg)
UseUpSpacei4  c                     g r   r-   r    s    r"   r#   UseUpSpace.__init__5  rc  r%   c                 4    SU R                   R                  -  $ )Nz%s())r   r'   r    s    r"   r   UseUpSpace.__repr__8  s    ////r%   c                 &    Xl         X l        XS-
  4$ )N:0yE>re   rf   s      r"   r]   UseUpSpace.wrap;  s    
!t+,,r%   )r5   r4   N)r'   r(   r)   r*   r#   r   r]   r,   r-   r%   r"   rp  rp  4  s    0-r%   rp  c                   *    \ rS rSrSr SS jrS rSrg)	PageBreaki@  r   Nc                     Xl         g r   nextTemplate)r!   r|  s     r"   r#   PageBreak.__init__D  s    (r%   c                     U R                   R                  < SU R                  (       a  [        U R                  5      OS< S3$ )Nrk  r   r   )r   r'   r|  r   r    s    r"   r   PageBreak.__repr__G  s0    >>22dN_N_48I8I3Jeg3ghhr%   r{  r   )r'   r(   r)   r*   
locChangerr#   r   r,   r-   r%   r"   ry  ry  @  s    JD)ir%   ry  c                       \ rS rSrSrg)SlowPageBreakiJ  r-   Nr'   r(   r)   r*   r,   r-   r%   r"   r  r  J      r%   r  c                       \ rS rSrSrg)PageBreakIfNotEmptyiM  r-   Nr  r-   r%   r"   r  r  M  r  r%   r  c                   6    \ rS rSrSr S rS rS rS	S jrSr	g)
CondPageBreakiP  r   c                     Xl         g r   r5   )r!   r5   s     r"   r#   CondPageBreak.__init__S  s    r%   c                 $    SU R                   < S3$ )NzCondPageBreak(r   r  r    s    r"   r   CondPageBreak.__repr__V  s    %)[[22r%   c                     X R                   :  a2  U R                  S5      nU(       d  X4$ SSKJn  UR	                  U5        g)Nr   r   
FrameBreakr   r   )r5   r   reportlab.platypus.doctemplater  add_generated_content)r!   rg   rh   r   r  s        r"   r]   CondPageBreak.wrapY  s;    {{"%%g.AZ44A##J/r%   Nc                 Z    [        U 5      R                  SSU R                  5       -  5      $ )Nr   z
,frame=%s))r   replacer   r!   r   s     r"   r   CondPageBreak.identitya  s%    Dz!!#l4??3D&DEEr%   r  r   )
r'   r(   r)   r*   r  r#   r   r]   r   r,   r-   r%   r"   r  r  P  s    JP3Fr%   r  c                    [        USS5      n[        USS5      nUc  [        nU(       a$  SSKJn	Jn
  Un[        U5      =ol        SUl        U? SnSnSnSnU SS n U (       Ga_  U R                  S5      n[        US5      (       a5  SSKJn
  [        UU
5      (       a  UUR                  UR                  -   -  nM_  UR                  X!S	5      u  nnUb  UR                  UU45        U(       a  W	" X5        U[        ::  a   U[        ::  a  M  [!        X(       a  [#        UU5      OU5      nUU-  nU(       d@  UR%                  5       nU(       a#  [        USS
5      (       a  Un[!        UU-
  S5      nUU-  nOUb  UR%                  5       Ul        SnUR)                  5       n[        USS
5      (       a  UnUnX-  nU (       a  GM_  Ub  Xl        XU-
  4U(       a  WUl        $ $ ! U(       a  WUl        f f = f);return max width, required height for a list of flowables Fr   Nr   r   )_addGeneratedContentIndenterr   frameActionr  F_SPACETRANSFER)rl   r   r  r  r  r   r   _generated_contentpoprH   rG  leftrightrb   r   r   r   r8  r   _spaceBeforer~   _spaceAfter)Frg   r>   
mergeSpaceobjdims	fakeWidthdoctcframer  r  
doct_frameWr   pSatTopr   r`   ra   ss                       r"   _listWrapOnr  d  s   4t,DT'$'F'	Q
&z22$(!%'$aDaAq''Ca))!&&.0J((495CAaaU!3$Q.5q%xA9c!J'!<AFA$$&q!1%88AbDAQ?q7G7G7IC$4!Aq)%00BGA9 a: ?bOB$w#DJ 6#DJ s   E1G" G" "G3c                     [        U [        [        45      (       d  U SL=(       a    U /=(       d    / n SSKJn  U  Vs/ s H  n[        X!5      (       d  M  UPM     sn(       a   S5       eU $ s  snf )z.if it isn't a list or tuple, wrap it in a listNr   )LCActionFlowablez)LCActionFlowables not allowed in sublists)rG  listtupler  r  )Vr  rK   s      r"   _flowableSublistr    sZ    ae%%1D=+@aS+FBq??1a
1 >1?k@kk?H @s   A,A,c                   (    \ rS rSrSS jrSS jrSrg)_ContainerSpacei  Nc                 z    Uc  U R                   OU H&  n[        US5      (       a  M  UR                  5       s  $    gNr  r   )_contentrH   r   r!   contentcs      r"   r   _ContainerSpace.getSpaceBefore  s;    #*?$--?A1]++'')) @ r%   c                     [        Uc  U R                  OU5       H&  n[        US5      (       a  M  UR                  5       s  $    gr  )reversedr  rH   r~   r  s      r"   r~   _ContainerSpace.getSpaceAfter  s;    7?$--HA1]++(( I r%   r-   r   )r'   r(   r)   r*   r   r~   r,   r-   r%   r"   r  r    s    r%   r  c                   >    \ rS rSrSrS
S jrS rS rS rS
S jr	S	r
g)KeepTogetheri  FNc                     [        [        S5      (       d"  SSKJn  SSKJn  U[        l        U[        l        U(       d  U R                  5       /n[        U5      U l        X l        g )NNullActionFlowabler   )r  r  )rH   r  r  r  r  r  r  
_maxHeight)r!   	flowables	maxHeightr  r  s        r"   r#   KeepTogether.__init__  sK    |$899IA.@L+&0L#0023I(3#r%   c                     U R                   n[        [        [        U5      5      nSSR	                  U5      -   nUR                  SS5      nU R                  R                  < SU< SU R                  < S3$ )Nr   z
  rk  z,maxHeight=r   )	r  r  mapr   r   r  r   r'   r  )r!   r   Ls      r"   r   KeepTogether.__repr__  sX    MMT!1IIdF#(,(?(?$//RRr%   c           	      @   / n [        U R                  XR                  US9u  pEWU l        U=(       a    US   S   =(       d    SU l	        X4U l
        WS4$ !   [        SU R                  R
                  U R                  R                  [        U 5      4-  5         Nx= f)N)r  z%
raised by class %s(%s)@0x%8.8x wrap
r   r   i )r  r  r>   r   r   r'   r(   r   _H_H0	_wrapInfo)r!   r^   r_   r  r  r   s         r"   r]   KeepTogether.wrap  s    	HdmmByydCCA &DGAJ+!({	HG4>>KbKbcgcqcqc|c|}  AE  ~F  KG  G  Hs   !A ABc                    [        U SS 5      X4:w  a  U R                  X5        U R                  S S  n[        U SS 5      =pEU(       a%  [        USS 5      nUR                  nUR                  nU R
                  U:  =(       a&    U R                  (       + =(       d    X R                  :  nU R                  U:  =(       d    U=(       a    Un	U(       d  U	(       a  Sn
U R                  S5      nU(       a&  U(       a  U" 5       nUR                  nUR                  nU(       aJ  U R                  (       a  U(       d2  U=(       a#    U=(       a    W=(       a    WW:  =(       a    WW:  (       + n
O)W(       a"  WUR                  :  a  WU R
                  :  a  Sn
UR                  SU
(       a  U R                  OU R                  " 5       5        U$ )Nr  r   _atTopF_peekNextFrameTr   )rl   r]   r  r%  r&  r  r  r  r   
splitAtTopinsertr  r  )r!   r^   r_   rq   cfr  cAWcAHC0C1fbpanfnfnAWnAHs                  r"   rp   KeepTogether.split  sH   4D)B72DIIb4DMM!T(400Bx-E))C**CWWRZG0FB4Fhhrk*blUB(()9:DdViijj4??uGBG2G#s(GsCxHRYY3<HHQ243J3JJMNr%   c                     SU R                   R                  < S[        [        U 5      5      < U R	                  5       < SSR                  U R                   Vs/ s H  o"R                  5       PM     sn5      < 3nU(       a  USU $ U$ s  snf )Nr   r   z> containing :r   r   )r   r'   r   r   r   r   r  r   )r!   r   r   msgs       r"   r   KeepTogether.identity  s    /3~~/F/Fs2d8}UYUdUdUfgkgpgp  IM  IV  IV  rW  IV  DEr|r|r~  IV  rW  hX  Yq= J	 rWs   B)r  r  r  r  r  r   )r'   r(   r)   r*   r  r#   r   r]   rp   r   r,   r-   r%   r"   r  r    s!    J$S	2r%   r  c                       \ rS rSrSrSrSrg)KeepTogetherSplitAtTopi  ze
Same as KeepTogether, but it will split content immediately if it cannot
fit at the top of a frame.
Tr-   N)r'   r(   r)   r*   r+   r  r,   r-   r%   r"   r  r    s     Jr%   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	Macroi  zThis is not actually drawn (i.e. it has zero height)
but is executed when it would fit in the frame.  Allows direct
access to the canvas through the object 'canvas'c                     Xl         g r   command)r!   r  s     r"   r#   Macro.__init__  s    r%   c                 2    S[        U R                  5      -  $ )Nz	Macro(%s))r   r  r    s    r"   r   Macro.__repr__  s    T$,,///r%   c                     gNr  r-   rf   s      r"   r]   
Macro.wrap  s    r%   c                 F    [        U R                  S SU R                  0S9  g )NrW   )gl)r   r  r>   r    s    r"   r?   
Macro.draw   s    T\\Thtyy-ABr%   r  N
r'   r(   r)   r*   r+   r#   r   r]   r?   r,   r-   r%   r"   r  r    s    80Cr%   r  c                      g r   r-   )argskwdss     r"   _nullCallabler    s    r%   c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
CallerMacroi  zV
like Macro, but with callable command(s)
drawCallable(self)
wrapCallable(self,aW,aH)
Nc                 T    U=(       d    [         U l        U=(       d    [         U l        g r   )r  _drawCallable_wrapCallable)r!   drawCallablewrapCallables      r"   r#   CallerMacro.__init__  s    ):]):]r%   c                 @    SU R                   < SU R                  < S3$ )NzCallerMacro(,r   r  r  r    s    r"   r   CallerMacro.__repr__  s    '+'9'9$:L:LMMr%   c                 (    U R                  XU5        gr  )r  r!   r^   r_   s      r"   r]   CallerMacro.wrap  s    42&r%   c                 &    U R                  U 5        g r   )r  r    s    r"   r?   CallerMacro.draw  s    4 r%   r
  NNr  r-   r%   r"   r  r    s    
;N!r%   r  c                   @    \ rS rSrSrSS jrS rS rS rS r	S r
S	rg
)ParagraphAndImagei  z combine a Paragraph and an Imagec                 @    Xl         X l        X0l        X@l        XPl        g r   )PIxpadypad_side)r!   r  r  r  r  sides         r"   r#   ParagraphAndImage.__init__  s    		
r%   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r   )r   r  r   r  r    s    r"   r    ParagraphAndImage.getSpaceBefore   s)    466((*466+@+@+BCCr%   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r   )r   r  r~   r  r    s    r"   r~   ParagraphAndImage.getSpaceAfter#  s)    466'')$&&*>*>*@AAr%   c                    U R                   R                  X5      u  p4X0l        X@l        Xl        U R
                  nUR                  nU R                  nU R                  nUR                  n	UR                  n
X-
  UR                  -
  nX-
  U-
  nXR                  -
  nSUl        [        XH-   U	S-  -  5      nUR                  U/X/-  -   U/-   5      Ul        U R                   S:X  a  X7-   /SU-   -  S/-   U l        [%        UR                  R&                  5      U	-  Ul        [+        XER(                  5      U l        U R                  U R(                  4$ )Nr   r   r  r   )r  r]   wIhIr4   r  ry   r  r  r   r   rightIndentr   r   
breakLinesblParar  _offsetsr   r   r5   r   )r!   rg   rh   r!  r"  r  ry   r  r  r   r   later_widthsintermediate_widthsfirst_line_widthnIWs                  r"   r]   ParagraphAndImage.wrap&  s3   Z4
FFyyyy--%%
!.1B1BB*1B6.1F1FF27WS[)*<<!1 2S9N5N NP\~ ]^::vWIqu-qc1DMqxx~~&w."XX&

DKK((r%   c                    U R                   U R                  U R                  U R                  4u  p4pVXV-   U:  d  [	        UR
                  5      S::  a  / $ UR                  X5      nU(       d  U$ US   =o0l         US	 UR                  n[	        U R                   R                  R                  5      UR                  -  Ul        [        XSR                  5      U l        U /U-   $ r#  )r  r!  r"  r  r   fragsrp   ry   r%  r   r   r5   r   )	r!   rg   rh   r  r!  r"  r  rq   ry   s	            r"   rp   ParagraphAndImage.split>  s    &&$''477DII=r7;#agg,/"9GGJ+(qTFaDtvv}}**+EMM9"XX&vaxr%   c                 n   U R                   nU R                  S:X  a  U R                  R                  USU R                  U R
                  -
  U R                  -
  5        U R                  U R                  l         U R                  R                  USS5        U R                  ?g U R                  R                  XR                  U R                  -
  U R                  -
  U R                  U R
                  -
  U R                  -
  5        U R                  R                  USS5        g ! U R                  ?f = f)Nr  r   )r>   r  r  rZ   r5   r"  r  r&  r  r4   r!  r  r@   s     r"   r?   ParagraphAndImage.drawJ  s    yy::vFFMM$qTWW!4TYY!>?"mmDFFO$d1Q'FFOFFMM$zz$''1$));DKK<OPTPYPY<YZFFMM$q# FFOs   :D& &D4)
r  r  r&  r  r"  r5   r!  r4   r  r  N)r  r  r  )r'   r(   r)   r*   r+   r#   r   r~   r]   rp   r?   r,   r-   r%   r"   r  r    s%    *DB)0
$r%   r  c                       \ rS rSrS rSrg)
FailOnWrapiW  c                     [        S5      e)Nz3FailOnWrap flowable wrapped and failing as ordered!rI   rf   s      r"   r]   FailOnWrap.wrapX  s    NOOr%   r-   N)r'   r(   r)   r*   r]   r,   r-   r%   r"   r2  r2  W  s    Pr%   r2  c                        \ rS rSrS rS rSrg)
FailOnDrawi[  c                     gr  r-   rf   s      r"   r]   FailOnDraw.wrap\      r%   c                     [        S5      e)Nz2FailOnDraw flowable drawn, and failing as ordered!r4  r    s    r"   r?   FailOnDraw.draw_  s    MNNr%   r-   N)r'   r(   r)   r*   r]   r?   r,   r-   r%   r"   r7  r7  [  s    Or%   r7  c            	       F    \ rS rSrSrSSS\SSSSS4	S	 jrS
 rS rS r	Sr
g)
HRFlowableib  zLike the hr tagz80%r   roundrD   r3   Nc
                     [         R                  U 5        Xl        X l        X0l        XPl        X`l        X@l        Xpl        Xl	        Xl
        g r   )r/   r#   r4   	lineWidthlineCapr   r}   colorr7   r8   dash)
r!   r4   	thicknessrB  rC  r   r}   r7   r8   rD  s
             r"   r#   HRFlowable.__init__d  s@     	$
"&$
	r%   c                 @    SU R                   < SU R                  < S3$ )NzHRFlowable(width=z	, height=r   re   r    s    r"   r   HRFlowable.__repr__w  s    48JJLLr%   c                    U R                   n[        U[        5      (       aF  UR                  5       nUR	                  S5      (       a  U[        US S 5      -  S-  nO[        U5      n[        X15      nX0l        X0R                  4$ )Nr0  r   r1  )	r4   rG  r   r   endswithr9  r8  r%  rA  )r!   rg   rh   r`   s       r"   r]   HRFlowable.wrapz  sm    JJa!!	Azz#JuQsV}$<T$AAh!..  r%   c                    U R                   nUR                  5         UR                  U R                  5        UR	                  SSSS.U R
                  R                  5          5        UR                  U R                  5        U R                  (       a  UR                  U R                  5        UR                  SSU R                  U R                  5        UR                  5         g )Nr   r   r,  )buttr?  square)r>   rQ   setLineWidthrA  
setLineCaprB  lowerrS   rC  rD  setDashr   r%  r5   rU   r@   s     r"   r?   HRFlowable.draw  s    yy$..)!q9$,,:L:L:NOPDJJ'99dll499-		!QT[[1r%   )
r%  rC  rD  r7   rB  rA  r}   r   r8   r4   )r'   r(   r)   r*   r+   r   r#   r   r]   r?   r,   r-   r%   r"   r>  r>  b  s3    aH&M!r%   r>  c                       \ rS rSrS rSrg)_PTOInfoi  c                 D    [        U5      U l        [        U5      U l        g r   )r  trailerheader)r!   rW  rX  s      r"   r#   _PTOInfo.__init__  s    '0&v.r%   )rX  rW  Nr'   r(   r)   r*   r#   r,   r-   r%   r"   rU  rU    s    /r%   rU  c                 Z    [        U S5      (       a  U R                  5       $ [        U 5      $ )Nr   )rH   r   )r  s    r"   	cdeepcopyr\    s%    s:||~}r%   c                   (    \ rS rSrSS jrSS jrSrg)
_Containeri  Nc           	         SSK JnJn	  Un
UnSnUc  U R                  nXu-  nUc  U R                  nU R                  X$U-  5      nX0R                  U-  -  nUn[        U SS5      nU GH  n[        (       d-  [        X5      (       a  UR                  UR                  5        M<  [        X5      (       a1  X/R                  U-  -  nXR                  UR                  -   U-  -  nM}  UR                  XS5      u  nnU[        :  a  [        USS5      (       d  M  X:w  a4  UR!                  5       n[        USS5      (       d  U[#        UU-
  S5      -  nUU-  nUR%                  5       n[        USS5      (       a  UnUn[        US	S5      nU(       a  US
   R&                  (       a  US
   nUR                  nUR                  nUR(                  nX^R*                  U-
  U-
  -  nXUUR,                  -
  -  -   nUU-   U-   n[#        XU-
  5      n[#        SUU-
  5      nUR/                  XUUUU5        Xl        UR3                  XX7U-
  S9  XS
   La  [        USS5      (       d  X<-  nU?GM     g)z"we simulate being added to a framer   )ActionFlowabler  Nr   r  	_ZEROSIZEr  F	_frameBGsr   )rY   )r  r`  r  r4   r  rN   r5   rl   r   rG  applyr   r  r  rb   r   r   r   r~   activestartr%  _leftPaddingrenderr   rZ   )r!   r>   rK   rX   rY   rR  r  r^   r`  r  x0y0r  ytr   r  r`   ra   r  fbgbgfbglfbgrbgmfbwfbxfbhfbys                               r"   rZ   _Container.drawOn  sN   K:DJJr
?mmGqU+	[[Xd+A))j.J.J))*!%%VVE\!vvagg~u,,88DI.DAqwwqT::Hu$$&q!1%88QrT!$AFA!Aq)%00B%D1Cs2w~~Wwwxxhh\\$.t34U%7%7 788!ebj"rTl!CGn		$SS5HHHTAQ$H'#GA6Ft,L,LG r%   c                     / R                   nU=(       d    U R                   H  nU" [        U5      5        M     UR                  U l        g r   )r   r  r\  __self__)r!   r  Cr  s       r"   copyContent_Container.copyContent  s7    II*T]]*AilO +

r%   r  )r   r   NNr   )r'   r(   r)   r*   rZ   rx  r,   r-   r%   r"   r^  r^    s    1f#r%   r^  c                   .    \ rS rSrSrSS jrS rS rSrg)	PTOContaineri  a=  PTOContainer(contentList,trailerList,headerList)

A container for flowables decorated with trailer & header lists.
If the split operation would be called then the trailer and header
lists are injected before and after the split. This allows specialist
"please turn over" and "continued from previous" like behaviours.Nc                    [        X#5      n/ =U l        n[        U5       H_  n[        U[        5      (       a  UR                  UR                  5        M5  UR                  U5        [        US5      (       a  MY  XFl        Ma     g )N_ptoinfo)	rU  r  r  rG  r|  extendr   rH   r~  )r!   r  rW  rX  r  rw  _s          r"   r#   PTOContainer.__init__  s`    W$!'*A!L))$q,,1j +r%   c                     [        U R                  XR                  5      u  U l        U l        U R                  U R                  4$ r   )r  r  r>   r4   r5   rf   s      r"   r]   PTOContainer.wrap  s2    "-dmmJyy"Q
DKzz$++%%r%   c                    SSK Jn  US:  a  / $ U R                  nU R                  nS=n=n=n=p[	        U5      n0 nS=p[        U5       GH^  nXV   nUR                  nUUR                  5       ;  aa  UR                  nUR                  n[        UXR                  5      u  nn[	        U5      (       a  US   R                  5       nOSnUUUU4UU'   O
UU   u  nnnnUR                  XAS5      u  nn[        X5      (       a?  UR                  UR                  -   nXR                  -  nXR                  -  nUU-  nSn	Sn
O9U(       a"  [!        UR                  5       U	-
  S5      n
UU
-  nUR#                  5       n	UUU	-   -  nU[!        UU	5      -   nUU-   U[$        -
  :  a    O
US-  nGMa     UWU	-   -  nX(-
  W-
  U
-
  S-  nUSU-  :  a  WR'                  XAU5      nO/ n[)        U5      [)        U5      -   S:  a  U" U* U* 5      /nU" X5      /nO/ =nnU(       d|  UnUS:  aJ  XWS-
     R+                  5       (       a0  US-  nSXW   l        US:  a  XWS-
     R+                  5       (       a  M0  US:X  a$  US   R+                  5       (       a  UnSUS   l        [/        5       /n[	        U5      S:  a(  US U US S -   U-   W-   U-   n WU-   USS  -   XWS-   S  -   n!O!U(       d  / $ US U U-   W-   U-   n WU-   XWS  -   n!U [1        U!WR                   Vs/ s H  n[3        U5      PM     snUR                   Vs/ s H  n[3        U5      PM     sn5      /-   nU$ s  snf s  snf )Nr   r  r  r   gwJ?皙?rv  )r  r  r>   r  r   r   r~  keysrW  rX  r  r   rb   rG  r  r  r   r~   r   rr   absrz   rx   rp  r|  r   )"r!   rg   rh   r  r>   rw  rK   ir   r  hxnI2WdLeftdRightr  r  THdrtWtHtSBr  ra   dwtHSr_   SSR1IR2Ijr  R1R2s"                                     r"   rp   PTOContainer.split  s   ;q=)yyMMABFqAA

A
"IIhh$Q
II>Bq66A$--/CC2bA!!f"R88DI6DAq!%%VVAGG^''!b 
Q--/215BGA__&2IASR[.Cuk%''FA= B 	
ad mC"G+tK42.BBu:c&k!$&UFF7+,CE)*CNC#AA#!aC&0022Q$%! A#!aC&0022 !t!,,..$%!!\Nr7192Ar"1vc!!#A%BSABA#$'BI2As1QBS2B<QYY#?YDGY#?RSRZRZ@[RZQaRZ@[\]] $@@[s   M6M)r  r5   r4   r  )	r'   r(   r)   r*   r+   r#   r]   rp   r,   r-   r%   r"   r|  r|    s    I=&Or%   r|  c                     SU S-  -  nSU -  nSUS-  -  nSU-  nXG-  XV-  -
  nXx-  n	U* U-  n
U* U-  nXH-  nX-  X-  -   nX-  X-  -   nX4$ )Nr   r,  r-   )s0s1h0h1a11a12a21a22detb11b12b21b22rM   r  s                  r"   _hmodelr  :  s     RU(C
R%C
RU(C
R%C
'#'/C
'C$s(C$s(C
'CsvAsvA3Jr%   c                     Uu  p#[        U5      [        ::  a  X0-  $ SU-  U-  nSSKJn  U * U-  nXD-  U-
  nUS:  a  gU" U5      nUS:  a  U* U-
  nOU* U-   nXh-  n	[	        SU-  SU	-  5      $ )z=solve the model v = a/s**2 + b/s for an s which gives us v==hrF   r   )sqrtNr   )r  r   mathr  r   )
ra   abrM   r  tr  r   r   r  s2s
             r"   _qsolver  J  s    
CA
1vu}s
AaA	
1A	AAs4QA!tR!VR!V	
Br"uber%   c                   L    \ rS rSr/ SSSSSS4S jrS	 rSS
 jrS rSS jrSr	g)KeepInFramei\  r   shrinkr   r2   r3   Nc
                    X`l         Xl        X l        XPl        US;   d   U R	                  5       < SU< 35       eUS:  d   U R	                  5       < SU< 35       eUc  [
        nX@l        U=(       d    / U l        Xl        Xpl	        Xl
        g)a  mode describes the action to take when overflowing
error       raise an error in the normal way
continue    ignore ie just draw it and report maxWidth, maxHeight
shrink      shrinkToFit
truncate    fit as much as possible
set fakeWidth to False to make _listWrapOn do the 'right' thing
)erroroverflowr  truncatez invalid mode value r   z invalid maxHeight value N)namemaxWidthr  moder   r   
mergespacer  r8   r7   r  )
r!   r  r  r  r  r  r  r7   r8   r  s
             r"   r#   KeepInFrame.__init__]  s     	 "	??t_c_l_l_nosAtt?!|[QZ[[|,@z$2"r%   c                 N    U R                   U R                  -
  U R                  -
  $ r   )r  _leftExtraIndent_rightExtraIndentr    s    r"   _getAvailableWidthKeepInFrame._getAvailableWidthr  s"    }}t444t7M7MMMr%   c                    SU R                   R                  < S[        [        U 5      5      < U R	                  5       < [        U SS5      =(       a    S[        U SS5      -  =(       d    S< S[        U SS5      =(       a    S[        [        U SS	5      5      -  =(       d    S< S
[        U SS5      =(       a    S[        [        U S5      5      -  =(       d    S< 3
$ )Nr   r   r  r   
 name="%s"z> size=r  z maxWidth=%sr   rK   r  z maxHeight=%s)r   r'   r   r   r   rl   r   r  s     r"   r   KeepInFrame.identityu  s    .2nn.E.Es2d8}VZVeVeVgVB'S\74r;R-RYWYYZ+cwtT^_`Ga@b1bigii[,e6'RVWbJcCd1djhjjl 	lr%   c           
        ^ ^^ SSK Jn  T R                  n[        [	        T R
                  =(       d    UU5      5      m[        [	        T R                  =(       d    UU5      5      nT R                  m[        T R                  TT R                  TS9u  pgUS:X  a>  UT[        -   :  d  Xu[        -   :  a%  SU< SU< ST R                  S5      < 3nU" U5      eUT[        -   ::  a*  Xu[        -   ::  a  U[        -
  T l        U[        -
  T l        GO]US	;   a1  [	        TU5      [        -
  T l        [	        XW5      [        -
  T l        GO&UUU 4S
 jn	Un
UnSnUT[        -   :  aG  UT-  nU	" U5      u  pgXu[        -   ::  a&  U[        -
  T l        U[        -
  T l        UT l        Xg4$ UnUnUn
Xu-  nU	" U5      u  pgU[        -
  T l        U[        -
  T l        UT l        U[	        SU-  US-
  5      :  d  Xu[        -   :  aq  UnS Hi  n[!        USU-
  -  [#        XX5      5      nU	" U5      u  pgXu[        -   ::  d  M7  UT[        -   ::  d  MF  U[        -
  T l        U[        -
  T l        UT l          O   T R                  T R                  4$ )Nr   )LayoutErrorr  r  zcontent rK   z too large for    )r  r  c                 z   > [        U 5      n [        TR                  U T-  TR                  TS9u  pX-  nX -  nX4$ )Nr  )r9  r  r  r>   )rK   r  r   r  r  r!   s      r"   funcKeepInFrame.wrap.<locals>.func  s@    !H"4==8DIIQZ[tr%   r   gffffff?
   )r   r1  r  皙?g333333?)r  r  r  r9  r8  r  r  r  r  r  r>   r   r   r4   r5   _scaler  r  )r!   rg   rh   r  r  r  r  r   identr  W0H0r  r  H1r   r  r  r  s   `                @@r"   r]   KeepInFrame.wrap{  s<   >yyT]]8jDE#dnn;KHI	NN	4==$))yQ'Mq%/1u_3D89!DMM"<MNEe$$1o#55DJE'DK,,Xa.DJi*50DK BBB%xZBxo%!"5DJ"#E'DK"$DK3JB8DA5DJE'DKDKT)^IbL11Q%5G 2A	1Q3b0DEA7DAE/)a%.?%&uW
&'g&' 3 zz4;;&&r%   c           	         [        U SS5      nU R                  S:H  nUS:g  =(       d    UnU(       a  UR                  5         U(       aH  UR                  5       nUR	                  X#U R
                  U R                  5        UR                  USS9  O,UR                  X#5        S=p#UR                  SU-  SU-  5        [        R                  XX#XES9  U(       a  UR                  5         g g )Nr  r   r  r   )stroke)rY   rR  )rl   r  rQ   	beginPathrT   r4   r5   clipPathrR   rR  r^  rZ   rU   )	r!   r>   rK   rX   rY   rR  r  ssps	            r"   rZ   KeepInFrame.drawOn  s    Xc*99j(CZ#8NNNN$qTZZ4aq)q#

3u9c%i0$aAt  "2r%   )r  r  r  r7   r5   r  r  r  r  r  r8   r4   r   r   )
r'   r(   r)   r*   r#   r  r   r]   rZ   r,   r-   r%   r"   r  r  \  s5    4618Z\djrz  GK #*Nl:'x#r%   r  c            
       N    \ rS rSrSrSrSr/ SSSSSS	S
SS4
S jrS rSS jr	Sr
g)PlacedStoryi  r   T)	nwr  ner`   r  eswr  ser  r   r  Nr2   r3   pagec                     [        X4XVXxXS S9	U l        Xl        X l        Xl        S U l        S U l        Xl        Xl        g )N)r  r  r  r  r7   r8   r  )	r  kifrK   rX   anchorr`   ra   sborigin)r!   rK   rX   r  r  r  r  r  r  r  r  r7   r8   showBoundaryr  s                  r"   r#   PlacedStory.__init__  sD     xG"VUY[r%   c                    U R                   cx  [        U S5      U R                  l        U R                  R	                  U R                  R
                  U R                  R                  5      u  U l         U l        U R                  ?g)Nr>   r  )r`   rl   r  r>   r]   r  r  ra   )r!   _aW_aHs      r"   r]   PlacedStory.wrap  sY    66>#D0DHHM!XX]]488+<+<TXX=O=OPNDFDFr%   c                 F   U R                   c  U R                  SS5        U R                  nUS:X  a  S=pgO_US:X  a  UnUnOTUS:X  a>  [        U SS 5      nU(       d  U R	                  S5      nUR
                  nUR                  nO[        SU< S35      eU R                  n	XR                  ;  a  [        SU	< S	U R                   35      eU	S
;   a  XpR                  -  nOU	S;   a  XpR                  S-  -  nU	S;   a  X`R                   S-  -  nOU	S;   a  X`R                   -  nU R                  U-   n
U R                  U-   nU R                  R                  XU5        U R                  (       a3  UR!                  U R                  XU R                   U R                  5        g g )Nr   r  localr   r   zPlacedStory invalid origin=z" not in "page", "frame" or "local"zPlacedStory invalid anchor=z not in )r  r  r  )r`   r  r  r,  )r  r  r  )r  r  r  )r`   r]   r  rl   r   x1y1rI   r  _anchorsra   rK   rX   r  rZ   r  drawBoundary)r!   r>   lxlyrY   r  rT  rU  r  r  rK   rX   s               r"   rZ   PlacedStory.drawOn  si   66>499Qq>6>KBW_BBW_Xd+A$//8aBB;F9<^_``&;F9HT]]OTUU_$&&LB}$&&1*B]"&&(NB&&&LBFFRKFFRKq!77D%%dgga$&&@7r%   )r  ra   r  r  r  r`   rK   rX   r   )r'   r(   r)   r*   ra  r  r  r#   r]   rZ   r,   r-   r%   r"   r  r    s:    IN8H:<QYVS[%)& Ar%   r  c                   (    \ rS rSrSS jrSS jrSrg)_FindSplitterMixini  Nc                    SnSn	S=pSnU R                  U5      n[        U5       GH  u  p[        US5      (       a4  SSKJn  [        UU5      (       a  X/R                  UR                  -   -  nMK  UR                  XS5      u  nnU[        ::  d
  U[        ::  a  Mv  [        UU5      nU(       d,  UR                  5       nU(       a  [        UU
-
  S5      nU	U-  n	OUb  UR                  5       Ul        SnX:  d  UU:  a  XUSU XS 4s  $ U	U-  n	X:  a  X9U-
  -
  nU(       ai  SSKJn  [        UU[        45      (       aL  UR                   R"                  nU[%        U['        U5      -  5      -  [        -   nUU:  a  UU-  nUUU-
  -  nUn [)        U5      R+                  XU5      nU(       d  XUSU XS 4s  $ XUSU USS -   USS XS-   S -   4s  $ UR-                  5       n
X-  n	GM     Ub  Xl        XU
-
  U/ 4$ !   Sn N^= f)r  r   r   r  r  r  N	Paragraph)_getContent	enumeraterH   r  r  rG  r  r  rb   r   r   r   r  reportlab.platypus.paragraphr  r   ry   r   r   r9  r\  rr   r~   r  )r!   r>   rg   rh   r  r  r  paraFixr  r   r  sBr  r  r  r   r  r`   ra   r  r_   r  r   nHrq   s                            r"   
_findSplit_FindSplitterMixin._findSplit  s!   W%Q<CAq''Ca))&&.0J((495CAa%x1e8XAaA$$&3qtA;qQ?q7G7G7IC$4~:q!uQrU22FA} A#&F!!Y|$<=="#''//$SE'N):%;;EAb5"-"#r"u,!!,,TR@A 1Ra52662Aq!uQqrU1qST7]BB"BGAM  P ?bOB$2~As   HHc                     / nUb  UOU R                   nU HJ  n[        U[        5      (       a!  UR                  UR	                  5       5        M9  UR                  U5        ML     U$ r   )r  rG  ListFlowabler  r  r   )r!   r  r  rw  r   s        r"   r  _FindSplitterMixin._getContent6  sR    *GA!L)))	 
 r%   r-   )r   NNTr   )r'   r(   r)   r*   r  r  r,   r-   r%   r"   r  r    s    0dr%   r  c                   T    \ rS rSrSr  SS jrS rS rS rS r	S	 r
S
 rSS jrSrg)ImageAndFlowablesi@  (combine a list of flowables and an ImageNc	                 x    [        U5      U l        Xl        X@l        X0l        X`l        XPl        Xpl        Xl        g r   )	r  r  _I_irpad_ilpad_ibpad_itpadr  	imageHref)	r!   r  r  imageLeftPaddingimageRightPaddingimageTopPaddingimageBottomPadding	imageSider  s	            r"   r#   ImageAndFlowables.__init__B  s1    (+'&(%
"r%   c                 \    [        U 5      nU R                  5         UR                  5         U$ r   )r   _resetrx  )r!   r  s     r"   r   ImageAndFlowables.deepcopyM  s"    J	r%   c                     [        U S5      (       a  U R                  nO*[        U S5      (       a  U R                  nOU R                  n[        R                  X5      $ )N_C1_C0)rH   r  r  r  r^  r~   )r!   rw  s     r"   r~   ImageAndFlowables.getSpaceAfterS  sH    4AT%  AA''//r%   c                 p    [        U R                  R                  5       [        R                  U 5      5      $ r   )r   r  r   r^  r    s    r"   r    ImageAndFlowables.getSpaceBefore\  s'    477))+J,E,Ed,KLLr%   c                 >    S H  n [        X5        M     g !    M  = f)N)	_wrapArgsr  r  )delattrr   s     r"   r  ImageAndFlowables._reset_  s"    *A +s   c                 |   U R                   nU R                  n[        U S5      (       aW  U R                  X4:X  a&  [	        USS 5      c  U R
                  U R                  4$ U R                  5         UR                  5         X4U l        UR                  X5        UR                  X5      u  pVXPl        X`l        U R                  nU R                  nU R                  n	U R                   n
X-
  U-
  U-
  =U l        nX-   U	-   nU[$        :  a!  U R'                  X;U5      u  pU l        U l        OUnSnX[$        -   :  a  / U l        U R,                  U l        [/        X5      =ol        Xl        U R*                  (       d  Xl        O#[3        U R*                  X5      u  nnUU-   U l        U R
                  U R                  4$ )Nr"  r>  r   )r>   r  rH   r"  rl   r4   r5   r  rC  r]   r?  _wI_hIr  r  r  r  _iWr   r  r  r  r  r   r  r  )r!   rg   rh   r>   r  r!  r"  ilpadirpadibpaditpadiWr_   r  r  W1r  s                    r"   r]   ImageAndFlowables.wrapf  sx   yyGG4$$~~
77GAnUY<Z<bzz$++--KKM#0	z&8"*R/%772Z%e8%)__TR%@"A$(ABX:DH}}DHB
"X
xxK9EBrR%DKzz4;;&&r%   c                 v   [        U S5      (       aK  U R                  nU R                  X4:w  d  [        USS 5      b   U R	                  5         UR                  5         U R                  X5      u  pEU R                  U:  a  / $ U R                  nU(       a=  US   R                  XU R                  -
  5      nU(       d  / nOUS   /nUSS  USS  -   nO/ n[        U R                  U R                  U-   U R                  U R                  U R                  U R                  U R                   U R"                  S9/U-   $ )Nr"  r>  r   r   )r  r  r  r  r  r  )rH   r  r"  rl   r  rC  r]   r  r  rp   r	  r  r  r  r  r  r  r  )	r!   rg   rh   r  r  r   r  rq   r  s	            r"   rp   ImageAndFlowables.split  s   4$$A~~
7771^TX;Y;e!!#IIj-88KXX1J488';<AtfqrU2ab6\C!GGHHSL%)[[&*kk$(KK'+{{"jjDNND   	r%   c           	      <   U R                   S:X  a*  X R                  -   nXPR                  -   U R                  -   nO*X R                  -   U R                  -
  U R                  -
  nUnU R
                  R                  XX0R                  -   U R                  -
  U R                  -
  5        U R                  (       a]  UR                  U R                  XSU R                  -   U R                  -
  U R                  -
  XPR                  -   X0R                  -   4SS9  U R                  (       a*  [        R                  XXcU R                  U R                  S9  U R                  (       a<  U R                   u  px[        R                  XX#U R"                  -
  U R                  US9  g g )Nr  r   )relative)r  r^   )r  r  r  r&  r4   r  rZ   r5   r  r'  r  linkURLr  r^  r(  r  r"  r  )	r!   r>   rK   rX   rY   IxFxr^   r_   s	            r"   rZ   ImageAndFlowables.drawOn  s,   ::v[[B[[488+BZZ(4BBtq}T[[8AB>>LL"mDKK.G.PRTW_W_R_abcncnan)oz{L|88d"dhhO88^^FBd!txxZRP r%   )r  r  r  r  r  r'  r(  r  r  r  r  r  r&  r"  r5   r  r4   )r   r  r   r  r  Nr   )r'   r(   r)   r*   r+   r#   r   r~   r   r  r]   rp   rZ   r,   r-   r%   r"   r	  r	  @  s6    2fg15	#0M"'H8Qr%   r	  c                   6    \ rS rSrSrSrS	S jrS rS
S jrSr	g)_AbsRecti  r   TNc	                 d    Xl         X l        X0l        X@l        X`l        Xpl        XPl        Xl        g r   )_x_yr%  r&  _strokeColor
_fillColor_strokeWidth_strokeDashArray)	r!   rK   rX   r4   r5   strokeWidthstrokeColor	fillColorstrokeDashArrays	            r"   r#   _AbsRect.__init__  s-    '#' /r%   c                     gr  r-   rf   s      r"   r]   _AbsRect.wrap  r:  r%   c           	         U R                   [        :  GaH  U R                  [        :  Ga2  U R                  =(       a$    U R                  S L=(       a    U R                  S:  nU(       d  U R
                  (       a  UR                  5         U(       a6  UR                  U R                  5        UR                  U R                  5        U R
                  (       a  UR                  U R
                  5        UR                  U R                  U R                  U R                   U R                  U(       a  SOSU R
                  (       a  SOSS9  UR                  5         g g g g Nr   r   )r  fill)r%  r   r&  r=  r?  r>  rQ   rS   rO  r   rT   r;  r<  rU   )r!   r>   rK   rX   rY   sts         r"   rZ   _AbsRect.drawOn  s    ;;ue!3""]t'8'8'D]IZIZ\]I]BT__ ''(9(9:%%d&7&78??%%doo6		$''$''$++dllr!WXdhdsds_`yz	{!!# % "4r%   )r>  r&  r=  r@  r?  r%  r;  r<  )r   NNNr   
r'   r(   r)   r*   ra  r  r#   r]   rZ   r,   r-   r%   r"   r9  r9    s    IN0$r%   r9  c                   .    \ rS rSrSrSrS rS rS rSr	g)		_ExtendBGi  r   Tc                 (    Xl         X l        X0l        g r   )r<  r&  _bg)r!   rX   r5   rl  r   s        r"   r#   _ExtendBG.__init__  s    r%   c                     gr  r-   rf   s      r"   r]   _ExtendBG.wrap  r:  r%   c                    U R                   nU R                  nU R                  nUR                  nUR                  U-
  UR
                  -
  nUR                  U-
  nU R                  nUR                  5       n	UR                  XXsXd5        g r   )
rQ  r<  r&  r  r%  r  _x1r>   getPageNumberrg  )
r!   r   rl  rs  rr  rm  rp  rq  r>   pns
             r"   r  _ExtendBG.frameAction  sr    XXggllwwllT!BHH,ii$yy!
		$SS-r%   )rQ  r&  r<  N)
r'   r(   r)   r*   ra  r  r#   r]   r  r,   r-   r%   r"   rO  rO    s    IN
	.r%   rO  c                   6    \ rS rSrSrSrS	S jrS rS
S jrSr	g)_AbsLinei  r   TNc                 X    Xl         X l        X0l        X@l        X`l        XPl        Xpl        g r   )r;  r<  rV  _y1r=  r?  r@  )r!   rK   rX   r  r  rA  rB  rD  s           r"   r#   _AbsLine.__init__  s(    '' /r%   c                     gr  r-   rf   s      r"   r]   _AbsLine.wrap  r:  r%   c                    U R                   (       a  U R                  b  U R                  S:  a  UR                  5         UR                  U R                   5        UR	                  U R                  5        UR                  U R                  U R                  U R                  U R                  5        UR                  5         g g g g r#  )r=  r?  rQ   rS   rO  r   r;  r<  rV  r]  rU   r!   r>   rK   rX   rY   s        r"   rZ   _AbsLine.drawOn  s    !2!2!>4CTCTVWCWNN 1 12d//0IIdggdggdhhtxx8 DX!>r%   )r=  r@  r?  r;  rV  r<  r]  )r   NNr   rM  r-   r%   r"   r[  r[    s    IN0 r%   r[  c                   V    \ rS rSrSr         SS jrSS jrS rS rS r	S	 r
S
rg)BalancedColumnsi  r
  Nc                    U=(       d    S[        U 5      -  U l        US:  a!  [        SU< SU R                  5       < 35      e[	        U5      U l        X l        XPl        Xpl        Xl	        Xl
        Xl        Xl        X@l        U[        -
  U l        X`l        Xl        Xl        Xl        UU l        UU l        UU l        UU l        g )NzBalancedColumns-%dr,  znCols should be at least 2 not z in )r   r  rI   
identitityr  r  _nColsr}   rf  _innerPadding_rightPadding_topPadding_bottomPaddingr   r   _neededr  endSlack_boxStrokeColor_boxStrokeWidth_boxFillColor
_boxMargin_vLinesStrokeColor_vLinesStrokeWidth)r!   r  nColsneededr   r}   r  leftPaddinginnerPaddingrightPadding
topPaddingbottomPaddingr  rn  boxStrokeColorboxStrokeWidthboxFillColor	boxMarginvLinesStrokeColorvLinesStrokeWidths                       r"   r#   BalancedColumns.__init__  s     ;02d8;	!8%PTP_P_Pabcc(+$'))%+&~( --)#"3"3r%   c                     SU R                   R                  < SU R                  < S[        [	        U 5      5      < U R                  5       < [        U SS5      =(       a    S[        U SS5      -  =(       d    S< S3	$ )Nr   z nCols=r   r  r   r  r   )r   r'   rh  r   r   r   rl   r  s     r"   r   BalancedColumns.identity$  sb    ,0NN,C,CT[[RUVXY]V^R_aeapaparVB'S\74r;R-RYWYY 	r%   c                     U R                   $ r   )r}   r    s    r"   r~   BalancedColumns.getSpaceAfter)  s    r%   c                     U R                   $ r   )r   r    s    r"   r   BalancedColumns.getSpaceBefore,  s    r%   c                   ^ ^C^D^E^F^G^H^I / nT R                   mGSSKJnJnJn  SSKJn  SSKJn  T R                  c  TGR                  OT R                  n	T R                  c  TGR                  OT R                  n
T R                  c  TGR                  OT R                  nT R                  c  TGR                  OT R                  nTGR                  nTGR                  nT R                  c  [        X5      OT R                  nUS-  nT R                   mET R"                  mHXTHS-
  -  -
  U	-
  U
-
  [%        TH5      -  mFUnX+U-   -  nT R'                  TETFTHU-  SS9u  nnnnU(       db  [)        T R+                  5       < S	U< S
U< STF< STHU-  < ST R,                   Vs/ s H  nUR.                  R0                  PM     sn< 35      e0 mDS8UDUEUFUHU 4S jjmISnU(       a  UnOSS KnUDUI4S jnSUR5                  S5      S-   S-  4UD4S jjn[7        [9        U[%        TH5      -  T R:                  S-  -   5      U5      nTI" U5        TDU   S   (       d,  U" UUU5      nU(       a  Uu  nnnnUnSnO]UnT R<                  nONU[%        TH5      -  nTI" U5        TDU   S   (       d+  U" UUU5      nU(       a  Uu  nnnnUnSnOUnT R<                  nU(       a   S5       eTI" UU5      u  nnnnTDR?                  5         US   / :X  a  US   / :X  a  U(       a  UUS   /US   nnTGR@                  n TGRB                  n!TGRD                  n"U!U-   U-   U-   n#UU-   U-   n$U#U$-
  n%U[%        TH5      -  n&U(       d  U(       a  U" U* U* 5      n'U" X5      n(OS =n'n(T RF                  b  T RF                  OTGRF                  n)U U-   TGR                  -   n*[I        TH5       V+s/ s HQ  n+U" U*U+U&-  -   U%U&U$U+(       d  U	OUUU+THS-
  :X  a  U
OUUST RJ                  U+4-  U)TGRL                  TGRN                  S9PMS     n,n+T RQ                  S5      mCTCc  U" ST R+                  5       -  5      e[S        TGSS 5      n-U-(       a  U-S   OS =n.n/ " UCUG4S jSU5      n0U/(       a  [U        U%U$U/TG5      n.URW                  U.5        TCRX                  n1URW                  U0" / U,U,S   5      5        U'(       a  URW                  U'5        T RZ                  =(       a"    T R\                  =(       a    T R\                  S:  =(       d    T R^                  n2T R`                  =(       a"    T Rb                  =(       a    T Rb                  S:  n3U2(       d  U3(       Ga  T Rd                  n4U4(       d  Sn4[g        U45      S:X  a  U4S   =n5=n6=n7n8Oz[g        U45      S:X  a  U4S   =n5n8U4S   =n6n7O\[g        U45      S:X  a  U4S   n5U4S   =n6n7U4S   n8O;[g        U45      S:X  a  U4S   n5U4S   n7U4S   n8U4S   n6O[)        S [i        U45      -  5      eU*U6-
  n9U,S   R@                  U,S   RD                  -   U7-   n:U%U8-
  n;U$U5-   U8-   n<U;U<-   n=U2(       a0  [k        U9U;U:U9-
  U<T R^                  T RZ                  T R\                  S!9n>U3(       a~  / n?[I        STH5       Hl  n+SU,U+   R@                  U,U+S-
     R@                  -   U,U+S-
     RD                  -   -  n@U?RW                  [m        U@U;U@U=T Rb                  T R`                  S"95        Mn     OU#n=U%n;U2(       a  URW                  W>5        U3(       a  URo                  W?5        T Rq                  5       nA[I        TH5       Hb  n+UU+   nBUB(       a7  [s        UUWBS#S$9nB[        WAUBRq                  5       5      nAURW                  UB5        U+THS-
  :w  d  MQ  URW                  U5        Md     URW                  U0" U-U1TG5      5        U.(       a;  U(       a  SnA[7        U%U;5      WA-
  U.l:        [        U#U=5      U.Rt                  -
  U.l;        U((       a  URW                  U(5        U(       a  URW                  [y        U40 S%TH_S&T Rz                  _S'T R|                  _S(T R:                  _S)T RF                  _S*T R                  _S+T R                  _S,T R                  _S-T R                  _S.T R                  _S/T RJ                  S0-   _S1T R<                  _S2T RZ                  _S3T R\                  _S4T R^                  _S5T Rd                  _S6T R`                  _S7T Rb                  _65        U$U4$ s  snf s  sn+f )9Nr   )r  r`  r  Framer  rF   r   F)r   z cannot make initial split aW=z aH=z ie cw=z ah=z	
content=c           	        > U T;  a  / nSnSnS nU(       a  TS-
  OSn[        T5       H  nTR                  TTXSS9u  pp[        X85      n[        XI5      nUR                  U
5        Xv:X  a?  TR                  TTSU -  USS9u  ppUSU-   U -  ::  a  UR                  U5        U S-
  n/ n  OUnM     U S[	        U/ :g  5      -  -   U/ :H  X4X%44TU '   TU    S   $ )	Nr   r,  r   F)r  r   r   gư>i )r   r  r   r   r   )ahrn  r  r`   ra   cnicheckr  wihic0c1wchccc0cc1_fresr>   cwru  r!   s                   r"   	splitFunc5BalancedColumns._generated_content.<locals>.splitFuncJ  s   $,q"uA%)__T"RSX_%YNBBA	AA	AHHRLy+/??41R4PR[`?+a((
B.HHRL "4A!#B!B & vc"b&k11"b&!aCb	9Q<r%   c                 $   > T" U 5        TU    S   $ r#  r-   )r  r  r  s    r"   r  0BalancedColumns._generated_content.<locals>.funch  s    "Ry|#r%      r,  c                 z  > X"U-
  U-  -
  nXU-
  U-  -   n[        X-
  5      U:  a>  U " U5      U " U5      :  a  UnOUnX"U-
  U-  -
  nXU-
  U-  -   n[        X-
  5      U:  a  M>  TR                  5        VVV	s/ s H  u  pxo(       d  M  XxU	4PM     n
nnn	U
(       a  U
R                  5         U
S   S   $ g s  sn	nnf )Nr   r,  )r  valuessort)r   rM   r  tolgrr  rV  rK   tfvr  r  s              r"   gss/BalancedColumns._generated_content.<locals>.gssl  s    Q"$Q"$!%j3&tad{ UbL(AUbL(A !%j3& -2LLNAN&!qbXa1XNAFFHQ47N	 Bs   9B6
B6g?zunexpected non-empty C2z%s-%d)rw  r{  ry  rz  r   r  r   _debugpageTemplatez&%s used in non-doctemplate environmentrb  r   c                   >   > \ rS rSrSr/ / S4S jr Y 4U4S jjrSrg)3BalancedColumns._generated_content.<locals>.TActioni  z?a special Action flowable that sets stuff on the doc template TNc                 R    [         R                  U 5        Xl        X l        X0l        g r   )r/   r#   bgsr  r   )r!   r  r  r   s       r"   r#   <BalancedColumns._generated_content.<locals>.TAction.__init__  s    !!$'r%   c                    > U R                   Ul        U R                  Tl        UR	                  U R
                  R                  5        U R                  Tl        g r   )r  framesr  rb  handle_currentFramer   r   )r!   docr  r   s      r"   rc  9BalancedColumns._generated_content.<locals>.TAction.apply  s:    66"&((''		2"&((r%   )r  r  r   )r'   r(   r)   r*   r+   r#   rc  r,   )r  r   s   r"   TActionr    s!    Q#%T  "# + +r%   r  )r   r   r   r   r     zInvalid value %s for boxMargin)rC  rB  rA  )rA  rB  r  )r  ru  rv  r   r}   r  rw  rx  ry  rz  r{  r  z-1rn  r|  r}  r~  r  r  r  r   )?r   r  r  r`  r  reportlab.platypus.framesr  r  rf  rj  rk  rl  r  r  ri  r   r>   rh  r9  r  rI   r   r  r   r'   r  r  r8  r   r}   rn  clearrV  r]  r%  r  r   r  _oASpacer  r   rl   rO  r   r  ro  rp  rq  rs  rt  rr  r   r   r9  r[  r  r~   r  r<  r&  re  rm  r   )Jr!   r^   r_   Gr  r`  r  r  r  lpadrpadtpadbpadleftExtraIndentrightExtraIndentgaphgapaH0r  r  r  C2r   rn  r   r  r  r  r  r.  rw  r  r  r  fwftopfhy2rT  	indenter0	indenter1r  obxr  r  BGsxbgrl  r  	oldFramesdoBoxdoVLinesobmobmtobmlobmrobmbobx1obx2oby2obhoby1boxvLinesvlxsaCir  r  r>   r  r   ru  r  sJ   `                                                                  @@@@@@@r"   r  "BalancedColumns._generated_content/  s	   XX3=%)%6%6%>u!!DDUDU&*&8&8&@u""dFXFX$($4$4$<u  $BRBR'+':':'Bu##H[H[00 22 $ 2 2 :c$n@R@R3wyya= 4'$.e<
Tkood2eBhuoE"S2br7;}}E}!--}E 
 	  	 . A $ "#		!q(8A'= & C5<(;;<R@AaL8A;QrN%&NAr3A$HA#}}He_"Ry|D2A)*2sB#(#'==4446!!X.B2Q48!bR!IqtrAYYYY\\$wt|B$YBY%,. /!13C2CDI BI$((I	*.*;*;*GT&&UM_M_ !3!33 /4El< /; 3qt8Br"()Dt4%&aZTTdTYYqM))%*^^||% /; 	
 < 


/9FXYYeK-!3r7t+b	+ 	+n 	+  Br"U+CHHSMHH		Aad#$ahhy)%%Z$*>*>Z4CWCWYZCZq_c_q_q**et/F/Fe4KbKbdeKeH//Ci3x{,/F22t2dTS1!!f$t!!f$tS11v!!f$t1vS11v1v1v1v !ADI!MNN:DR599QrU\\)D0Dd7DT'$,C8DtD$t)S"&"4"4$($8$8$($8$8
 qAqtxx!AaC&**4QqsV]]BCCMM(3tCI`I`mq  nE  nE  #F  G ( DD!((3-QXXf%!uA1B Brx8B,,./%'z$  	
Yu-.2D\B&CFd4.3661CKahhy)HH % <<595E5ERVRaRa!%!2!2 !% 1 1 "&!3!3	
 "&!3!3  $// #'"5"5 4 37-- $(#7#7 $(#7#7 "&!3!3 #oo '+&=&= '+&=&=$ 1us FJ<s    d?Aec                 <   [        U SS 5      nX R                  U R                  -   [        -
  :  a  [	        5       U /nSnO;U(       d  SSKJn  U" SSUSSSSSS9U l        U R                  X5      u  pTU(       d  U ?U(       a  UR                  " U6   S[        XR5      4$ )Nr   r   r  i)rw  ry  rz  r{  )rl   r   rm  r   ry  r  r  r   r  r  r8  )r!   r^   r_   
self_framer  r  r  s          r"   r]   BalancedColumns.wrap"  s    T(40
t||+E11d#AB;#Aa:!RS/0qB++B2EBKz77;R|r%   )rl  rq  rr  ro  rp  r  r   ri  rf  rh  rm  rj  rk  rs  rt  rn  r  r  r}   r   )r,  r  r   r   NNNNNNr   r  Nr   NNNNr   )r'   r(   r)   r*   r+   r#   r   r~   r   r  r]   r,   r-   r%   r"   re  re    sA    2X\cg!""4@
 qfr%   re  c                   8    \ rS rSrSrSrSrS rS rS r	S r
S	rg
)AnchorFlowablei6  zcreate a bookmark in the pdfr   Tc                 >    [         R                  U SS5        Xl        g r#  )re  r#   _name)r!   r  s     r"   r#   AnchorFlowable.__init__:  s    Qq!
r%   c                 R    U R                   R                  < SU R                  < S3$ )Nrk  r   )r   r'   r  r    s    r"   r   AnchorFlowable.__repr__>  s    >>224::>>r%   c                     gr  r-   r  s      r"   r]   AnchorFlowable.wrapA  r:  r%   c                 R    U R                   R                  U R                  SS5        g r#  )r>   bookmarkHorizontalr  r    s    r"   r?   AnchorFlowable.drawD  s    		$$TZZ!4r%   )r  N)r'   r(   r)   r*   r+   ra  r  r#   r   r]   r?   r,   r-   r%   r"   r  r  6  s#    &IN?5r%   r  c                   ,    \ rS rSrS rS rS rS rSrg)_FBGBagiG  c                 &   [        U5      n[        U R                  [        5      =(       a    X0R                  ;   =(       d    X0R                  :H  =(       a<    [        U5      U R                  :H  =(       a    U R
                  UR                  5       :H  $ r   )r   rG  fidr  cidrX  rW  )r!   r   r>   r  s       r"   matches_FBGBag.matchesH  sf    iDHHT*>shhO#xx- M4$((*M/3ww8J8J8L/L	Nr%   c                     UR                   U R                     R                  5       U l        [	        [
        U R                  SS 5      $ )Nr   r  )_codecodePosrp   _instr  r9  r@   s     r"   getDims_FBGBag.getDimsM  s6    ZZ-335
5Aa))r%   c                     [        X#XE5      /U R                  SS& SR                  U R                  5      UR                  U R                  '   g )Nr   r   )r   r  r   r  r  )r!   r>   rK   rX   r`   ra   s         r"   setDims_FBGBag.setDimsQ  s9    !!a?+

1Q#&88DJJ#7

4<< r%   c           	         [        U5      [        :  Ga  [        U5      [        :  Ga  UR                  5       nU R                  [	        U5      :X  aV  U R
                  [	        U5      :X  a=  U R                  U:X  a-  U R                  U5      u  ppU R                  XXJX-   U-
  5        g UR                  5         U R                  nU(       a  UR                  U5        U R                  nUb  US:  a  S OU R                  nU(       aF  UR                  U5        UR                  U5        U R                   nU(       a  UR#                  U5        [	        U5      U l        [	        U5      U l        Xpl        [%        UR&                  5      U l        UR+                  X4XVU(       a  SOSU(       a  SOSS9  UR-                  5         g g g rI  )r  r   rW  r  r   r  rX  r  r  rQ   rC  r   rA  rB  rS   rO  rD  rR  r   r  r  rT   rU   )r!   r>   r   rq  rs  rp  rr  rX  oxoyowohfbgcr  scdas                   r"   rg  _FBGBag.renderU  sO   s8E>c#hun##%BxxE"txxD'9dggrk"ll40bTSBE#I6 ~~%%d+%%Z2a4TT5E5E''+%%b)--BR(e9d8"4::		##ba$QTU	V!!#/ ->r%   )r  r  r  r  rX  N)	r'   r(   r)   r*   r  r  r  rg  r,   r-   r%   r"   r  r  G  s    N
*8$r%   r  c                   2    \ rS rSrSrSrS	S jrS rS rSr	g)
FrameBGio  a  Start or stop coloring the frame background
left & right are distances from the edge of the frame to start stop colouring.
if start in ('frame','frame-permanent') then the background is filled from here to the bottom of the frame and immediately discarded
for the frame case.
r   Nc                     [         R                  U SS5        X@l        U(       a9  SSKJn  U" U5      U l        U" U5      U l        Xl        XPl        X`l	        Xpl
        g g )Nr   )_evalMeasurement)re  r#   re  r  r  r  r  rC  rA  rB  rD  )	r!   rC  r  r  re  rA  rB  rD  r  s	            r"   r#   FrameBG.__init__v  sQ    Qq!
G(.DI)%0DJJ**#2  r%   c                     U R                   R                  < SSR                  SR                  5        Vs/ s H  o< S[	        XS 5      < 3PM     sn5      < S3$ s  snf )Nrk  rl  zstart color left right=r   )r   r'   r   rp   rl   )r!   r  s     r"   r   FrameBG.__repr__  sw    >>22499  kC  kI  kI  kK  >L  kKef7SWZ^K_>`  kK  >L  4M  N  	N  >Ls   Ac                    [        U SS 5      nUc  g U R                  (       a  U R                  nU R                  nUc  SOUnUR                  R                  [        U R                  U R                  U R                  U R                  S;   a  U R                  OS U R                  U R                  U R                  SSSS SS95        g UR                  (       a  UR                  R                  5         g g )Nr   r   )r   zframe-permanentr   T)r  r  rC  re  rB  rA  rD  r  r  rX  r  rd  )rl   re  rB  rA  rb  r   r  r  r  rC  rD  r  )r!   r   r  r  s       r"   r?   FrameBG.draw  s    Xd+=&::!!B!!BzrBOO""TYY&*jj*.**48JJB]4]djjcg,0,<,<,0,<,<040D0D&'&'%'*.'+"# __OO! r%   )rC  r  r  re  rB  rD  rA  )Nr   r   TNNN)
r'   r(   r)   r*   r+   ra  r#   r   r?   r,   r-   r%   r"   r
  r
  o  s    
 I
3N"r%   r
  c                   4    \ rS rSrSrSr/ SSS4S jrS rS	rg
)FrameSplitteri  a0  When encountered this flowable should either switch directly to nextTemplate
if remaining space in the current frame is less than gap+required or it should
temporarily modify the current template to have the frames from nextTemplate
that are listed in nextFrames and switch to the first of those frames.
r   r  r  Tc                 T    Xl         U=(       d    / U l        X0l        X@l        XPl        g r   )r|  
nextFramesr  requiredadjustHeight)r!   r|  r  r  r  r  s         r"   r#   FrameSplitter.__init__  s$    ($* (r%   c                 N   U R                   nSSKJnJnJn  U" U R
                  5      /nX R                  U R                  -   [        -
  :  a  UR                  [        5       5        GOU R                  S5      nUc  U" SU R                  5       -  5      eU V	s/ s H   oR                  U R
                  :X  d  M  U	PM"     n
n	U
(       d(  U" U R                  5       < SU R
                  < S35      eU
S   n
U
R                   Vs/ s H   oR                  U R                  ;   d  M  UPM"     nnU Vs/ s H  oR                  PM     nnU R                   Vs/ s H  oU;  d  M
  UPM     nnU(       aW  U" U R                  5       < SU< SU
R                  < S	U
< S
U
R                   Vs/ s H  oR                  PM     sn< 3	5      eU R                  S5      n
XR                   U
R                  4S jnXl        X R                  -
  n[#        U5       H<  u  nn[%        U5      nU R&                  (       a  Xl        UR+                  5         XU'   M>     Xl        UR                  U" US   R                  5      5        UR,                  " U6   gs  sn	f s  snf s  snf s  snf s  snf )Nr   )NextPageTemplateCurrentFrameFlowabler  pageTemplatesz(%s called in non-doctemplate environmentz.nextTemplate=z
 not foundz frames=z not found in pageTemplate(z)
z has frames r  c                 ,    XBl         X2l        U" X5        g r   )r  onPage)r>   r  r  r  r  s        r"   unwrap"FrameSplitter.wrap.<locals>.unwrap  s    "t r%   r  )r   r  r  r  r  r|  r  r  r   r   ry  r   r   r   r  r  r  r  r   r  r5   r  r  )r!   r^   r_   r   r  r  r  r  	templatesr  r  r   r  Nr   ra   r  s                    r"   r]   FrameSplitter.wrap  sL   ddD--.
/hht}}$U**HHY[! --o>I !"LT]]_"\]]#?)QttT->->'>q)A?!DMMOTXTeTe"fggdA((>(Qdddoo&=q(A>QttQA//8/QaZq/A8!dhdqdqdstuvwvzvz{|  MN  MU  MU  ~V  MU  HI  C  C  MU  ~V  #W  X  X##N3A"#88ahh ! HkA |!q'$$qh
!	 $
 HHH)!A$''23##Q'1 @ ?8 ~Vs0   J:JJ%J1J	J#J*J")r  r  r  r|  r  N)	r'   r(   r)   r*   r+   ra  r#   r]   r,   r-   r%   r"   r  r    s"    
 I02RVZ )$r%   r  )_type2formatteru   •u   ●u   ■u   ○u   ◆u   ❖u   ➤u   ❇u   ❏u   ★)

bulletcharcirclerN  discdiamond	diamondwx
rarrowheadsparkle	squarelrs	blackstarc                    US:X  a  [         R                  X 5      nO[        U   " [        U 5      5      nU(       aC  [	        U[
        5      (       a  X#-  nU$ [        U5      (       a
  U" U5      nU$ [        SU-  5      eU$ )Nbulletz!unexpected BulletDrawer format %r)_bulletNamesr5  r%  r   rG  r   callablerI   )valuetypeformatr  s       r"   _bulletFormatr6    s    X~U)D!#e*-fX&&
A
 H	 fq	A H @6IJJHr%   c                   <    \ rS rSr          SS jrSS jrSrg)BulletDraweri  Nc                 |    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        g r   )
r3  _bulletAlign_bulletType_bulletColor_bulletFontName_bulletFontSize_bulletOffsetY_bulletDedent
_bulletDirr6  )r!   r3  bulletAlign
bulletTypebulletColorbulletFontNamebulletFontSizebulletOffsetYbulletDedent	bulletDirbulletFormats              r"   r#   BulletDrawer.__init__  s>     
'%'--+)#)r%   c                    U R                   nU(       d  g UR                  5         UR                  X45        UR                  U R                  -
  U R
                  -   nU R                  S:X  a'  UR                  UR                  -
  U R                  -   nOUR                  U R                  -
  nUR                  U R                  U R                  5        UR                  U R                  5        U R                  n[!        X`R"                  U R                   5      nUS:X  a  UR%                  X4U5        OUS:X  a  UR'                  X4U5        OUS;   a  UR)                  X4U5        OiUR+                  S5      (       d  UR+                  S5      (       a/  USS  R-                  5       =(       d    SnUR/                  X4Xh5        O[1        S	U-  5      eUR3                  5         g )
Nrtlr  r  )centercentrenumericdecimal   .zInvalid bulletAlign: %r)r3  rQ   rR   r5   r>  r?  rA  r4   _rightIndentr@  _leftIndentr   r=  r   r<  r:  r6  r;  
drawStringdrawRightStringr   
startswithr   drawAlignedStringrI   rU   )	r!   indenterr>   rK   rX   rY   r3  rB  pcs	            r"   rZ   BulletDrawer.drawOn  s   

fqOOD0001D1DD??E!!6!669K9KKA$$t'9'99AT))$*>*>?$++,''e$4$4T5G5GHOOA&'!  U+//""1u-##I..+2H2H2S2SQR&&(/CB""1u06DEEr%   )
r:  r<  r@  rA  r=  r>  r6  r?  r;  r3  )
0r  1black	Helveticar   r   r   ltrNr   )r'   r(   r)   r*   r#   rZ   r,   r-   r%   r"   r8  r8    s*     &" '#.#%"#!"#!%*.r%   r8  c                     [        XR                  U R                   5      n[        XR                  U R                  5      $ r   )r6  r;  r   r=  r>  )r  r3  s     r"   _computeBulletWidthrc  #  s/    %aoo>Eu..q/@/@AAr%   c                   p    \ rS rSrSR	                  5       rSS jrS rSS jrS rS r	S r
S	 rSS jrSrg
)
DDIndenteri'  z/_flowable _leftIndent _rightIndent width heightc                 D    Xl         X l        X0l        S U l        S U l        g r   )	_flowablerU  rT  r4   r5   )r!   flowabler   r#  s       r"   r#   DDIndenter.__init__)  s!    !%'
r%   c           	          U R                   R                  XR                  -
  U R                  -
  U5      nU Vs/ s H"  n[	        UU R                  U R                  S9PM$     sn$ s  snf )N)r   r#  )rg  rp   rU  rT  re  )r!   r^   r_   rq   r  s        r"   rp   DDIndenter.split0  sp    NN  $4$4!4T5F5F!FK
 $%	 $%a 1#'#3#3$($5$5 $%	 	 s   )A&c           
          U R                   R                  XU R                  -   U[        SX@R                  -
  U R                  -
  5      5        g r#  )rg  rZ   rU  r   rT  rb  s        r"   rZ   DDIndenter.drawOn9  s?    dT%5%5#5aAcBRBR>RSWSdSd>d8efr%   c                     U R                   R                  XR                  -
  U R                  -
  U5      u  p4X0R                  -   U R                  -   U l        X@l        U R                  U4$ r   )rg  r]   rU  rT  r4   r5   r!   r^   r_   r`   ra   s        r"   r]   DDIndenter.wrap<  s\    nn!!"%5%5"5d6G6G"GL'''(9(99
zz!|r%   c                     XR                   ;   a   U R                  U   $ [	        U R
                  U5      $ ! [         a'    US;  a  [        U < SU SU R                   35      e NFf = f)Nr   r}   z has no attribute z dict=)_IndenterAttrsrH  KeyErrorrI  rl   rg  r   s     r"   rJ  DDIndenter.__getattr__B  sx    ###`}}Q'' t~~a((  `88(D83EaSt}}o)^__ 9`s   6 .A'&A'c                 l    XR                   ;   a  X R                  U'   g [        U R                  X5        g r   )rs  rH  setattrrg  r!   rM   r  s      r"   __setattr__DDIndenter.__setattr__K  s(    ### MM!DNN1'r%   c                 j    XR                   ;   a  U R                  U	 g [        U R                  U5        g r   )rs  rH  r#  rg  r   s     r"   __delattr__DDIndenter.__delattr__Q  s(    ###a DNN1%r%   Nc                 n    U R                   R                  < SU R                  R                  U5      < 3$ )Nz containing )r   r'   rg  r   r  s     r"   r   DDIndenter.identityW  s'    %)^^%<%<T^^=T=TU[=\]]r%   )rg  rU  rT  r5   r4   r  r   r   )r'   r(   r)   r*   rp   rs  r#   rZ   r]   rJ  ry  r|  r   r,   r-   r%   r"   re  re  '  s:    FLLNNg)(&^r%   re  c                   N    \ rS rSrSR	                  5       rSS jrS rS	S jrSrg)

LIIndenteriZ  zN_flowable _bullet _leftIndent _rightIndent width height spaceBefore spaceAfterNc                 v    Xl         X@l        X l        X0l        S U l        S U l        Ub  XPl        Ub  X`l        g g r   )rg  _bulletrU  rT  r4   r5   r   r}   )r!   rh  r   r#  r0  r   r}   s          r"   r#   LIIndenter.__init__\  sB    !%'
"*!(O "r%   c                 L   U R                   nUR                  XR                  -
  U R                  -
  U5      n[	        U5      S:  a  [        US5      (       ao  [	        UR                  R                  5      n[	        US   R                  R                  5      n[        [        USS 5      SS 5      S:X  a  XeS-
  :  d  XeS-
  :X  a  / nU(       aQ  U Vs/ s HC  n[        UU R                  U R                  XtS   L =(       a    U R                  =(       d    S S9PME     sn$ / $ s  snf )	Nr   r%  r   ry   	alignmentr  r,  )r   r#  r0  )rg  rp   rU  rT  r   rH   r%  r   rl   r  r  )r!   r^   r_   r   rq   cnlnnlr  s           r"   rp   LIIndenter.splith  s   NNGGB'''(9(992>q6!8(++ahhnn%Cadkk''(C740TBAE#TUPU,U|  $%
 $%a	 1#'#3#3$($5$5"#t)"<"D $% 	 	 s   A
D!c           
          U R                   (       a  U R                   R                  XX#S5        U R                  R                  XU R                  -   U[	        SX@R                  -
  U R
                  -
  5      5        g r#  )r  rZ   rg  rU  r   rT  rb  s        r"   rZ   LIIndenter.drawOnz  s\    <<LL!a0dT%5%5#5aAcBRBR>RSWSdSd>d8efr%   )r  rg  rU  rT  r5   r}   r   r4   )r   r   NNNr   )	r'   r(   r)   r*   rp   rs  r#   rZ   r,   r-   r%   r"   r  r  Z  s     ekkmN
)$gr%   r  )	ListStylec                        \ rS rSr SS jrSrg)ListItemi  Nc           	         [        U[        [        45      (       d  U4nXl        0 =o@l        U(       aB  [        U[
        5      (       d'  [        U R                  R                  < SU< S35      eX l	        [
        R                   H3  nXS;   a  UR                  U5      nOU(       a  [        X%5      nOM/  XdU'   M5     S H(  nUR                  U[        X%S 5      5      nUc  M$  XdU'   M*     g )Nz style argument (z) not a ListStyle)r3  r   r}   )rG  r  r  
_flowables_paramsr  rI   r   r'   _styledefaultsr5  rl   )r!   r  ry   r  paramskr  s          r"   r#   ListItem.__init__  s    " )T%L11"I# ""eI.. T^^MdMdej!kllK##AyHHQKE$1I $ 7A75401A}q	 7r%   )r  r  r  r   rZ  r-   r%   r"   r  r    s     'r%   r  c                       \ rS rSrS rSrg)	_LIParamsi  c                 4    Xl         X l        X0l        X@l        g r   )rh  r  r3  first)r!   rh  r  r3  r  s        r"   r#   _LIParams.__init__  s     

r%   )r  rh  r  r3  NrZ  r-   r%   r"   r  r    s    r%   r  c                   b    \ rS rSrSr  SS jr\S 5       rS rS r	S r
SS	 jrSS
 jrS rSrg)r  i  1aAiINc                    Xl         U(       a=  [        U[        5      (       d"  [        SU R                  R
                  -  5      eX0l        [        R                  R                  5        H/  u  pV[        U SU-   UR                  U[        X5U5      5      5        M1     S H0  nUR                  U[        X5S 5      5      nUc  M$  [        XU5        M2     SnUc3  [        U SS 5      nUc#  U R                  S:X  a  SnSnOU R                  nSnU R                  S:w  aw  U(       a6  U H/  nX`R                  ;  d  M  [        S	U< S
U R                  < 35      e   O:U R                   H*  nX`R                  ;  d  M  [        SU R                  -  5      e   X l        U=(       d    [        U[        [         45      U l        S U l        S U l        UR)                  SS 5      U l        g )Nz!%s style argument not a ListStyler  rr  F_startr0  r&  Tzinvalid start=z or bullettype=zinvalid bullettype=%rcaption)r  rG  r  rI   r   r'   ry   r  itemsrw  r5  rl   r;  _numberStylesr  r  r  _auto_list_content_dimsr  _caption)r!   r  re  ry   r  r  r  r^  s           r"   r#   ListFlowable.__init__  s   $ $eI.. !Dt~~G^G^!^__J%%++-CADQtxx'%!*<=> . .A75401A}q! .
 =D$/E}##X-(ED ,,EDX%A 2 22(PUVZVfVf)ghh  ))A 2 22()@4CSCS)STT * ;ZtEl;
!
40r%   c                 b    U R                   c  U R                  5       U l         U ?U R                   $ r   )r  r  r  r    s    r"   r  ListFlowable._content  s0    %!%!1!1!3D!!!r%   c                     U R                   U:w  a3  [        U R                  XR                  5      u  U l        U l        Xl         U R                  U R
                  4$ r   )r  r  r  r>   r4   r5   r  s      r"   r]   ListFlowable.wrap  sB    ::r>&1$--99&M#DJJzz$++%%r%   c                     U R                   $ r   rz  r  s      r"   rp   ListFlowable.split  s    }}r%   c           
   #     #    U R                    GH  n[        U[        [        45      (       aD  U(       a;  [	        U5       H*  u  p#US:H  =(       a    [        U[
        5      (       + U4v   M,     Ma  Mc  [        U[        5      (       Ga!  UR                  nU(       dI  [	        UR                   5       H.  u  p#[        U[
        5      (       a  [        S5      eUS:H  U4v   M0     M  UR                  5       nUR                  SS 5      nUR                  SS 5      nUR                  SS 5      n[        UR                   5      S-
  n[	        UR                   5       HK  u  p#UR                  5       n	U(       d  Ub  XiS'   X(:X  a  Ub  XyS'   U(       a  S nS[        X9XRS:H  5      4v   MM     GM  [        U[
        5      (       + U4v   GM     g 7f)Nr   z"LIIndenter not allowed in ListItemr3  r   r}   r   )r  rG  r  r  r  r  r  r  rI   r   r  r   r  )
r!   r   r  zr  r3  r   r}   r  r  s
             r"   _flowablesIterListFlowable._flowablesIter  su    A!T%L)) )!dC:a
+C'CQFF !-  Ah'' )!,, 7%a
33",-Q"RRdAg !8
 $[[]F"JJwt4E"(**]4"@K!'L!>JALL)A-A )!,, 7"KKM [%</:m,4J$:.8lODe1uT!::: !8 %Qz22A559 !s   GGc           	          U(       ag  UR                  SU R                  5      nUR                  SU R                  5      nUR                  SS 5      nUR                  SS 5      n[        XXRXgS9$ [        XR                  U R                  U5      $ )Nr   r#  r   r}   rr  )r5  rU  rT  r  )r!   rh  r0  r  r   r#  r   r}   s           r"   _makeLIIndenterListFlowable._makeLIIndenter	  s|    L1A1ABJ **]43D3DEK **]48KL6Jh+Q\ssh'7'78I8I&QQr%   c                    ^ ^^ Tc  U 4S jnO[        TSS 5      mUU U4S jn[        UU" S5      U" S5      U" S5      U" S5      U" S5      U" S	5      U" S
5      U" S5      U" S5      S9
$ )Nc                 "   > [        TSU -   5      $ Nr  r   )rM   r!   s    r"   getp&ListFlowable._makeBullet.<locals>.getp)	  s    tCE**r%   ry   c                 ~   > U T;   a  TU    $ T(       a  U TR                   ;   a  [        TU 5      $ [        TSU -   5      $ r  )rH  rl   )rM   r  r!   ry   s    r"   r  r  -	  s=    ;vay 0Q%..0a2HtCE**r%   rB  rC  rD  rE  rF  rG  calcBulletDedentrI  rJ  )
r3  rB  rC  rD  rE  rF  rG  rH  rI  rJ  )rl   r8  )r!   r3  r  r  ry   s   ` ` @r"   _makeBulletListFlowable._makeBullet'	  s    >+ F740E+
  $] 3#L1 $] 3#'(8#9#'(8#9"&"7!%&8!9";/!%n!5 	r%   c           	      
   U R                   nU R                  n[        U[        [        45      (       a  UnUS   nOU/nUS   n[        US;   5      nU(       a   [        U5      nU R                  nUS:X  Gav  U R                  nU R                  nUS:X  a  US:X  a  U R                  nGODUS:X  a  U R                  nGO0Un	Sn
U R                  5        H  u  pU(       a$  [        U
[        X	5      5      n
U(       a  X-  n	M.  M0  [        U[        5      (       d  MG  UR                  nU(       aE  UR                   U:X  a4  [        U
[        XR"                  5      5      n
[        UR"                  5      n	O[        U
[        X	5      5      n
U(       d  M  X-  n	M     US:X  a)  US:X  a  U R                  U
-
  nO;U R                  U
S-  -
  nO(US:X  a  U R                  U
-
  nOU R                  U
S-  -
  nX`l        / nUR&                  nSnU R                  5        GH  u  p[        U[(        5      (       a  UR                  n[        U[        [        45      (       a  US   nUU;   aS  UR*                  (       a@  UR-                  U5      S-   nX4S  US U -   Ul        UR                  S   nU(       a  XLl         OUn0 nU(       d  US-  n[/        U S	S 5      nUb  UUS	'   U(       a4  U" U R1                  XR3                  U5      US
95        U(       a  X%-  nM  M  [        U[        5      (       a  UR                  nU(       aC  UR                   U:w  a  [5        SUR                   < SU< 35      e[        UR"                  5      nO U R3                  U[/        USS 5      S9Ul        U(       a3  [        UR6                  R9                  S	S5      W5      UR6                  S	'   U" U5        U(       a  X%-  nGM  GM  [        U[:        5      (       a  UR=                  UR>                  5        U R1                  UR@                  S US
9nURB                  (       aV  UR"                  b  UR"                  nU(       a  [        U5      nU R3                  X,R>                  5      Ul        U(       a  X%-  nU" U5        GM  U" U R1                  US US
95        GM     [/        U SS 5      nUb8  US   n[        UR6                  R9                  SS5      U5      UR6                  S'   U RD                  (       a  URG                  SU RD                  5        U$ !   Sn GN= f)Nr   r  r   r^  ra  r  r  rF   r   )r0  r  zIncluded LIIndenter bulletType=z != OrderedList bulletType=r  )r  r}   r   )$r;  r  rG  r  r  r   r@  r:  rA  rU  rT  r  r   rc  r  r  rC  r3  _calcBulletDedentr   r  r  indexrl   r  r  rI   rH  r5  r  updater  rh  r  r  r  )r!   btr3  r  autovincbdaligndirtvaluemaxWrV  r   r  rq   aSr  fstartfparamsr   r  r}   s                         r"   r  ListFlowable._getContent?	  s   eT%L))F1IEWFq	"- E
 v:%%E//CEzeVm%%&& ..0CA"4(;D(HI3#Aj11II ||R/'*40CAgg0N'O),QWW#&t,?,L#MD3 1 :g~!--4!--S8F]**T1B**T#X5B!#XX
&&(CA!L))fd5\22#AYFV#ww &U 3A 5#)&>&%.#@ ! &GQ%d=>*-8GM*4''1A1A%1HPW'XY3Aj))II||R'(mnmymyz|)}~~LE $ 0 0gaQU>V 0 WAI03AJJNN=QR4ST_0`AJJ}-13Ai((qxx(((4w(O77ww* !E
 $ 0 0xx @AIELE14''W'EF] )` T,t4
!eA'*1::>>,q+I*'UAJJ|$==!((1T]]3Es   U   U)
r  r  r  r  r  r  r  r5   ry   r4   r  r   )r'   r(   r)   r*   r  r#   r   r  r]   rp   r  r  r  r  r,   r-   r%   r"   r  r    sI    M 91v " "&6>R0or%   r  c                   F    \ rS rSrSrS rS rS rSS jrS r	S r
S	 rS
rg)	TopPadderi	  zwrap a single flowable so that its first bit will be
padded to fill out the space so that it appears at the
bottom of its framec                      XR                   S'   g )N_TopPadder__f)rH  r   s     r"   r#   TopPadder.__init__	  s    )*o&r%   c                 d    U R                   R                  X5      u  p4X$-
  U R                  S'   X44$ )N_TopPadder__dh)r  r]   rH  ro  s        r"   r]   TopPadder.wrap	  s.    hhmmB"*,$&'s
r%   c                 |    U R                   R                  X5      n[        U5      S:  a  [        US   5      US'   U$ )Nr   r   )r  rp   r   r  )r!   r^   r_   rq   s       r"   rp   TopPadder.split	  s5    HHNN2!q6!8QqT?AaDr%   c           
      r    U R                   R                  XU[        SU R                  S-
  5      -
  U5        g )Nr   rv  )r  rZ   r   r  rV   s        r"   rZ   TopPadder.drawOn	  s*    3q4#8!8=r%   c                 0    [        U R                  X5        g r   )rw  r  rx  s      r"   ry  TopPadder.__setattr__	  s    r%   c                 .    [        U R                  U5      $ r   )rl   r  r   s     r"   rJ  TopPadder.__getattr__	  s    txx""r%   c                 0    [        U R                  U5        g r   )r#  r  r   s     r"   r|  TopPadder.__delattr__	  s    r%   r-   Nr   )r'   r(   r)   r*   r+   r#   r]   rp   rZ   ry  rJ  r|  r,   r-   r%   r"   r  r  	  s*    +
>#r%   r  c                   8    \ rS rSrSrSrS
S jrS rS rS r	Sr
g	)	DocAssigni	  zJAt wrap time this flowable evaluates var=expr in the doctemplate namespacer   c                 @    [         R                  U 5        XU4U l        g r   r/   r#   r  )r!   varexprlifes       r"   r#   DocAssign.__init__	  s    $TM	r%   c                     U R                  S5      nUR                  [        XS95         U R                  5       S H  n X4	 M     $ !    M  = f! S H  n X4	 M  !    M  = f   f = f)N
_nameSpaceavailableWidthavailableHeight)r   r  dictr  )r!   r^   r_   NSr  s        r"   funcWrapDocAssign.funcWrap	  sp      .
		$b<=	99;7 8	 8	 8s/   A  AAA%AA%A		A%c                 r    U R                  SU R                  R                  SS  -   5      " U R                  6 $ )NrV  r   )r   r   r'   r  r    s    r"   r  DocAssign.func	  s2    $$S)@)@)D%DEtyyQQr%   c                 &    U R                  X5        gr  )r  r  s      r"   r]   DocAssign.wrap	  s    br%   r  Nforever)r'   r(   r)   r*   r+   ra  r#   r  r  r]   r,   r-   r%   r"   r  r  	  s    TI"
Rr%   r  c                   "    \ rS rSrSrSS jrSrg)DocExeci	  z(at wrap time exec stmt in doc._nameSpacec                 >    [         R                  U 5        X4U l        g r   r  )r!   stmtlifetimes      r"   r#   DocExec.__init__	  s    $-	r%   r  Nr  r&   r-   r%   r"   r  r  	  s
    2 r%   r  c                   :    \ rS rSrSrS
S jrS rS rS rS r	S	r
g)DocParai	  a4  at wrap time create a paragraph with the value of expr as text
if format is specified it should use %(__expr__)s for string interpolation
of the expression expr (if any). It may also use %(name)s interpolations
for other variables in the namespace.
suitable defaults will be used if style and klass are None
Nc                 j    [         R                  U 5        Xl        X l        X0l        X@l        XPl        g r   )r/   r#   r  r5  ry   klassescape)r!   r  r5  ry   r  r  s         r"   r#   DocPara.__init__	  s)    $	

r%   c                     U R                   nU(       a7  [        U[        5      (       d  [        U5      nU R                  S5      " U5      $ g )NdocEval)r  rG  rJ   r   )r!   r  s     r"   r  DocPara.func	  s>    yyd3''D	((3D99 r%   c                 @    U R                  S5      R                  " U6   g )Nr   )r   r  )r!   r  s     r"   add_contentDocPara.add_content
  s    g&<<dCr%   c                     U R                  X5      nU R                  (       aL  U R                  S5      R                  5       nUR	                  [        XS95        X4S'   U R                  U-  nU$ [        U5      nU$ )Nr  r  __expr__)r  r5  r   r   r  r  rJ   )r!   r^   r_   r3  r  s        r"   	get_valueDocPara.get_value
  sm    b$;;$$\2779BIId"@A"zNKK"$E  JEr%   c                    U R                  X5      nU R                  nU(       d  SSKJn  U R                  nU(       d  SSKJn  U" 5       S   nU R                  (       a  SSKJn  U" U5      nU R                  U" X5S95        g)Nr   r  )getSampleStyleSheetCode)r  )ry   r  )
r  r  r  r  ry   reportlab.lib.stylesr  r  xml.sax.saxutilsr  )r!   r^   r_   r3  r  ry   r  r  s           r"   r]   DocPara.wrap
  sd    r%JJC

@%'/E;;/-E5-.r%   )r  r  r5  r  ry   )NNNT)r'   r(   r)   r*   r+   r#   r  r  r  r]   r,   r-   r%   r"   r  r  	  s!    :D	r%   r  c                   *    \ rS rSrSS jrS rS rSrg)	DocAsserti 
  Nc                 F    [         R                  U 5        Xl        X l        g r   )r/   r#   r  r5  )r!   condr5  s      r"   r#   DocAssert.__init__!
  s    $	r%   c                 P    [         R                  XU5      U l        U R                  $ r   )r  r  _condr  s      r"   r  DocAssert.funcWrap&
  s     %%db1
zzr%   c                 p    U R                  X5      n[        U R                  5      (       d  [        U5      egr  )r  boolr  AssertionError)r!   r^   r_   r3  s       r"   r]   DocAssert.wrap*
  s-    r%DJJ ''r%   )r  r  r5  r   )r'   r(   r)   r*   r#   r  r]   r,   r-   r%   r"   r  r   
  s    
r%   r  c                   ,    \ rS rSr/ 4S jrS rS rSrg)DocIfi0
  c                 ^    [         R                  U 5        Xl        U=(       d    / U4U l        g r   )r/   r#   r  blocks)r!   r  	thenBlock	elseBlocks       r"   r#   DocIf.__init__1
  s%    $	o2i/r%   c                 B    [        U[        [        45      (       d  U4nU$ r   )rG  r  r  )r!   blocks     r"   
checkBlockDocIf.checkBlock6
  s    %e--HEr%   c                     U R                   " U R                  U R                  [        [	        U R                  X5      5      5         5      6   gr  )r  r)  r#  r   r  r  r  s      r"   r]   
DocIf.wrap;
  s8    $//$++c$t}}R?S:T6U*VWXr%   )r#  r  N)r'   r(   r)   r*   r#   r)  r]   r,   r-   r%   r"   r!  r!  0
  s    /1 0

r%   r!  c                        \ rS rSrS rS rSrg)DocWhilei?
  c                 f    [         R                  U 5        Xl        U R                  U5      U l        g r   )r/   r#   r  r)  r(  )r!   r  
whileBlocks      r"   r#   DocWhile.__init__@
  s%    $	__Z0
r%   c                     [        U R                  X5      5      (       a&  U R                  " [        U R                  5      U /-   6   gr  )r  r  r  r  r(  r  s      r"   r]   DocWhile.wrapE
  s7    b$%%tDJJ/68r%   )r(  r  N)r'   r(   r)   r*   r#   r]   r,   r-   r%   r"   r.  r.  ?
  s    1
r%   r.  c                   (    \ rS rSrSrSS jrS rSrg)SetTopFlowablesiJ
  r   c                     Xl         X l        g r   _F_showr!   r  shows      r"   r#   SetTopFlowables.__init__L
      
r%   c                     [        [        U SS 5      SS 5      nU(       aN  U R                  Ul        U R                  (       a,  U R                  (       a  U R                  UR                  l        gNr>   r   r  )rl   r8  _topFlowablesr9  r   r  r!   r^   r_   r  s       r"   r]   SetTopFlowables.wrapP
  sH    gd6$/tD $Czzdgg/3ww		,r%   r7  Nrn  r'   r(   r)   r*   
_ZEROZSIZEr#   r]   r,   r-   r%   r"   r5  r5  J
      Jr%   r5  c                   (    \ rS rSrSrSS jrS rSrg)SetPageTopFlowablesiX
  r   c                     Xl         X l        g r   r7  r:  s      r"   r#   SetPageTopFlowables.__init__Z
  r=  r%   c                     [        [        U SS 5      SS 5      nU(       aN  U R                  Ul        U R                  (       a,  U R                  (       a  U R                  UR                  l        gr?  )rl   r8  _pageTopFlowablesr9  r   r  rA  s       r"   r]   SetPageTopFlowables.wrap^
  sH    gd6$/tD$(GGC!zzdgg/3ww		,r%   r7  Nrn  rC  r-   r%   r"   rG  rG  X
  rE  r%   rG  r   )r   NNN)r^  N)f__version__r+   r  r   r   reportlab.lib.colorsr   r   reportlab.lib.rl_accelr   reportlab.lib.enumsr   r	   r
   r  r   r  r   r   r   reportlab.lib.abagr   reportlab.pdfbaser   reportlab.pdfbase.pdfmetricsr   reportlab.rl_configr   r   r   r   rp   __all__r   r/   r   r   r   r   r   r   r   r   r`  re  rp  ry  r  r  r  r  r  r  r  r  r  r  r  r  r2  r7  r>  rU  r\  r^  r|  r  r  r  r  r  r	  r9  rO  r[  re  r  r  r
  r  reportlab.lib.sequencerr%  r  r1  r6  r8  rc  re  r  r  r  r  r  r  r  r  r  r  r!  r.  r5  rG  r-   r%   r"   <module>rW     sl   	, 
  0 ) < < . I I # & 4 h h,
 -2EG  N N`P8 P*& &4PL8 L\[H [zx PX P
- 
-i
 i	I 		) 	FF F(3$j @?8 @D\ CH C	!( !">$ >$@P PO O* *X/ /
8# 8#td:h dN $j#*X j#X9A( 9Av; ;zvQ
#5h vQp$x $:. ., x  .r( rh	5V 5"&$d &$P,"n ,"\2H 2h 4$  !#$!##3 3jB1^ 1^f#g #gJ +( (T }:h }~ < 4 i  0i 0d  G 	u 	h ( r%   