
    Kwgw                       d Z dZddlZddlmZmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ dj=                         Z G d d      Z  G d d      Z! G d de!      Z"d Z#ddZ$dZ%d Z&d Z' G d de!      Z( G d de!      Z) G d de!      Z* G d  d!e*      Z+ G d" d#e*      Z, G d$ d%e,      Z- G d& d'e-      Z. G d( d)e-      Z/ G d* d+e+      Z0dd,Z1d- Z2 G d. d/      Z3 G d0 d1e3e!      Z4 G d2 d3e4      Z5 G d4 d5e!      Z6d6 Z7 G d7 d8e!      Z8 G d9 d:e!      Z9 G d; d<e*      Z: G d= d>e!      Z; G d? d@e!      Z< G dA dB      Z=dC Z> G dD dEe3      Z? G dF dGe?e!      Z@dH ZAdI ZB G dJ dKe?e!      ZC G dL dM      ZD G dN dOe?eDe!      ZE G dP dQe*      ZF G dR dSe*      ZG G dT dUe*      ZH G dV dWeDe*      ZI G dX dYe+      ZJ G dZ d[e      ZK G d\ d]eJ      ZL G d^ d_e*      ZMdd`lNmOZO  ePdadbdcdddedfdgdhdidjk
      ZQddlZR G dm dn      ZSdo ZT G dp dqe!      ZU G dr dseU      ZVddtlmWZW  G du dv      ZX G dw dx      ZY G dy dze?e!      ZZ G d{ d|e!      Z[ G d} d~e*      Z\ G d de\      Z] G d de\      Z^ G d de^      Z_ G d de^      Z` G d de`      Za G d de*      Zb G d de*      Zcy)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)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 splitLinesc                       e Zd ZdZd Zy)	TraceInfoz0Holder for info about where an object originatedc                 J    d| _         d| _        d| _        d| _        d| _        y )Nz	(unknown))srcFilestartLineNostartLinePos	endLineNo
endLinePosselfs    S/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/platypus/flowables.py__init__zTraceInfo.__init__0   s'    "    N__name__
__module____qualname____doc__r!    r"   r    r   r   .   s
    6r"   r   c                       e Zd ZdZdZdZd Zd ZddZddZ	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd ZddZed        Zd Zd Zy)FlowablezAbstract 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    d| _         d| _        d| _        d| _        d| _        d | _        d | _        d | _        y )Nr   LEFTBOTTOM)widthheightwrappedhAlignvAlign
_traceInfo_showBoundaryencodingr   s    r    r!   zFlowable.__init__H   sA    
  !
 r"   c                 6    || _         | j                          | ` y)z#ensure canv is set on and then drawN)canvdrawr   r7   s     r    _drawOnzFlowable._drawOnZ   s    			Ir"   c                     |r_t        | d      rS| j                  }|ddt        fv r
|d|z  z  }|S |dt        fv r||z  }|S |dt        fvrt        dt        |      z         |S )Nr1   CENTERCENTRE      ?RIGHTr,   zBad hAlign value )hasattrr1   r	   r
   r   
ValueErrorstr)r   xsWas       r    _hAlignAdjustzFlowable._hAlignAdjust`   s    '$x(AXh	22SV
 	 wx((R  6'** !4SV!;<<r"   c                 X   | j                  ||      }|j                          |j                  ||       | j                  |       t	        | d      rI| j
                  r=|j                  t               |j                  dd| j                  | j                         |j                          y)z6Tell it to draw itself on the canvas.  Do not overrider4   r   N)rF   	saveState	translater:   r@   r4   setStrokeColorr   rectr.   r/   restoreStater   canvasrC   y_sWs        r    drawOnzFlowable.drawOnk   s    q%AV4)d.@.@!!$'KK!DJJ4r"   c                 F    || _         | j                  ||      \  }}| ` ||fS )zWintended for use by packers allows setting the canvas on
        during the actual wrap)r7   wrap)r   r7   aWaHwhs         r    wrapOnzFlowable.wrapOnw   s-     	yyB1I!tr"   c                 2    | j                   | j                  fS )zThis will be called by the enclosing frame before objects
        are asked their size, drawn or whatever.  It returns the
        size actually used.r.   r/   r   
availWidthavailHeights      r    rS   zFlowable.wrap   s     

DKK((r"   c                 0    t        | d| j                        S )z-This should return the minimum required width	_minWidth)getattrr.   r   s    r    minWidthzFlowable.minWidth   s    tK

33r"   c                 <    || _         | j                  ||      }| ` |S )zXintended for use by packers allows setting the canvas on
        during the actual split)r7   split)r   r7   rT   rU   Ss        r    splitOnzFlowable.splitOn   s%     	JJr"Ir"   c                     g S )ao  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   r\   availheights      r    rc   zFlowable.split   s	     	r"   c                     t        | d      r| j                  S t        | d      r,t        | j                  d      r| j                  j                  S y)zOreturns boolean determining whether the next flowable should stay with this onekeepWithNextstyler   )r@   ri   rj   r   s    r    getKeepWithNextzFlowable.getKeepWithNext   sC    4'0A0A)AT'"wtzz.'IRVR\R\RiRiKir"   c                     t        | d      r| j                  S t        | d      r,t        | j                  d      r| j                  j                  S y)zXreturns how much space should follow this item if another item follows on the same page.
spaceAfterrj   r   )r@   rm   rj   r   s    r    getSpaceAfterzFlowable.getSpaceAfter   sA    4%doo'=T'"wtzz,'GPTPZPZPePeIer"   c                     t        | d      r| j                  S t        | d      r,t        | j                  d      r| j                  j                  S y)z[returns how much space should precede this item if another item precedess on the same page.spaceBeforerj   r   )r@   rp   rj   r   s    r    getSpaceBeforezFlowable.getSpaceBefore   sC    4&t/?/?(?T'"wtzz-'HQUQ[Q[QgQgJgr"   c                      y)z?Hook for IndexingFlowables - things which have cross referencesr   r(   r   s    r    
isIndexingzFlowable.isIndexing   s    r"   Nc                    t        | d      r| j                  d      }n$t        | d      rt        | j                        }nd}|r|r|d| }d| j                  j
                  dt        t        |             | j                         d	|S )
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 >)	r@   ru   rB   rx   	__class__r$   hexid
_frameNamer   maxLenrs      r    identityzFlowable.identity   sw     4(!!1!-AT6"DIIAA'6
A#'>>#:#:C4M4??K\^_``r"   c                 2    t        t        | dd       dd       S )Nr7   _doctemplater`   r   s    r    r   zFlowable._doctemplate   s    wtF40EEr"   c                 0    t        | j                  |d       S N)r`   r   r   rE   s     r    _doctemplateAttrzFlowable._doctemplateAttr   s    t((400r"   c                 ~    t        | dd       }|s| j                  d      }|r|j                  rd|j                  z  S y)N_frameframez	 frame=%s )r`   r   r~   r   fs     r    r   zFlowable._frameName   s<    D$'d++G4!kADD00r"   r   r   )r$   r%   r&   r'   _fixedWidth_fixedHeightr!   r:   rF   rQ   rX   rS   ra   re   rc   rk   rn   rq   rs   r   propertyr   r   r   r(   r"   r    r*   r*   =   sz     KL$	
)4a  F F1r"   r*   c                   $    e Zd ZdZddZd Zd Zy)XBoxz~Example 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                 X    t         j                  |        || _        || _        || _        y r   )r*   r!   r.   r/   rx   )r   r.   r/   rx   s       r    r!   zXBox.__init__   s%    $
	r"   c                 V    d| j                   d| j                  d| j                  dS )NzXBox(w=z, h=z, t=))r.   r/   rx   r   s    r    __repr__zXBox.__repr__   s    +/::t{{DIINNr"   c                    | j                   j                  dd| j                  | j                         | j                   j	                  dd| j                  | j                         | j                   j	                  d| j                  | j                  d       | j                   j                  t        d       | j                   j                  d| j                  z  d| j                  z  | j                         y )Nr      r>   )	r7   rK   r.   r/   linesetFontr   drawCentredStringrx   r   s    r    r8   z	XBox.draw   s    		q!TZZ5		q!TZZ5		q$++tzz15 			-+		##C

NCOTYYOr"   N)zA Box)r$   r%   r&   r'   r!   r   r8   r(   r"   r    r   r      s    EOPr"   r   c                 &   t        |       r=| d   j                         dk(  r'| dd  } t        |       r| d   j                         dk(  r't        |       r=| d   j                         dk(  r'| d d } t        |       r| d   j                         dk(  r'| S )Nr   r   rv   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                     | j                  d      }|dkD  r:t        |      }g }|D ]&  }||d j                         }|j                  |       ( |S t        |      }|S )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)rc   r   rstripappend)rx   dedentr   	templinesr   s        r    	_dedenterr      so     JJtEax#E*	 	D='')DLL	 L  &Lr"   z[{( ,.;:/\-c                     |t         }|d}g }| D ]1  }t        |      |kD  rt        |||||       !|j                  |       3 |S )Nr   )SPLIT_CHARSr   	splitLiner   )r   maximum_lengthsplit_charactersnew_line_characterslines_splittedr   s         r    
splitLinesr      sf    &" N (t9~%dNN13 !!$'( r"   c                 \   d}| rt        |       dkD  rd}t        |       |k  rt        |       }nt        |      D ]  }| |   |v s|dz   } |dk(  rdz   }|r%|j                  | d|        d}|t        |      z  }n|j                  || d| z          | |d  } | rt        |       dkD  ry y y y )NTr   rv   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 1
 !,0@@",q.K	1 >$q.K!!-+">?Jc"566N!!"5!K(#) * &kl3? C.q0-0-r"   c                   6    e Zd ZdZd	dZd Zd Zd Zd Zd Z	y)
Preformatteda  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                     || _         || _        t        ||      | _        |r!|rt	        | j                  |||      | _        yyy)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)rj   
bulletTextr   r   r   )r   rx   rj   r   r   maxLineLength
splitCharsnewLineCharss           r    r!   zPreformatted.__init__>  sH    
 
$tF+
M# $

 - * ,	DJ "4r"   c                     | j                   }d}|dt        |      z  }|ddj                  | j                        dS )NzPreformatted(zPreformatted(bulletText=%s,z'''\ 
r   z'''))r   reprjoinr   )r   bTHs      r    r   zPreformatted.__repr__N  s;    __>-R8A%&		$**(=>>r"   c                     || _         | j                  j                  t        | j                        z  | _        | j                   | j
                  fS r   )r.   rj   leadingr   r   r/   r[   s      r    rS   zPreformatted.wrapU  s:    
jj((TZZ8

DKK((r"   c           
          | j                   }|j                  }|j                  }t        | j                  D cg c]  }t        |||       c}      S c c}w r   )rj   fontSizefontNamemaxr   r   )r   rj   r   r   r   s        r    ra   zPreformatted.minWidthZ  sC    

>>>>DJJODKXh7OPPOs   Ac                    || j                   j                  k  rg S t        |dz  | j                   j                  z        }dj                  | j                  d|       }dj                  | j                  |d        }| j                   }|j
                  dk7  rt        |      }d|_        t        || j                         t        ||      gS )N      ?r   r   )rj   r   intr   r   firstLineIndentr   r   )r   r\   r]   linesThatFittext1text2rj   s          r    rc   zPreformatted.split`  s     +++I;,tzz/A/AAB		$**Q|45		$**\]34

  A%UOE$%E!UDJJ/eU1KLLr"   c                    | j                   j                  }| j                  | j                   j                  z
  }| j                  j                  d       | j                   j                  r/| j                  j                  | j                   j                         | j                  j                  ||      }|j                  | j                   j                  | j                   j                  | j                   j                         | j                  D ]  }|j                  |        | j                  j                  |       y )Nz%PreformattedPara)rj   
leftIndentr/   r   r7   
addLiteral	textColorsetFillColor	beginTextr   r   r   r   textLinedrawText)r   cur_xcur_ytxrx   s        r    r8   zPreformatted.drawq  s    
 

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


DJJ''JJ''JJ&&	( JJ 	DKK			2r"   )Nr   NNr   )
r$   r%   r&   r'   r!   r   rS   ra   rc   r8   r(   r"   r    r   r   7  s'     ?)
QM"r"   r   c                   \    e Zd ZdZdZdZ	 	 ddZd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZddZy)Imagea  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.
    rv   Nc	                    || _         || _        t        |d      }	d| _        |	r|| _        t        |      | _        nBt        |d      r(|| _        t        |      | _        d| _        d| _        d}	n|x| _        | _        || _        |	st        j                  j                  |      d   dv rsddlm}
  |
|d	      }	 	 t        j                  |      }	 |j#                          |d   | _        |d   | _        |r
|d
   | _        d| _        | j!                  |||d       y|	r| j!                  |||d       y| j!                  ||||       y#  | j!                  ||||       Y |j#                          yxY w# |j#                          w xY w)z8If size to draw at not specified, get it from the image.readN	_renderPyTrv   )z.jpgz.JPGz.jpegz.JPEGr   )open_for_readb   )r1   _maskr@   _drawing_filer   filename_img_dpiospathsplitextreportlab.lib.utilsr   r   readJPEGInfo_setupclose
imageWidthimageHeight)r   r   r.   r/   kindmasklazyr1   useDPIfpr   r   infos                r    r!   zImage.__init__  sf    
Xf%!DJ NDMXk*$DMx.DMDJDIB)11DJ	bgg&&x037YY :h,A#003D 	"1gDO#AwD G	DIKKfT!,KKfT!,KKfT$/KKfT$7		s   <E
 
E2 E5 2E5 5Fc                     | j                   }|rH|d   dk7  r| xj                  d|d   z  z  c_        |d   dk7  r| xj                  d|d   z  z  c_        y y y )Nr   H   g      R@rv   )r   r   r   )r   dpis     r    
_dpiAdjustzImage._dpiAdjust  sX    ii1vrz4??dSVm;?1vrz4++tc!f}<+z r"   c                 h    || _         || _        || _        || _        |dk  r| j	                          y y Nr   )_lazy_width_height_kind_setup_inner)r   r.   r/   r   r   s        r    r   zImage._setup  s2    

7D%%'7r"   c                    | j                   }| j                  }| j                  }| j                  }|ra|j	                         \  | _        | _        | j                  rt        |d      rv|j                  j                  j                  dd      | _        nJ| j                  r>| j                  j                  | j                  j                  c| _        | _        d| _        | j                          | j                   dk\  r| `|dv r+|xs | j
                  | _        |xs | j                  | _        y |dv r/| j
                  |z  dz  | _        | j                  |z  dz  | _        y |d	v rat'        t)        |      | j
                  z  t)        |      | j                  z        }| j
                  |z  | _        | j                  |z  | _        y y )
N_imager   )r   r   F   )directabsolute)
percentage%{Gz?)boundproportional)r  r  r  r   getSizer   r   r   r@   r  r   getr   r.   r/   r   r  	drawWidth
drawHeightminfloat)r   r.   r/   r   imgfactors         r    r  zImage._setup_inner  sn   zzii03-DOT-yyWS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                    | j                   |t        z   kD  s| j                  |t        z   kD  r| j                   | j                  f| _        t	        t        |      | j                   z  t        |      | j                  z        }| xj                   |z  c_         | xj                  |z  c_        | j                   | j                  fS r   )r  r   r  _oldDrawSizer  r  )r   rT   rU   r  s       r    _restrictSizezImage._restrictSize  s    >>"U("doobh&> $ ?Dr4>>1%)DOO2KLFNNf$NOOv%O~~t..r"   c                 B    t        | dd       }|r|\  | _        | _        y y )Nr  )r`   r  r  )r   dwhs     r    _unRestrictSizezImage._unRestrictSize  s&    d>$/.1+DNDO r"   c                 D   |dk(  r`ddl m}  || j                        | _        t	        | j                  t
              sd | _        | j                  dk\  rd| _        | j                  S |dv r| j                          | j                  |   S t        dt        |       |fz        )Nr   r   )ImageReaderr  rv   )r  r  r   r   z<Image @ 0x%x>.%s)r   r  r   r   
isinstancer   r  r  __dict__AttributeErrorr~   )r   rE   r  s      r    __getattr__zImage.__getattr__  s    f97#DJJ/DIdjj2!
::q=q$*99GG==##0BtHQ<?@@r"   c                 2    | j                   | j                  fS r   )r  r  r[   s      r    rS   z
Image.wrap  s    ~~t..r"   c                    t        | dd      }t        | dd      }| j                  }|r| j                  t        | j                        z  }| j
                  t        | j                        z  }|j                  }	 |j                  ||       |j                  | j                  ||       ||_        y | j                  }|dk\  rd| _        | j                  j                  | j                  xs | j                  ||| j                  | j
                  | j                         |dk\  rd x| _        | _        || _        y y # ||_        w xY w)N_offs_xr   _offs_yr  rv   )r   )r`   r   r  r  r   r  r   	transformscalerQ   r7   r  	drawImager   r   r   r   )r   dxdydsxsyotransr   s           r    r8   z
Image.draw  s   T)A&T)A&MM%"88B5)9)9#::B[[F%22b)$::DQwQ
IIDII$>$&$&$(NN$(OO)-   & Qw)--	DJ!
  %s   :/D< <	Ec                     t         j                  | |      }|dd  dk(  r/t        | j                  t              r|d d d| j                  d}|S )Nz>...z
 filename=r{   )r*   r   r   r   rB   r   s      r    r   zImage.identity  sG    d6*RS66>js;%&sVDMM:Ar"   )NNr	  autorv   r<   Fr   )r$   r%   r&   r'   r   r   r!   r   r   r  r  r  r#  rS   r8   r   r(   r"   r    r   r     sM     KL?G>C*0X=(62/2
A/"6r"   r   c                       e Zd Zd Zy)NullDrawc                      y r   r(   r   s    r    r8   zNullDraw.draw#      r"   N)r$   r%   r&   r8   r(   r"   r    r5  r5  "  s    r"   r5  c                   &    e Zd ZdZdZdZddZd Zy)SpacerzdA spacer just takes up space and doesn't draw anything - it guarantees
       a gap between objects.rv   c                 @    || _         |rd| _        || _        || _        y )Ng-C6?)r.   r/   spacebefore)r   r.   r/   isGlues       r    r!   zSpacer.__init__+  s"    
DK%Dr"   c                 h    | j                   j                  d| j                  d| j                  dS )N(, r   )r|   r$   r.   r/   r   s    r    r   zSpacer.__repr__2  s!    #~~66tzz4;;OOr"   NF)r$   r%   r&   r'   r   r   r!   r   r(   r"   r    r9  r9  &  s    !KLPr"   r9  c                       e Zd Zd Zd Zd Zy)
UseUpSpacec                      y r   r(   r   s    r    r!   zUseUpSpace.__init__6  r7  r"   c                 4    d| j                   j                  z  S )Nz%s())r|   r$   r   s    r    r   zUseUpSpace.__repr__9  s    ////r"   c                 ,    || _         || _        ||dz
  fS )N:0yE>rZ   r[   s      r    rS   zUseUpSpace.wrap<  s     
!;t+,,r"   N)r$   r%   r&   r!   r   rS   r(   r"   r    rB  rB  5  s    0-r"   rB  c                        e Zd ZdZ	 ddZd Zy)	PageBreakrv   Nc                     || _         y r   )nextTemplate)r   rJ  s     r    r!   zPageBreak.__init__E  s
    (r"   c                     | j                   j                  d| j                  rt        | j                        dS ddS )Nr>  r   r   )r|   r$   rJ  r   r   s    r    r   zPageBreak.__repr__H  s9    >>22dN_N_48I8I3J3ghheg3ghhr"   r   )r$   r%   r&   
locChangerr!   r   r(   r"   r    rH  rH  A  s    JD)ir"   rH  c                       e Zd Zy)SlowPageBreakNr$   r%   r&   r(   r"   r    rN  rN  K      r"   rN  c                       e Zd Zy)PageBreakIfNotEmptyNrO  r(   r"   r    rR  rR  N  rP  r"   rR  c                   ,    e Zd ZdZ	 d Zd Zd ZddZy)CondPageBreakrv   c                     || _         y r   r/   )r   r/   s     r    r!   zCondPageBreak.__init__T  s	    r"   c                 "    d| j                   dS )NzCondPageBreak(r   rV  r   s    r    r   zCondPageBreak.__repr__W  s    %)[[22r"   c                 ~    || j                   k  r.| j                  d      }|s||fS ddlm} |j	                  |       y)Nr   r   
FrameBreakr   r   )r/   r   reportlab.platypus.doctemplaterZ  add_generated_content)r   r\   r]   r   rZ  s        r    rS   zCondPageBreak.wrapZ  s?    t{{"%%g.AZ44A##J/r"   Nc                 Z    t        |       j                  dd| j                         z        S )Nr   z
,frame=%s))r   replacer   r   r   s     r    r   zCondPageBreak.identityb  s%    Dz!!#l4??3D&DEEr"   r   )r$   r%   r&   rL  r!   r   rS   r   r(   r"   r    rT  rT  Q  s    JP3Fr"   rT  c                 f   t        |dd      }t        |dd      }|t        }|r%ddlm}	m}
 |}t        |      x}|_        d|_        |`	 d}d}d}d}| dd } | r/| j                  d      }t        |d      r/ddlm}
 t        ||
      r||j                  |j                  z   z  }O|j                  ||d	      \  }}||j                  ||f       |r	 	| |       |t        k  r |t        k  rt!        ||rt#        ||      n|      }||z  }|s6|j%                         }|rt        |dd
      r|}t!        ||z
  d      }||z  }n||j%                         |_        d}|j)                         }t        |dd
      r|}|}||z  }| r/|||_        |||z
  f|r|_        S S # |r|_        w w xY w);return max width, required height for a list of flowables Fr   Nr   r   )_addGeneratedContentIndenterrv   frameActionrd  F_SPACETRANSFER)r`   r   r\  rc  rd  r   r   _generated_contentpopr@   r   leftrightrX   r   r   r   r  rq   _spaceBeforern   _spaceAfter)Fr\   r7   
mergeSpaceobjdims	fakeWidthdoctcframerc  rd  
doct_frameWr   pSatTopr   rV   rW   ss                       r    _listWrapOnr{  e  s   4t,DT'$'F'	Q
&z22$(!%'$aDaAq'Ca)!&&.0J((4
95CAaaU!3$Qv.5q%xA9c!J'!<AFA$$&q!1%8AbDAQ?q7G7G7IC$4!Aq)%0BGA9 : ?bCO!B$w#DJ 6#DJ s   D=F$ 
F$ $F0c                     t        | t        t        f      s| duxr | gxs g } ddlm} | D cg c]  }t        ||      s| c}rJ d       | S c c}w )z.if it isn't a list or tuple, wrap it in a listNr   )LCActionFlowablez)LCActionFlowables not allowed in sublists)r   listtupler\  r}  )Vr}  rC   s      r    _flowableSublistr    sV    ae%1D=+@aS+FBq??a
1-= >?k@kk?H @s   A Ac                       e Zd ZddZddZy)_ContainerSpaceNc                 j    || j                   n|D ]   }t        |d      r|j                         c S  yNre  r   )_contentr@   rq   r   contentcs      r    rq   z_ContainerSpace.getSpaceBefore  s9    #*?$-- 	*A1]+''))	* r"   c                 |    t        || j                  n|      D ]   }t        |d      r|j                         c S  yr  )reversedr  r@   rn   r  s      r    rn   z_ContainerSpace.getSpaceAfter  s<    7?$--H 	)A1]+((	) r"   r   )r$   r%   r&   rq   rn   r(   r"   r    r  r    s    r"   r  c                   2    e Zd ZdZddZd Zd Zd ZddZy)	KeepTogetherFNc                     t        t        d      s/ddlm} ddlm} ddlm} |t        _        |t        _        || _        |s| j                         g}t        |      | _        || _	        y )NNullActionFlowabler   )r  rY  )annotateException)
r@   r  r\  r  rZ  r   r  r  r  
_maxHeight)r   	flowables	maxHeightr  rZ  r  s         r    r!   zKeepTogether.__init__  sU    |$89IA=.@L+&0L#%6D"0023I(3#r"   c                     | j                   }t        t        t        |            }ddj	                  |      z   }|j                  dd      }| j                  j                  d|d| j                  dS )Nr   z
  r>  z,maxHeight=r   )	r  r~  mapr   r   r_  r|   r$   r  )r   r   Ls      r    r   zKeepTogether.__repr__  sX    MMT!1IIdF#(,(?(?$//RRr"   c           	      D   g }	 t        | j                  || j                  |      \  }}| _        |xr |d   d   xs d| _	        ||f| _
        dfS #  | j                  d| j                  j
                  | j                  j                  t        |       fz         Y uxY w)N)rr  z%
raised by class %s(%s)@0x%8.8x wrap
r   rv   i )r{  r  r7   r  r|   r$   r%   r~   _H_H0	_wrapInfo)r   rT   rU   rr  rw  r   s         r    rS   zKeepTogether.wrap  s    	MdmmBtyydCCAa &DGAJ+!B({	M""#LPTP^P^PgPghlhvhv  iB  iB  CE  FJ  CK  PL  $L  Ms   &A A
Bc                    t        | dd       ||fk7  r| j                  ||       | j                  d d  }t        | dd       x}}|r%t        |dd       }|j                  }|j                  }| j
                  |kD  xr | j                   xs || j                  kD  }| j                  |kD  xs |xr |}	|s|	rd}
| j                  d      }|r!|r |       }|j                  }|j                  }|r(| j                  r|s|xr |xr xr k\  xr k\   }
n"r |j                  k\  r| j
                  k\  rd}
|j                  d |
r| j                  n| j                                |S )Nr  r   _atTopF_peekNextFrameTr   )r`   rS   r  r  r  r  r  r  r   
splitAtTopinsertrZ  r  )r   rT   rU   rd   cfry  cAWcAHC0C1fbpanfnfnAWnAHs                  r    rc   zKeepTogether.split  sP   4D)Br72DIIb4DMM!T(400UBx-E))C**CWWRZG0FBt4Fhhrk*blUB(()9:DdViijj4??uGBG2G#s(GsCxHRYY3<HHQJ243J3JMNr"   c                 
   d| j                   j                  dt        t        |             | j	                         ddj                  | j                  D cg c]  }|j                          c}      }|r|d| S |S c c}w )Nry   rz   z> containing :r   r   )r|   r$   r}   r~   r   r   r  r   )r   r   r   msgs       r    r   zKeepTogether.identity  s    /3~~/F/Fs2d8}UYUdUdUfgkgpgp  IM  IV  IV  rW  DErsr|r|r~  rW  hX  Yq= J	 rWs   B r   )	r$   r%   r&   r  r!   r   rS   rc   r   r(   r"   r    r  r    s!    J$S	2r"   r  c                       e Zd ZdZdZy)KeepTogetherSplitAtTopzq
    Same as KeepTogether, but it will split content immediately if it cannot
    fit at the top of a frame.
    TN)r$   r%   r&   r'   r  r(   r"   r    r  r    s     Jr"   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)MacrozThis 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                     || _         y r   )command)r   r  s     r    r!   zMacro.__init__  s	    r"   c                 2    dt        | j                        z  S )Nz	Macro(%s))r   r  r   s    r    r   zMacro.__repr__  s    T$,,///r"   c                      yNr[  r(   r[   s      r    rS   z
Macro.wrap  s    r"   c                 L    t        | j                  d d| j                  i       y )NrN   )gl)r   r  r7   r   s    r    r8   z
Macro.draw  s    T\\Thtyy-ABr"   Nr$   r%   r&   r'   r!   r   rS   r8   r(   r"   r    r  r    s    80Cr"   r  c                       y r   r(   )argskwdss     r    _nullCallabler    s    r"   c                   *    e Zd ZdZddZd Zd Zd Zy)CallerMacrozf
    like Macro, but with callable command(s)
    drawCallable(self)
    wrapCallable(self,aW,aH)
    Nc                 @    |xs t         | _        |xs t         | _        y r   )r  _drawCallable_wrapCallable)r   drawCallablewrapCallables      r    r!   zCallerMacro.__init__  s    ):]):]r"   c                 <    d| j                   d| j                  dS )NzCallerMacro(,r   )r  r  r   s    r    r   zCallerMacro.__repr__  s    '+'9'9$:L:LMMr"   c                 *    | j                  | ||       yr  )r  r   rT   rU   s      r    rS   zCallerMacro.wrap  s    42&r"   c                 &    | j                  |        y r   )r  r   s    r    r8   zCallerMacro.draw  s    4 r"   NNr  r(   r"   r    r  r  	  s    
;N!r"   r  c                   6    e Zd ZdZd	dZd Zd Zd Zd Zd Z	y)
ParagraphAndImagez combine a Paragraph and an Imagec                 J    || _         || _        || _        || _        || _        y r   )PIxpadypad_side)r   r  r  r  r  sides         r    r!   zParagraphAndImage.__init__  s%    		
r"   c                 z    t        | j                  j                         | j                  j                               S r   )r   r  rq   r  r   s    r    rq   z ParagraphAndImage.getSpaceBefore#  s)    466((*466+@+@+BCCr"   c                 z    t        | j                  j                         | j                  j                               S r   )r   r  rn   r  r   s    r    rn   zParagraphAndImage.getSpaceAfter&  s)    466'')$&&*>*>*@AAr"   c                    | j                   j                  ||      \  }}|| _        || _        || _        | j
                  }|j                  }| j                  }| j                  }|j                  }	|j                  }
||
z
  |j                  z
  }||z
  |z
  }||j                  z
  }d|_        t        ||z   |	dz  z        }|j                  |g||gz  z   |gz         |_        | j                   dk(  r||z   gd|z   z  dgz   | _        t%        |j                  j&                        |	z  |_        t+        ||j(                        | _        | j                  | j(                  fS )Nr   r   rk  rv   )r  rS   wIhIr.   r  rj   r  r  r   r   rightIndentr   r   
breakLinesblParar  _offsetsr   r   r/   r   )r   r\   r]   r  r  r  rj   r  r  r   r   later_widthsintermediate_widthsfirst_line_widthnIWs                  r    rS   zParagraphAndImage.wrap)  sL   Z4B
FFyyyy--%%
!J.1B1BB*T1B6.1F1FF2d7WS[)*<<!1 2S:M9N5N NP\~ ]^::vWIqu-qc1DMqxx~~&w."QXX&

DKK((r"   c                    | j                   | j                  | j                  | j                  f\  }}}}||z   |kD  st	        |j
                        dk  rg S |j                  ||      }|s|S |d   x}| _         |d= |j                  }t	        | j                   j                  j                        |j                  z  |_        t        ||j                        | _        | g|z   S r   )r  r  r  r  r   fragsrc   rj   r  r   r   r/   r   )	r   r\   r]   r  r  r  r  rd   rj   s	            r    rc   zParagraphAndImage.splitA  s    &&$''477DII=2r4d7;#agg,/"9GGJ{+(qTDFaDtvv}}**+EMM9"QXX&vaxr"   c                 n   | j                   }| j                  dk(  r| j                  j                  |d| j                  | j
                  z
  | j                  z
         | j                  | j                  _        	 | j                  j                  |dd       | j                  `y | j                  j                  || j                  | j                  z
  | j                  z
  | j                  | j
                  z
  | j                  z
         | j                  j                  |dd       y # | j                  `w xY w)Nrk  r   )r7   r  r  rQ   r/   r  r  r  r  r.   r  r  r9   s     r    r8   zParagraphAndImage.drawM  s    yy::vFFMM$qTWW!4TYY!>?"mmDFFO$d1Q'FFOFFMM$tzz$''1$));DKK<OPTPYPY<YZFFMM$q# FFOs   9D& &D4N)r   r   rl  )
r$   r%   r&   r'   r!   rq   rn   rS   rc   r8   r(   r"   r    r  r    s%    *DB)0
$r"   r  c                       e Zd Zd Zy)
FailOnWrapc                     t        d      )Nz3FailOnWrap flowable wrapped and failing as ordered!rA   r[   s      r    rS   zFailOnWrap.wrap[  s    NOOr"   N)r$   r%   r&   rS   r(   r"   r    r  r  Z  s    Pr"   r  c                       e Zd Zd Zd Zy)
FailOnDrawc                      yr  r(   r[   s      r    rS   zFailOnDraw.wrap_      r"   c                     t        d      )Nz2FailOnDraw flowable drawn, and failing as ordered!r  r   s    r    r8   zFailOnDraw.drawb  s    MNNr"   N)r$   r%   r&   rS   r8   r(   r"   r    r  r  ^  s    Or"   r  c            	       <    e Zd ZdZdddedddddf	dZd	 Zd
 Zd Zy)
HRFlowablezLike the hr tagz80%rv   roundr<   r-   Nc
                     t         j                  |        || _        || _        || _        || _        || _        || _        || _        || _	        |	| _
        y r   )r*   r!   r.   	lineWidthlineCaprp   rm   colorr1   r2   dash)
r   r.   	thicknessr  r  rp   rm   r1   r2   r  s
             r    r!   zHRFlowable.__init__g  sR     	$
"&$
	r"   c                 <    d| j                   d| j                  dS )NzHRFlowable(width=z	, height=r   rZ   r   s    r    r   zHRFlowable.__repr__z  s    48JJLLr"   c                     | j                   }t        |t              rA|j                         }|j	                  d      r|t        |d d       z  dz  }nt        |      }t        ||      }|| _        || j                  fS )Nr  r   r  )	r.   r   r   r   endswithr  r  r  r  )r   r\   r]   rV   s       r    rS   zHRFlowable.wrap}  sn    JJa!	Azz#JuQsV}$<T$AAh!*$..  r"   c                    | j                   }|j                          |j                  | j                         |j	                  dddd| j
                  j                                   |j                  | j                         | j                  r|j                  | j                         |j                  dd| j                  | j                         |j                          y )Nr   rv   r  )buttr  square)r7   rH   setLineWidthr  
setLineCapr  lowerrJ   r  r  setDashr   r  r/   rL   r9   s     r    r8   zHRFlowable.draw  s    yy$..)!q9$,,:L:L:NOPDJJ'99dll499-		!QT[[1r"   )	r$   r%   r&   r'   r   r!   r   rS   r8   r(   r"   r    r  r  e  s3    aH&M!r"   r  c                       e Zd Zd Zy)_PTOInfoc                 D    t        |      | _        t        |      | _        y r   )r  trailerheader)r   r  r  s      r    r!   z_PTOInfo.__init__  s    '0&v.r"   Nr$   r%   r&   r!   r(   r"   r    r   r     s    /r"   r   c                 P    t        | d      r| j                         S t        |       S )Nr   )r@   r   )rq  s    r    	cdeepcopyr    s"    s:||~}r"   c                       e Zd ZddZddZy)
_ContainerNc           	         ddl m}m}	 |}
|}d}|| j                  }||z  }|| j                  }| j                  |||z        }|| j                  |z  z  }|}t        | dd      }|D ]  }t        s(t        ||      r|j                  |j                         2t        ||	      r2||j                  |z  z  }||j                  |j                  z   |z  z  }p|j                  ||d      \  }}|t        k  rt        |dd      s||k7  r/|j!                         }t        |dd      s|t#        ||z
  d      z  }||z  }|j%                         }t        |dd      r|}|}t        |d	d      }|r|d
   j&                  r|d
   }|j                  }|j                  }|j(                  }||j*                  |z
  |z
  z  }|
|||j,                  z
  z  z   }||z   |z   }t#        |||z
        }t#        d||z
        }|j/                  ||||||       ||_        |j3                  |||||z
         ||d
   urt        |dd      s||z  }|` y)z"we simulate being added to a framer   )ActionFlowablerd  Nr   rg  	_ZEROSIZErh  F	_frameBGsr   )rP   )r\  r
  rd  r.   r  rF   r/   r`   r   r   applyr   rk  rl  rX   r   rq   r   rn   activestartr  _leftPaddingrenderr   rQ   )r   r7   rC   rO   rP   r)  r  rT   r
  rd  x0y0rx  ytr   r  rV   rW   rz  fbgbgfbglfbgrbgmfbwfbxfbhfbys                               r    rQ   z_Container.drawOn  sb   K:DJJr
e?mmGqU+	T[[Xd+ #	A)j>.J))*!H%QVVE\!qvvagg~u,,88DI.DAqwwqT:H1u$$&q!1%8QrT!$AFA!Aq)%0B%D1Cs2w~~WwwxxhhU\\$.t34U%7%7 788!ebj"QrTl!CGn		$uSS5AHHHT!A"Q$H'#GA6Ft,LRG#	r"   c                     g j                   }|xs | j                  D ]  } |t        |              |j                  | _        y r   )r   r  r  __self__)r   r  Cr  s       r    copyContentz_Container.copyContent  s9    II*T]] 	AilO	

r"   )r   r   NNr   )r$   r%   r&   rQ   r!  r(   r"   r    r  r    s    1f#r"   r  c                   $    e Zd ZdZddZd Zd Zy)PTOContaineraM  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                     t        ||      }g x| _        }t        |      D ]S  }t        |t              r|j                  |j                         /|j                  |       t        |d      rM||_        U y )N_ptoinfo)	r   r  r  r   r#  extendr   r@   r%  )r   r  r  r  r  r   _s          r    r!   zPTOContainer.__init__  sc    WV$!'* 	=A!L)$q,1aj	=r"   c                     t        | j                  || j                        \  | _        | _        | j                  | j                  fS r   )r{  r  r7   r.   r/   r[   s      r    rS   zPTOContainer.wrap  s4    "-dmmJtyy"Q
DKzz$++%%r"   c                 l   ddl m} |dk  rg S | j                  }| j                  }dx}x}x}x}	}
t	        |      }i }dx}}t        |      D ]Q  }||   }|j                  }||j                         vr]|j                  }|j                  }t        ||| j                        \  }}t	        |      r|d   j                         }nd}||||f||<   n
||   \  }}}}|j                  ||d      \  }}t        ||      rA|j                  |j                  z   }||j                  z  }||j                  z  }||z  }d}	d}
n4|r"t!        |j                         |	z
  d      }
||
z  }|j#                         }	|||	z   z  }|t!        ||	      z   }||z   |t$        z
  k\  r n|dz  }T ||	z   z  }||z
  z
  |
z
  dz  }|d|z  k\  rj'                  |||      }ng }t)        |      t)        |      z   dkD  r || |       g} |||      g}ng x}}|sl|}|dkD  rA||dz
     j+                         r+|dz  }d||   _        |dkD  r||dz
     j+                         r+|dk(  r|d   j+                         r|}d|d   _        t/               g}t	        |      dkD  r)|d | |d d z   |z   z   |z   } |z   |dd  z   ||dz   d  z   }!n|sg S |d | |z   z   |z   } |z   ||d  z   }!| t1        |!j                  D cg c]  }t3        |       c}|j                  D cg c]  }t3        |       c}      gz   }|S c c}w c c}w )Nr   rf  rg  rv   gwJ?皙?rF  )r\  rd  r7   r  r   r   r%  keysr  r  r{  rq   rX   r   rk  rl  r   rn   r   re   absrk   ri   rB  r#  r   )"r   r\   r]   rd  r7   r   rC   ir   rx  hxnI2WdLeftdRightr  r  THdrtWtHtSBr'  rW   dwtHSrU   SSR1IR2Ijro  R1R2s"                                     r    rc   zPTOContainer.split  s   ;q=)yyMMABFq 	A!A

A
"IIhh$Q
DII>Bq6A$--/CC2bA!!f"R88DI6DAq!H%VVAGG^!''!b 
Q--/215BGA__&2IASR[.Cuk%''FA=	B 	
ad !mC"G+tK4
2.BBu:c&k!$&UFF7+,CE&)*CNC#AA#!AaC&002Q$%!! A#!AaC&002 !t!,,.$%!!\Nr7192Ar"1vc!!#A%BSAB!A#$'BI2As1QBS12B<QYY#?DG#?RSRZRZ@[Qa@[\]] $@@[s   ,L,L1r  )r$   r%   r&   r'   r!   rS   rc   r(   r"   r    r#  r#    s    I=&Or"   r#  c                     d| dz  z  }d| z  }d|dz  z  }d|z  }||z  ||z  z
  }||z  }	| |z  }
| |z  }||z  }|	|z  |
|z  z   }||z  ||z  z   }||fS )Nr   r  r(   )s0s1h0h1a11a12a21a22detb11b12b21b22rE   r   s                  r    _hmodelrN  =  s     RU(C
R%C
RU(C
R%C
c'#c'/C
c'C$s(C$s(C
c'CBs2vABs2vAQ3Jr"   c                     |\  }}t        |      t        k  r|| z  S d|z  |z  }ddlm} |  |z  }||z  |z
  }|dk  ry ||      }|dk\  r| |z
  }n| |z   }||z  }	t	        d|z  d|	z        S )z=solve the model v = a/s**2 + b/s for an s which gives us v==hr>   r   )sqrtNr   )r,  r   mathrP  r   )
rW   abrE   r   trP  r   r   rB  s2s
             r    _qsolverU  M  s    
CAa
1vu}s
AaA	
1A	!AAs4QA!tR!VR!V	
2Br"uber"   c                   >    e Zd Zg ddddddfdZd Zdd	Zd
 ZddZy)KeepInFramerv   shrinkr   r,   r-   Nc
                    || _         || _        || _        || _        |dv sJ | j	                         d|       |dk\  sJ | j	                         d|       |t
        }|| _        |xs g | _        || _        || _	        |	| _
        y)ab  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overflowrX  truncatez invalid mode value r   z invalid maxHeight value N)namemaxWidthr  moder   r   
mergespacer  r2   r1   rs  )
r   r^  r  r  rp  r_  r]  r1   r2   rs  s
             r    r!   zKeepInFrame.__init__`  s     	 "	??t_c_l_l_nosAtt?!|[QZ[[|,@z$2"r"   c                 N    | j                   | j                  z
  | j                  z
  S r   )r^  _leftExtraIndent_rightExtraIndentr   s    r    _getAvailableWidthzKeepInFrame._getAvailableWidthu  s"    }}t444t7M7MMMr"   c                 v   d| j                   j                  dt        t        |             | j	                         t        | dd      xr dt        | dd      z  xs ddt        | dd      xr dt        t        | dd	            z  xs dd
t        | dd      xr dt        t        | d            z  xs d
S )Nry   rz   r]  r   
 name="%s"z> size=r^  z maxWidth=%sr   rC   r  z maxHeight=%s)r|   r$   r}   r~   r   r`   r   r`  s     r    r   zKeepInFrame.identityx  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           
          ddl m}  j                  }t        t	         j
                  xs ||            t        t	         j                  xs ||            } j                  t         j                   j                        \  }}|dk(  r:|t        z   kD  s||t        z   kD  r"d|d|d j                  d      } ||      |t        z   k  r*||t        z   k  r|t        z
   _        |t        z
   _        n\|d	v r2t	        |      t        z
   _        t	        ||      t        z
   _        n& fd
}	|}
|}d}|t        z   kD  rI|z  } |	|      \  }}||t        z   k  r'|t        z
   _        |t        z
   _        | _        ||fS |}|}|}
||z  } |	|      \  }}|t        z
   _        |t        z
   _        | _        |t	        d|z  |dz
        k  s||t        z   k\  rp|}dD ]i  }t!        |d|z
  z  t#        ||||            } |	|      \  }}||t        z   k  s9|t        z   k  sF|t        z
   _        |t        z
   _        | _         n  j                   j                  fS )Nr   )LayoutErrorrs  rZ  zcontent rC   z too large for    )r[  r\  c                     t        |       } t        j                  | z  j                        \  }}|| z  }|| z  }||fS )Nri  )r  r{  r  r7   )rC   rw  r   rs  r^  r   s      r    funczKeepInFrame.wrap.<locals>.func  sH    !H"4==8DIIQZ[1QQ!tr"   rv   gffffff?
   )r   r  r*  皙?g333333?)r\  rh  r_  r  r  r^  r  rs  r{  r  r7   r   r   r.   r/   _scalerU  rN  )r   r\   r]   rh  r_  r  rw  r   identrl  W0H0rA  rB  H1r   rz  rs  r^  s   `                @@r    rS   zKeepInFrame.wrap~  s]   >yyT]]8jDE#dnn;KHI	NN	4==$))yQ1'Mq%/1Yu_3D89!DMM"<MNEe$$1io#55DJE'DK,,Xa.DJi*50DK BBB%xZBx1io%!"5DJ"#E'DK"$DKQ3J9B8DAq5DJE'DKDKT)^IbL11Q	%5G 2 A	1Q32b0DEA7DAq)E/)a%.?%&uW
&'g&' zz4;;&&r"   c                    t        | dd      }| j                  dk(  }|dk7  xs |}|r|j                          |rL|j                         }|j	                  ||| j
                  | j                         |j                  |d       n.|j                  ||       dx}}|j                  d|z  d|z         t        j                  | |||||       |r|j                          y y )Nro  r   r\  r   )stroke)rP   r)  )r`   r_  rH   	beginPathrK   r.   r/   clipPathrI   r)  r  rQ   rL   )	r   r7   rC   rO   rP   r)  r\  ssps	            r    rQ   zKeepInFrame.drawOn  s    Xc*99j(CZ#8NNNN$q!TZZ4aq)q#!

3u9c%i0$a5At  "2r"   r   r   )r$   r%   r&   r!   rd  r   rS   rQ   r(   r"   r    rW  rW  _  s5    4618Z\djrz  GK #*Nl:'x#r"   rW  c                       e Zd ZddZddZy)_FindSplitterMixinNc                    d}d}	dx}
}d}| j                  |      }t        |      D ]  \  }}t        |d      r/ddlm} t        ||      r||j                  |j                  z   z  }B|j                  ||d      \  }}|t        k  s	|t        k  rkt        ||      }|s'|j                         }|rt        ||
z
  d      }|	|z  }	n||j                         |_        d}|	|k\  s||kD  r|||d| ||d fc S |	|z  }	|	|kD  r||	|z
  z
  }|rcddlm} t        ||t        f      rK|j                   j"                  }|t%        |t'        |      z        z  t        z   }||k  r||z  }|||z
  z  }|}	 t)        |      j+                  |||      }|s|||d| ||d fc S |||d| |dd z   |dd ||dz   d z   fc S |j-                         }
|	|
z  }	 ||
|_        ||	|
z
  |g fS #  d}Y ]xY w)rb  r   rv   re  rf  rg  N	Paragraph)_getContent	enumerater@   r\  rd  r   rk  rl  rX   r   r   rq   rm  reportlab.platypus.paragraphr~  r   rj   r   r   r  r  re   rn   rn  )r   r7   r\   r]   rp  rq  r  paraFixrw  r   rx  sBry  ro  r-  r   rd  rV   rW   rz  rU   r~  r   nHrd   s                            r    
_findSplitz_FindSplitterMixin._findSplit  s?   RW%Q< &	CAaq'Ca)!&&.0J((4
95CAa%x1e8XAaA$$&3qtA;qQ?q7G7G7IC$4+~:+q!uQqrU22FA} !A#&F!!Y|$<="#''//$SE'N):%;;EAb5"-"#r"u,!!,,T*R@A k1Ra51266[2Aq!uQqrU1QqST7]BB"BGAM&	P ?bCO!B$2~As   0G##G)c                     g }||n| j                   }|D ]C  }t        |t              r |j                  |j	                                3|j                  |       E |S r   )r  r   ListFlowabler&  r  r   )r   r  ro  r   r   s        r    r  z_FindSplitterMixin._getContent  sT    *G 	A!L))		
 r"   )rv   NNTr   )r$   r%   r&   r  r  r(   r"   r    r{  r{    s    0dr"   r{  c                   H    e Zd ZdZ	 	 ddZd Zd Zd Zd Zd Z	d	 Z
dd
Zy)ImageAndFlowables(combine a list of flowables and an ImageNc	                     t        |      | _        || _        || _        || _        || _        || _        || _        || _        y r   )	r  r  _I_irpad_ilpad_ibpad_itpadr  	imageHref)	r   r  ro  imageLeftPaddingimageRightPaddingimageTopPaddingimageBottomPadding	imageSider  s	            r    r!   zImageAndFlowables.__init__  s?    (+'&(%
"r"   c                 \    t        |       }| j                          |j                          |S r   )r   _resetr!  )r   r  s     r    r   zImageAndFlowables.deepcopy  s"    J	r"   c                     t        | d      r| j                  }n%t        | d      r| j                  }n| j                  }t        j                  | |      S )N_C1_C0)r@   r  r  r  r  rn   )r   r   s     r    rn   zImageAndFlowables.getSpaceAfter  sD    4AT% AA''Q//r"   c                 p    t        | j                  j                         t        j                  |             S r   )r   r  rq   r  r   s    r    rq   z ImageAndFlowables.getSpaceBefore%  s'    477))+J,E,Ed,KLLr"   c                 :    dD ]  }	 t        | |        y #  Y xY w)N)	_wrapArgsr  r  )delattrr   s     r    r  zImageAndFlowables._reset(  s)    * 	AQ	s   c                    | j                   }| j                  }t        | d      rV| j                  ||fk(  r%t	        |dd       | j
                  | j                  fS | j                          |j                          ||f| _        |j                  ||       |j                  ||      \  }}|| _        || _        | j                  }| j                  }| j                  }	| j                   }
||z
  |z
  |z
  x| _        }|
|z   |	z   }|t$        kD  r#| j'                  |||      \  }}| _        | _        n|}d}||t$        z   kD  rg | _        | j,                  | _        t/        ||      x}| _        || _        | j*                  s|| _        n$t3        | j*                  ||      \  }}||z   | _        | j
                  | j                  fS )Nr  r  r   )r7   r  r@   r  r`   r.   r/   r  r  rS   r  _wI_hIr  r  r  r  _iWr   r  r  r  r  r   _aHr{  )r   r\   r]   r7   r  r  r  ilpadirpadibpaditpadiWrU   rw  rr  W1rs  s                    r    rS   zImageAndFlowables.wrap/  s   yyGG4$~~
;77GAnUY<Z<bzz$++--KKM#[0	z+&K8B"U*R/%772RZ%e8%)__T"R%@"Ab$(ABRX:DH}}DHBr
"TX
xxDKD9EBrR%DKzz4;;&&r"   c           
      `   t        | d      rJ| j                  }| j                  ||fk7  st        |dd        | j	                          |j                          | j                  ||      \  }}| j                  |kD  rg S | j                  }|r9|d   j                  ||| j                  z
        }|sg }n|d   g}|dd  |dd  z   }ng }t        | j                  | j                  |z   | j                  | j                  | j                  | j                  | j                   | j"                        g|z   S )Nr  r  r   rv   )r  r  r  r  r  r  )r@   r  r  r`   r  r  rS   r  r  rc   r  r  r  r  r  r  r  r  )	r   r\   r]   r  rw  r   r  rd   r  s	            r    rc   zImageAndFlowables.splitS  s   4$A~~
;7771^TX;Y;e!!#IIj-!88KXX1J{488';<AtfqrU2ab6\C!GGHHSL%)[[&*kk$(KK'+{{"jjDNND   	r"   c                 H   | j                   dk(  r,|| j                  z   }|| j                  z   | j                  z   }n+|| j                  z   | j                  z
  | j                  z
  }|}| j
                  j                  |||| j                  z   | j                  z
  | j                  z
         | j                  rc|j                  | j                  ||| j                  z   | j                  z
  | j                  z
  || j                  z   || j                  z   fd       | j                  r/t        j                  | |||| j                  | j                         | j                  rB| j                   \  }}t        j                  | |||| j"                  z
  | j                  |       y y )Nrk  rv   )relative)r  rT   )r  r  r  r  r.   r  rQ   r/   r  r  r  linkURLr  r  r  r  r  r  )	r   r7   rC   rO   rP   IxFxrT   rU   s	            r    rQ   zImageAndFlowables.drawOno  sH   ::vT[[BT[[488+BTZZ(4BBtBq}T[[8AB>>LL"amDKK.G.PRTW[W_W_R_abcgcncnan)oz{L|88dD"adhhO88^^FBdD!QtxxZRP r"   )r   r   r   r   rl  Nr   )r$   r%   r&   r'   r!   r   rn   rq   r  rS   rc   rQ   r(   r"   r    r  r  	  s6    2fg15	#0M"'H8Qr"   r  c                   *    e Zd ZdZdZddZd ZddZy)	_AbsRectrv   TNc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y r   )_x_yr  r  _strokeColor
_fillColor_strokeWidth_strokeDashArray)	r   rC   rO   r.   r/   strokeWidthstrokeColor	fillColorstrokeDashArrays	            r    r!   z_AbsRect.__init__  s=    '#' /r"   c                      yr  r(   r[   s      r    rS   z_AbsRect.wrap  r  r"   c                 p   | j                   t        kD  r"| j                  t        kD  r| j                  xr | j                  d uxr | j                  dk\  }|s| j
                  r|j                          |r6|j                  | j                         |j                  | j                         | j
                  r|j                  | j
                         |j                  | j                  | j                  | j                   | j                  |rdnd| j
                  rdnd       |j                          y y y y Nr   rv   )ru  fill)r  r   r  r  r  r  rH   rJ   r  r   rK   r  r  rL   )r   r7   rC   rO   rP   sts         r    rQ   z_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   NNNr   r$   r%   r&   r  rh  r!   rS   rQ   r(   r"   r    r  r    s    IN0$r"   r  c                   &    e Zd ZdZdZd Zd Zd Zy)	_ExtendBGrv   Tc                 .    || _         || _        || _        y r   )r  r  _bg)r   rO   r/   r  r   s        r    r!   z_ExtendBG.__init__  s    r"   c                      yr  r(   r[   s      r    rS   z_ExtendBG.wrap  r  r"   c                    | j                   }| j                  }| j                  }|j                  }|j                  |z
  |j
                  z
  }|j                  |z
  }| j                  }|j                         }	|j                  ||||||       y r   )
r  r  r  rk  r  rl  _x1r7   getPageNumberr  )
r   r   r  r  r  r  r  r  r7   pns
             r    re  z_ExtendBG.frameAction  sx    XXggllwwllT!BHH,ii$yy!
		$uSS-r"   N)r$   r%   r&   r  rh  r!   rS   re  r(   r"   r    r  r    s    IN
	.r"   r  c                   *    e Zd ZdZdZddZd ZddZy)	_AbsLinerv   TNc                 f    || _         || _        || _        || _        || _        || _        || _        y r   )r  r  r  _y1r  r  r  )r   rC   rO   x1y1r  r  r  s           r    r!   z_AbsLine.__init__  s6    '' /r"   c                      yr  r(   r[   s      r    rS   z_AbsLine.wrap  r  r"   c                 |   | j                   r| j                  | j                  dk\  r|j                          |j                  | j                          |j	                  | j                         |j                  | j                  | j                  | j                  | j                         |j                          y y y y r   )r  r  rH   rJ   r  r   r  r  r  r  rL   r   r7   rC   rO   rP   s        r    rQ   z_AbsLine.drawOn  s    !2!2!>4CTCTVWCWNN 1 12d//0IIdggdggdhhtxx8 DX!>r"   )r   NNr   r  r(   r"   r    r  r    s    IN0 r"   r  c                   J    e Zd ZdZ	 	 	 	 	 	 	 	 	 d	dZd
dZd Zd Zd Zd Z	y)BalancedColumnsr  Nc                    |xs dt        |       z  | _        |dk  rt        d|d| j                               t	        |      | _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        |t        z
  | _        || _        || _        || _        || _        || _        || _        || _        || _        y )NzBalancedColumns-%dr  znCols should be at least 2 not z in )r~   r]  rA   
identitityr  r  _nColsrm   r  _innerPadding_rightPadding_topPadding_bottomPaddingrp   r   _neededshowBoundaryendSlack_boxStrokeColor_boxStrokeWidth_boxFillColor
_boxMargin_vLinesStrokeColor_vLinesStrokeWidth)r   ro  nColsneededrp   rm   r  leftPaddinginnerPaddingrightPadding
topPaddingbottomPaddingr]  r  boxStrokeColorboxStrokeWidthboxFillColor	boxMarginvLinesStrokeColorvLinesStrokeWidths                       r    r!   zBalancedColumns.__init__  s     ;02d8;	!8%PTP_P_Pabcc(+$'))%+&~( --)#"3"3r"   c                     d| j                   j                  d| j                  dt        t	        |             | j                         t        | dd      xr dt        | dd      z  xs dd	S )Nry   z nCols=rz   r]  r   rf  r{   )r|   r$   r  r}   r~   r   r`   r`  s     r    r   zBalancedColumns.identity  sb    ,0NN,C,CT[[RUVXY]V^R_aeapaparVB'S\74r;R-RYWYY 	r"   c                     | j                   S r   )rm   r   s    r    rn   zBalancedColumns.getSpaceAfter  s    r"   c                     | j                   S r   )rp   r   s    r    rq   zBalancedColumns.getSpaceBefore  s    r"   c                 6   CDEFGHI g } j                   Gddlm}m}m} ddlm} ddlm}  j                  Gj                  n j                  }	 j                  Gj                  n j                  }
 j                  Gj                  n j                  } j                  Gj                  n j                  }Gj                  }Gj                  } j                  t        |	|
      n j                  }|dz  } j                   E j"                  H||Hdz
  z  z
  |	z
  |
z
  t%        H      z  F|}|||z   z  } j'                  EFH|z  d      \  }}}}|sYt)         j+                         d	|d
|dFdH|z  d j,                  D cg c]  }|j.                  j0                   c}      i Dd8DEFH fd	Id}|r|}ndd l}DIfd}d|j5                  d      dz   dz  fDfd	}t7        t9        |t%        H      z   j:                  dz  z         |      } I|       D|   d   s' ||||      }|r|\  }}}}|}d}nS|} j<                  }nD|t%        H      z  } I|       D|   d   s& ||||      }|r|\  }}}}|}d}n|} j<                  }|rJ d        I||      \  }}}}Dj?                          |d   g k(  r|d   g k(  r|r||d   g|d   }}Gj@                  } GjB                  }!GjD                  }"|!|z   |z   |z   }#||z   |z   }$|#|$z
  }%|t%        H      z  }&|s|r || |       }' |||      }(nd x}'}( jF                   jF                  nGjF                  })| |z   Gj                  z   }*tI        H      D +cg c]M  }+ ||*|+|&z  z   |%|&|$|+s|	n|||+Hdz
  k(  r|
n||d jJ                  |+fz  |)GjL                  GjN                        O },}+ jQ                  d      CC |d j+                         z        tS        Gdd       }-|-r|-d   nd x}.}/ G CGfdd|      }0|/rtU        |%|$|/G      }.|jW                  |.       CjX                  }1|jW                   |0g |,|,d                |'r|jW                  |'        jZ                  xr  j\                  xr  j\                  dk\  xs  j^                  }2 j`                  xr  jb                  xr  jb                  dk\  }3|2s|3r jd                  }4|4sd}4tg        |4      dk(  r|4d   x}5x}6x}7}8nwtg        |4      dk(  r|4d   x}5}8|4d   x}6}7nZtg        |4      dk(  r|4d   }5|4d   x}6}7|4d   }8n:tg        |4      dk(  r|4d   }5|4d   }7|4d   }8|4d   }6nt)        d ti        |4      z        |*|6z
  }9|,d   j@                  |,d   jD                  z   |7z   }:|%|8z
  };|$|5z   |8z   }<|;|<z   }=|2r3tk        |9|;|:|9z
  |< j^                   jZ                   j\                  !      }>|3rg }?tI        dH      D ]n  }+d|,|+   j@                  |,|+dz
     j@                  z   |,|+dz
     jD                  z   z  }@|?jW                  tm        |@|;|@|= jb                   j`                  "             p n|#}=|%};|2r|jW                  >       |3r|jo                  ?        jq                         }AtI        H      D ]]  }+||+   }B|Br:ts        ||Bd#$      }Bt        A|Bjq                               }A|jW                  |B       |+Hdz
  k7  sM|jW                  |       _ |jW                   |0|-|1G             |.r6|rd}At7        |%|;      Az
  |._:        t        |#|=      |.jt                  z
  |._;        |(r|jW                  |(       |r|jW                  ty        |fi d%Hd& jz                  d' j|                  d( j:                  d) jF                  d* j                  d+ j                  d, j                  d- j                  d. j                  d/ jJ                  d0z   d1 j<                  d2 jZ                  d3 j\                  d4 j^                  d5 jd                  d6 j`                  d7 jb                         |$|fS c c}w c c}+w )9Nr   )rh  r
  rd  FramerY  r>   rv   F)r  z cannot make initial split aW=z aH=z ie cw=z ah=z	
content=c                    | vrg }d}d}d }|rdz
  nd}t              D ]  }j                  | |d      \  }}	}
}t        ||      }t        ||	      }|j                  |
       ||k(  rCj                  d| z  |d      \  }}}}|d|z   | z  k  r|j                  |       | dz
  }g } n|} | dt	        |g k7        z  z   |g k(  ||||ff| <   |    d   S )	Nr   r  r   F)r  r  rv   gư>i )r   r  r   r   r   )ahr  r  rV   rW   cnicheckr-  wihic0c1wchccc0cc1_fresr7   cwr  r   s                   r    	splitFuncz5BalancedColumns._generated_content.<locals>.splitFunc  s   $,q"u A%)__T"RSX_%YNBBAb	AAb	AHHRL&y+/??41R4PR[`?+a(BS(
B.HHRL "4A!#B!B vc"b&k11"b&!AaCb	9Q<r"   c                 $     |        |    d   S r   r(   )r  r  r	  s    r    rl  z0BalancedColumns._generated_content.<locals>.func1  s    "Ry|#r"      r  c                 h   |||z
  |z  z
  }|||z
  |z  z   }t        ||z
        |kD  r> | |       | |      k  r|}n|}|||z
  |z  z
  }|||z
  |z  z   }t        ||z
        |kD  r>j                         D 	cg c]  \  }}}	|s
|||	f }
}}}	|
r|
j                          |
d   d   S y c c}	}}w )Nr   r  )r,  valuessort)r   rE   r   tolgrr  r-  rC   tfvro  r  s              r    gssz/BalancedColumns._generated_content.<locals>.gss5  s    Q"$Q"$!a%j3&tad{ QUbL(AQUbL(A !a%j3& -2LLNAA&!Bqba1XAAFFHQ47N	 Bs   ;B-B-g?zunexpected non-empty C2z%s-%d)r  r  r  r  r~   r  r   _debugpageTemplatez&%s used in non-doctemplate environmentr  r   c                   0    e Zd ZdZg g dfdZW  ffd	Zy)3BalancedColumns._generated_content.<locals>.TActionz?a special Action flowable that sets stuff on the doc template TNc                 X    t         j                  |        || _        || _        || _        y r   )r*   r!   bgsro  r   )r   r  ro  r   s       r    r!   z<BalancedColumns._generated_content.<locals>.TAction.__init__  s%    !!$'r"   c                     | j                   |_        | j                  _        |j	                  | j
                  j                         | j                  _        y r   )ro  framesr  r  handle_currentFramer   r~   )r   docr3  r   s      r    r  z9BalancedColumns._generated_content.<locals>.TAction.apply  s:    66"&((''		2"&((r"   )r$   r%   r&   r'   r!   r  )r3  r   s   r    TActionr    s    Q#%T  "# +r"   r  )r   r   r   r   r      zInvalid value %s for boxMargin)r  r  r  )r  r  rX  )r_  r  r  rp   rm   r  r  r  r  r  r  r]  z-1r  r  r  r  r  r  r  r   )?r   r\  rh  r
  rd  reportlab.platypus.framesr  rZ  r  r  r  r  rb  rc  r  r   r7   r  r  r  rA   r   r  r|   r$   rQ  rP  r  r   rm   r  clearr  r  r  r  r   r]  _oASpacer  r   r`   r  r   r  r  r  r  r  r  r  r   r   r  r  r&  rn   rW  r  r  r  r  rp   )Jr   rT   rU   Grh  r
  rd  r  rZ  lpadrpadtpadbpadleftExtraIndentrightExtraIndentgaphgapaH0rw  rr  r  C2r   r  r   rQ  rl  r  rs  r  r   r  r  r  fwftopfhy2r+  	indenter0	indenter1r  obxr-  ro  BGsxbgr  r  	oldFramesdoBoxdoVLinesobmobmtobmlobmrobmbobx1obx2oby2obhoby1boxvLinesvlxsaCir3  r  r7   r  r   r  r	  sJ   `                                                                  @@@@@@@r    ri  z"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$tn@R@R3wyy3a= 4'$.e<
dTk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 1A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 GAqtxx!AaC&**4QqsV]]BCCMM(3tCI`I`mq  nE  nE  #F  G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u FJ<s   b
Abc           
      *   t        | dd       }|| j                  | j                  z   t        z
  k  rt	               | g}d}n6|sddlm}  |dd|ddddd      | _        | j                  ||      \  }}|s| `|r |j                  |  dt        ||      fS )Nr   r   r  i)r  r  r  r  )r`   rp   r  r   rH  r   r  r   ri  r]  r  )r   rT   rU   
self_framer#  rs  r  s          r    rS   zBalancedColumns.wrap  s    T(40
dt||+E11d#AB;#Aa:!RS/0qB++Br2EBK7z77;R|r"   )r  r   r   r   NNNNNNr   rn  Nr   NNNNr   )
r$   r%   r&   r'   r!   r   rn   rq   ri  rS   r(   r"   r    r  r    sA    2X\cg!""4@
 rhr"   r  c                   0    e Zd ZdZdZdZd Zd Zd Zd Z	y)	AnchorFlowablezcreate a bookmark in the pdfrv   Tc                 @    t         j                  | dd       || _        y r   )r9  r!   _name)r   r]  s     r    r!   zAnchorFlowable.__init__  s    Qq!
r"   c                 N    | j                   j                  d| j                  dS )Nr>  r   )r|   r$   rN  r   s    r    r   zAnchorFlowable.__repr__  s    >>224::>>r"   c                      yr  r(   r  s      r    rS   zAnchorFlowable.wrap  r  r"   c                 R    | j                   j                  | j                  dd       y r   )r7   bookmarkHorizontalrN  r   s    r    r8   zAnchorFlowable.draw  s    		$$TZZ!4r"   N)
r$   r%   r&   r'   r  rh  r!   r   rS   r8   r(   r"   r    rL  rL     s#    &IN?5r"   rL  c                   $    e Zd Zd Zd Zd Zd Zy)_FBGBagc                     t        |      }t        | j                  t              xr || j                  v xs || j                  k(  xr7 t        |      | j                  k(  xr | j
                  |j                         k(  S r   )r~   r   fidr~  cidr  r  )r   r   r7   rV  s       r    matchesz_FBGBag.matches  sj    iDHHT*>sdhhO#txx- M4$((*M/3ww8J8J8L/L	Nr"   c                     |j                   | j                     j                         | _        t	        t
        | j                  dd       S )Nrv   r  )_codecodePosrc   _instr  r  r9   s     r    getDimsz_FBGBag.getDims  s6    ZZ-335
5Aa))r"   c                     t        ||||      g| j                  dd dj                  | j                        |j                  | j                  <   y )Nrv   r   )r   r\  r   rZ  r[  )r   r7   rC   rO   rV   rW   s         r    setDimsz_FBGBag.setDims  s=    !!Aa?+

1Q#&88DJJ#7

4<< r"   c                 \   t        |      t        kD  rt        |      t        kD  r|j                         }| j                  t	        |      k(  rY| j
                  t	        |      k(  rA| j                  |k(  r2| j                  |      \  }}	}
}| j                  ||||
||	z   |z
         y |j                          | j                  }|r|j                  |       | j                  }||dk  rd n| j                  }|rA|j                  |       |j                  |       | j                   }|r|j#                  |       t	        |      | _        t	        |      | _        || _        t%        |j&                        | _        |j+                  |||||rdnd|rdnd       |j-                          y y y r  )r,  r   r  rV  r~   rW  r  r]  r`  rH   r  r   r  r  rJ   r  r  r  r   rZ  r[  rK   rL   )r   r7   r   r  r  r  r  r  oxoyowohfbgcswscdas                   r    r  z_FBGBag.render  s_   s8E>c#hun##%BxxE"txxD'9dggrk"ll402bT"SBrE#I6 ~~%%d+%%Z2a4TT5E5E''+%%b)--BR(e9d8"4::		#c#cba$QTU	V!!#/ ->r"   N)r$   r%   r&   rX  r]  r`  r  r(   r"   r    rT  rT    s    N
*8$r"   rT  c                   (    e Zd ZdZdZddZd Zd Zy)FrameBGa$  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.
    rv   Nc                     t         j                  | dd       || _        |r=ddlm}  ||      | _         ||      | _        || _        || _        || _	        || _
        y y )Nr   )_evalMeasurement)r9  r!   r  r\  rm  rk  rl  r  r  r  r  )	r   r  rk  rl  r  r  r  r  rm  s	            r    r!   zFrameBG.__init__@  s[    Qq!
G(.DI)%0DJDJ*D*D#2D  r"   c                     | j                   j                  ddj                  dj                         D cg c]  }|dt	        | |d        c}      dS c c}w )Nr>  r?  zstart color left right=r   )r|   r$   r   rc   r`   )r   r-  s     r    r   zFrameBG.__repr__L  sl    >>22499  kC  kI  kI  kK  >Lef7SWXYZ^K_>`  >L  4M  N  	N  >Ls   Ac                    t        | dd       }|y | j                  r| j                  }| j                  }|dn|}|j                  j                  t        | j                  | j                  | j                  | j                  dv r| j                  nd | j                  | j                  | j                  dddd d             y |j                  r|j                  j                          y y )Nr   r   )r   zframe-permanentr   T)rk  rl  r  r  r  r  r  rV  rW  r  r[  r  )r`   r  r  r  r  r   rT  rk  rl  r  r  rj  )r   r   rh  rg  s       r    r8   zFrameBG.drawO  s    Xd+=&::!!B!!BzrBOO""TYY&*jj*.**48JJB]4]djjcg,0,<,<,0,<,<040D0D&'&'%'*.'+"# __OO! r"   )Nr   r   TNNN)r$   r%   r&   r'   r  r!   r   r8   r(   r"   r    rk  rk  9  s    
 I
3N"r"   rk  c                   *    e Zd ZdZdZg dddfdZd Zy)	FrameSplittera@  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.
    rv   rm  r   Tc                 R    || _         |xs g | _        || _        || _        || _        y r   )rJ  
nextFramesr*  requiredadjustHeight)r   rJ  rt  r*  ru  rv  s         r    r!   zFrameSplitter.__init__n  s,    ($* (r"   c                    | j                   }ddlm}m}m}  || j
                        g}|| j                  | j                  z   t        z
  k  r|j                  t                      n| j                  d      }| |d| j                         z        |D 	cg c]  }	|	j                  | j
                  k(  s|	  }
}	|
s& || j                         d| j
                  d      |
d   }
|
j                  D cg c]  }|j                  | j                  v s| }}|D cg c]  }|j                   }}| j                  D cg c]	  }||vs| }}|rP || j                         d|d|
j                  d	|
d
|
j                  D cg c]  }|j                   c}	      | j                  d      }
|
|
j                   |
j                  fd}||
_        || j                  z
  }t#        |      D ]8  \  }}t%        |      }| j&                  r||_        |j+                          |||<   : ||
_        |j                   ||d   j                                |j,                  |  yc c}	w c c}w c c}w c c}w c c}w )Nr   )NextPageTemplateCurrentFrameFlowablerh  pageTemplatesz(%s called in non-doctemplate environmentz.nextTemplate=z
 not foundz frames=z not found in pageTemplate(z)
z has frames r  c                 2    ||_         ||_         || |       y r   )r  onPage)r7   r  r3  r|  r7  s        r    unwrapz"FrameSplitter.wrap.<locals>.unwrap  s    "tC r"   r[  )r   r\  rx  ry  rh  rJ  r*  ru  r   r   rH  r   r   r~   r  rt  r|  r  r   rv  r/   r  r]  )r   rT   rU   r   rx  ry  rh  r#  	templatesrS  r3  r   ro  Nr}  rW   r-  s                    r    rS   zFrameSplitter.wrapu  sZ   ddD--.
/dhht}}$U**HHY[! --o>I !"LT]]_"\]]#?QqttT->->'>q?A?!DMMOTXTeTe"fggdA((>Qadddoo&=q>A>qttA//8QQaZq8A8!dhdqdqdstuvwvzvz{|  MN  MU  MU  ~V  HI~  C  C  ~V  #W  X  X##N3A"#188ahh ! AHkA | !q'$$qah
!	
 AHHH)!A$''23###Q'1 @ ?8 ~Vs0   I(7I(8I-I- I2	I7I7	I<N)r$   r%   r&   r'   r  r!   rS   r(   r"   r    rr  rr  g  s"    
 I02RVZ )$r"   rr  )_type2formatteru   •u   ●u   ■u   ○u   ◆u   ❖u   ➤u   ❇u   ❏u   ★)

bulletcharcircler  discdiamond	diamondwx
rarrowheadsparkle	squarelrs	blackstarc                     |dk(  rt         j                  | |       }nt        |   t        |             }|r:t	        |t
              r||z  }|S t        |      r
 ||      }|S t        d|z        |S )Nbulletz!unexpected BulletDrawer format %r)_bulletNamesr  r  r   r   r   callablerA   )valuetypeformatrz  s       r    _bulletFormatr    s}    X~U5)D!#e*-fX&
A
 H	 fq	A H @6IJJHr"   c                   0    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZy)BulletDrawerNc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        y r   )
r  _bulletAlign_bulletType_bulletColor_bulletFontName_bulletFontSize_bulletOffsetY_bulletDedent
_bulletDirr  )r   r  bulletAlign
bulletTypebulletColorbulletFontNamebulletFontSizebulletOffsetYbulletDedent	bulletDirbulletFormats              r    r!   zBulletDrawer.__init__  sR     
'%'--+)#)r"   c                    | j                   }|sy |j                          |j                  ||       |j                  | j                  z
  | j
                  z   }| j                  dk(  r'|j                  |j                  z
  | j                  z   }n|j                  | j                  z
  }|j                  | j                  | j                         |j                  | j                         | j                  }t!        || j"                  | j                         }|dk(  r|j%                  |||       n|dk(  r|j'                  |||       nt|dv r|j)                  |||       n\|j+                  d      s|j+                  d      r,|dd  j-                         xs d}|j/                  ||||       nt1        d	|z        |j3                          y )
Nrtlrk  rl  )centercentrenumericdecimal   .zInvalid bulletAlign: %r)r  rH   rI   r/   r  r  r  r.   _rightIndentr  _leftIndentr   r  r   r  r  r  r  
drawStringdrawRightStringr   
startswithr   drawAlignedStringrA   rL   )	r   indenterr7   rC   rO   rP   r  r  pcs	            r    rQ   zBulletDrawer.drawOn  s   

fq!OOD0001D1DD??E!!6!669K9KKA$$t'9'99AT))$*>*>?$++,''eD$4$4T5G5GHOOAa&'!  1U+//""1Qu-##I.+2H2H2SQR&&(/CB""1QuR06DEEr"   )
0rk  1black	Helveticar   r   r   ltrNr   )r$   r%   r&   r!   rQ   r(   r"   r    r  r    s*     &" '#.#%"#!"#!%*.r"   r  c                     t        || j                  | j                         }t        || j                  | j                        S r   )r  r  r   r  r  )r   r  s     r    _computeBulletWidthr    s3    %aoo>EuQ..q/@/@AAr"   c                   b    e Zd Zdj                         ZddZd ZddZd Zd Zd Z	d Z
dd
Zy	)
DDIndenterz/_flowable _leftIndent _rightIndent width heightc                 J    || _         || _        || _        d | _        d | _        y r   )	_flowabler  r  r.   r/   )r   flowabler   r  s       r    r!   zDDIndenter.__init__  s'    !%'
r"   c                     | j                   j                  || j                  z
  | j                  z
  |      }|D cg c]$  }t	        || j                  | j                        & c}S c c}w )N)r   r  )r  rc   r  r  r  r   rT   rU   rd   rz  s        r    rc   zDDIndenter.split  sk    NN  D$4$4!4T5F5F!FK
 $%	   1#'#3#3$($5$5 	 s   )A'c           
          | j                   j                  ||| j                  z   |t        d|| j                  z
  | j                  z
               y r   )r  rQ   r  r   r  r  s        r    rQ   zDDIndenter.drawOn  sC    d1T%5%5#5aAc$BRBR>RSWSdSd>d8efr"   c                     | j                   j                  || j                  z
  | j                  z
  |      \  }}|| j                  z   | j                  z   | _        || _        | j                  |fS r   )r  rS   r  r  r.   r/   r   rT   rU   rV   rW   s        r    rS   zDDIndenter.wrap  sd    nn!!"T%5%5"5d6G6G"GL!t'''(9(99
zz!|r"   c                     || j                   v r	 | j                  |   S t	        | j
                  |      S # t        $ r$ |dvrt        | d| d| j                         Y Bw xY w)Nrp   rm   z has no attribute z dict=)_IndenterAttrsr!  KeyErrorr"  r`   r  r   s     r    r#  zDDIndenter.__getattr__  sz    ###`}}Q'' t~~a((  `88(D83EaSt}}o)^__ 9`s   5 *A"!A"c                 n    || j                   v r|| j                  |<   y t        | j                  ||       y r   )r  r!  setattrr  r   rE   r  s      r    __setattr__zDDIndenter.__setattr__  s.    ### DMM!DNN1Q'r"   c                 h    || j                   v r| j                  |= y t        | j                  |       y r   )r  r!  r  r  r   s     r    __delattr__zDDIndenter.__delattr__  s*    ###a DNN1%r"   Nc                 j    | j                   j                  d| j                  j                  |      S )Nz containing )r|   r$   r  r   r`  s     r    r   zDDIndenter.identity"  s'    %)^^%<%<T^^=T=TU[=\]]r"   r[  r   r   )r$   r%   r&   rc   r  r!   rQ   rS   r#  r  r  r   r(   r"   r    r  r    s:    FLLNNg)(&^r"   r  c                   B    e Zd Zdj                         ZddZd ZddZy)
LIIndenterzN_flowable _bullet _leftIndent _rightIndent width height spaceBefore spaceAfterNc                 ~    || _         || _        || _        || _        d | _        d | _        ||| _        ||| _        y y r   )r  _bulletr  r  r.   r/   rp   rm   )r   r  r   r  r  rp   rm   s          r    r!   zLIIndenter.__init__'  sN    !%'
"*D!(DO "r"   c                    | j                   j                  || j                  z
  | j                  z
  |      }|D cg c]<  }t	        || j                  | j                  ||d   u xr | j
                  xs d       > c}S c c}w )Nr   )r   r  r  )r  rc   r  r  r  r  r  s        r    rc   zLIIndenter.split3  s    NN  D$4$4!4T5F5F!FK $%
  	 1#'#3#3$($5$5"#qt)"<"D 	 s   AA?c           
          | j                   r| j                   j                  | |||d       | j                  j                  ||| j                  z   |t	        d|| j                  z
  | j
                  z
               y r   )r  rQ   r  r  r   r  r  s        r    rQ   zLIIndenter.drawOn=  sd    <<LLT!Aa0d1T%5%5#5aAc$BRBR>RSWSdSd>d8efr"   )r   r   NNNr   )r$   r%   r&   rc   r  r!   rQ   r(   r"   r    r  r  %  s     ekkmN
)gr"   r  )	ListStylec                       e Zd Z	 ddZy)ListItemNc           	         t        |t        t        f      s|f}|| _        i x}| _        |r<t        |t
              s%t        | j                  j                  d|d      || _	        t
        j                  D ]-  }||v r|j                  |      }n|rt        ||      }n)|||<   / dD ]'  }|j                  |t        ||d             }|#|||<   ) y )Nz style argument (z) not a ListStyle)r  rp   rm   )r   r~  r  
_flowables_paramsr  rA   r|   r$   _styledefaultsr  r`   )r   r  rj   r  paramskr  s          r    r!   zListItem.__init__E  s    " )T%L1"I# ""eI. T^^MdMdej!kllDK## 	ADyHHQKE!$F1I	 7 	A75401A}q		r"   r   r  r(   r"   r    r  r  D  s     'r"   r  c                       e Zd Zd Zy)	_LIParamsc                 <    || _         || _        || _        || _        y r   )r  r  r  first)r   r  r  r  r  s        r    r!   z_LIParams.__init__o  s     

r"   Nr  r(   r"   r    r  r  n  s    r"   r  c                   T    e Zd ZdZ	 	 ddZed        Zd Zd Zd Z	ddZ
dd	Zd
 Zy)r  1aAiINc                    || _         |r9t        |t              s"t        d| j                  j
                  z        || _        t        j                  j                         D ]0  \  }}t        | d|z   |j                  |t        |||                   2 dD ]/  }|j                  |t        ||d             }|#t        | ||       1 d}|1t        | dd       }|"| j                  dk(  rd}d}n| j                  }d}| j                  dk7  rj|r1|D ]+  }|| j                  vst        d	|d
| j                         n7| j                  D ](  }|| j                  vst        d| j                  z         || _        |xs t        |t        t         f      | _        d | _        d | _        |j)                  dd       | _        y )Nz!%s style argument not a ListStyler'  r  F_startr  r  Tzinvalid start=z or bullettype=zinvalid bullettype=%rcaption)r  r   r  rA   r|   r$   rj   r  itemsr  r  r`   r  _numberStylesr  r~  r  _auto_list_content_dimsrj  _caption)r   r  r  rj   r  r  r  r3  s           r    r!   zListFlowable.__init__w  s   $ $eI. !Dt~~G^G^!^__DJ%%++- 	?CAaDQtxx'%!*<=>	? . 	"A75401A}Qq!	"
 =D$/E}##X-(ED ,,EDX% iA 2 22(PUVZVfVf)ghhi )) UA 2 22()@4CSCS)STTU ;ZtEl;
!
40r"   c                 `    | j                   | j                         | _         | `| j                   S r   )r  r  r  r   s    r    r  zListFlowable._content  s0    %!%!1!1!3D!!!r"   c                     | j                   |k7  r5t        | j                  || j                        \  | _        | _        || _         | j                  | j
                  fS r   )r  r{  r  r7   r.   r/   r  s      r    rS   zListFlowable.wrap  sF    ::r>&1$--499&M#DJDJzz$++%%r"   c                     | j                   S r   )r  r  s      r    rc   zListFlowable.split  s    }}r"   c           
   #   &  K   | j                   D ]}  }t        |t        t        f      r3|st	        |      D ]!  \  }}|dk(  xr t        |t
               |f # Mt        |t              r|j                  }|sBt	        |j                         D ])  \  }}t        |t
              rt        d      |dk(  |f + |j                         }|j                  dd       }|j                  dd       }|j                  dd       }t        |j                         dz
  }t	        |j                         D ]C  \  }}|j                         }	|s|||	d<   ||k(  r|||	d<   |rd }dt        ||	||dk(        f E it        |t
               |f  y w)Nr   z"LIIndenter not allowed in ListItemr  rp   rm   rv   )r  r   r~  r  r  r  r  r  rA   r   rj  r   r  )
r   r   r-  zr  r  rp   rm   r/  r  s
             r    _flowablesIterzListFlowable._flowablesIter  s     	6A!T%L) )! G1dC:a
+C'CQFFGAh' )!,, 7 &1%a
3",-Q"RRdAg&
 $[[]F"JJwt4E"(**]4"@K!'L!>JALL)A-A )!,, 7 ;1"KKM [%</:Am,a4J$:.8AlODe1QuQT!:::; %Qz22A559	6s   )FE%Fc                 $   |rm|j                  d| j                        }|j                  d| j                        }|j                  dd       }|j                  dd       }t        ||||||      S t        || j                  | j                  |      S )Nr   r  rp   rm   r  )r  r  r  r  )r   r  r  r  r   r  rp   rm   s           r    _makeLIIndenterzListFlowable._makeLIIndenter  s    L1A1ABJ **]43D3DEK **]48KL6Jhz+fQ\hrssht'7'78I8I&QQr"   c                       fd}nt        dd        fd}t        | |d       |d       |d       |d       |d       |d	       |d
       |d       |d      
      S )Nc                 "    t        d| z         S Nr'  r   )rE   r   s    r    getpz&ListFlowable._makeBullet.<locals>.getp  s    tCE**r"   rj   c                 l    | v r|    S r| j                   v rt        |       S t        d| z         S r  )r!  r`   )rE   r  r   rj   s    r    r  z&ListFlowable._makeBullet.<locals>.getp  s=    ;vay 0Q%..0a2HtCE**r"   r  r  r  r  r  r  calcBulletDedentr  r  )
r  r  r  r  r  r  r  r  r  r  )r`   r  )r   r  r  r  rj   s   ` ` @r    _makeBulletzListFlowable._makeBullet  s    >+ F740E+
  $] 3#L1 $] 3#'(8#9#'(8#9"&"7!%&8!9";/!%n!5 	r"   c           	      	   | j                   }| j                  }t        |t        t        f      r|}|d   }n|g}|d   }t        |dv       }|r	 t        |      }| j                  }|dk(  rV| j                  }| j                  }|dk(  r|dk(  r| j                  }n&|dk(  r| j                  }n|}	d}
| j                         D ]  \  }}|rt        |
t        | |	            }
|s!|	|z  }	't        |t              s8|j                  }|rE|j                   |k(  rLt        |
t        ||j"                              }
t        |j"                        }	nt        |
t        | |	            }
|s|	|z  }	 |dk(  r(|dk(  r| j                  |
z
  }n:| j                  |
dz  z
  }n'|dk(  r| j                  |
z
  }n| j                  |
dz  z
  }|| _        g }|j&                  }d}| j                         D ]l  \  }}t        |t(              rv|j                  }t        |t        t        f      r|d   }||v rK|j*                  r=|j-                  |      dz   }||d  |d | z   |_        |j                  d   }|r
||_         n|}i }|s|dz  }t/        | d	d       }|||d	<   |r2 || j1                  || j3                  |      |
             |s||z  }t        |t              r|j                  }|r@|j                   |k7  rt5        d|j                   d|      t        |j"                        }n#| j3                  |t/        |dd             |_        |r3t        |j6                  j9                  d	d            |j6                  d	<    ||       |s||z  }t        |t:              r|j=                  |j>                         | j1                  |j@                  d |
      }|jB                  rM|j"                  |j"                  }|rt        |      }| j3                  ||j>                        |_        |r||z  } ||       S || j1                  |d |
             o t/        | dd       }|8|d   }t        |j6                  j9                  dd      |      |j6                  d<   | jD                  r|jG                  d| jD                         |S #  d}Y wxY w)Nr   r  rv   r3  r  rk  rl  r>   rp   )r  r  zIncluded LIIndenter bulletType=z != OrderedList bulletType=r  )r  rm   r   )$r  r  r   r~  r  r   r  r  r  r  r  r  r   r  r  r  r  r  _calcBulletDedentr   r  r  indexr`   r  r  rA   r!  r  r  updater  r  r  r  r  )r   btr  r  autovincbdaligndirtvaluemaxWr-  r   r   rd   aSr-  fstartfparamsrp   r  rm   s                         r    r  zListFlowable._getContent	  s   eT%L)F1IEWFq	"- E
 v:%%E//CEzeVm%%&& ..0 .CAa"4(;D(HI##Aj1II ||R/'*40CAagg0N'O),QWW#&t,?V,L#MD#. :g~!--4!--S8F]**T1B**T#X5B!#XX
&&( .	GCAa!L)fd5\2#AYFV#ww &U 3A 5#)%&>&%.#@ ! &GQ%d=>*-8GM*4''1A1A%1HPW'XYAj)II||R'(mnmymyz|)}~~LE $ 0 0gaQU>V 0 WAI03AJJNN=QR4ST_0`AJJ}-1Ai(qxx(((4w(O77ww* !E
 $ 0 0qxx @AIESLE14''W'EF].	G` T,t4
!eA'*1::>>,q+I*'UAJJ|$==!((1T]]3Es   S
 
Sr  r   )r$   r%   r&   r  r!   r   r  rS   rc   r  r  r  r  r(   r"   r    r  r  u  sI    M 91v " "&6>R0or"   r  c                   <    e Zd ZdZd Zd Zd Zd
dZd Zd Z	d Z
y	)	TopPadderzwrap 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                 "    || j                   d<   y )N_TopPadder__f)r!  r   s     r    r!   zTopPadder.__init__x	  s    )*o&r"   c                 l    | j                   j                  ||      \  }}||z
  | j                  d<   ||fS )N_TopPadder__dh)r  rS   r!  r  s        r    rS   zTopPadder.wrap{	  s6    hhmmBr"!*,Q$&'s
r"   c                 |    | j                   j                  ||      }t        |      dkD  rt        |d         |d<   |S )Nrv   r   )r  rc   r   r  )r   rT   rU   rd   s       r    rc   zTopPadder.split	  s7    HHNN2b!q6!8QqT?AaDr"   c           
      t    | j                   j                  |||t        d| j                  dz
        z
  |       y )Nr   rF  )r  rQ   r   r  rM   s        r    rQ   zTopPadder.drawOn	  s,    q3q4#8!8=r"   c                 2    t        | j                  ||       y r   )r  r  r  s      r    r  zTopPadder.__setattr__	  s    1r"   c                 .    t        | j                  |      S r   )r`   r  r   s     r    r#  zTopPadder.__getattr__	  s    txx""r"   c                 0    t        | j                  |       y r   )r  r  r   s     r    r  zTopPadder.__delattr__	  s    r"   Nr   )r$   r%   r&   r'   r!   rS   rc   rQ   r  r#  r  r(   r"   r    r  r  t	  s*    +
>#r"   r  c                   .    e Zd ZdZdZddZd Zd Zd Zy)		DocAssignzJAt wrap time this flowable evaluates var=expr in the doctemplate namespacerv   c                 B    t         j                  |        |||f| _        y r   r*   r!   r  )r   varexprlifes       r    r!   zDocAssign.__init__	  s    $TM	r"   c                     | j                  d      }|j                  t        ||             	 | j                         dD ]  }	 ||=  S #  Y xY w# dD ]  }	 ||= #  Y xY w w xY w)N
_nameSpaceavailableWidthavailableHeight)r   r  dictrl  )r   rT   rU   NSr  s        r    funcWrapzDocAssign.funcWrap	  s      .
		$b<=	99;7 1	 8 1	s/   A A

AA%AA%A 	A%c                 r     | j                  d| j                  j                  dd  z         | j                   S )Nr-  rv   )r   r|   r$   r  r   s    r    rl  zDocAssign.func	  s4    Et$$S)@)@)D%DEtyyQQr"   c                 (    | j                  ||       yr  )r(  r  s      r    rS   zDocAssign.wrap	  s    br"   Nforever)	r$   r%   r&   r'   r  r!   r(  rl  rS   r(   r"   r    r  r  	  s    TI"
Rr"   r  c                       e Zd ZdZddZy)DocExecz(at wrap time exec stmt in doc._nameSpacec                 @    t         j                  |        ||f| _        y r   r  )r   stmtlifetimes      r    r!   zDocExec.__init__	  s    $x-	r"   Nr+  r#   r(   r"   r    r.  r.  	  s
    2 r"   r.  c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	DocParaaH  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                 t    t         j                  |        || _        || _        || _        || _        || _        y r   )r*   r!   r  r  rj   klassescape)r   r  r  rj   r5  r6  s         r    r!   zDocPara.__init__	  s3    $	

r"   c                     | j                   }|r2t        |t              st        |      } | j                  d      |      S y )NdocEval)r  r   rB   r   )r   r  s     r    rl  zDocPara.func	  s=    yyd3'D	34((3D99 r"   c                 @     | j                  d      j                  |  y )Nr   )r   r]  )r   r  s     r    add_contentzDocPara.add_content	  s    <g&<<dCr"   c                     | j                  ||      }| j                  rQ| j                  d      j                         }|j	                  t        ||             ||d<   | j                  |z  }|S t        |      }|S )Nr"  r#  __expr__)r(  r  r   r   r  r&  rB   )r   rT   rU   r  r'  s        r    	get_valuezDocPara.get_value	  ss    b$;;$$\2779BIId"R@A"BzNKK"$E  JEr"   c                     | j                  ||      }| j                  }|sddlm} | j                  }|sddlm}  |       d   }| j                  rddlm}  ||      }| j                   |||             y)Nr   r}  )getSampleStyleSheetCode)r6  )rj   r[  )
r=  r5  r  r~  rj   reportlab.lib.stylesr?  r6  xml.sax.saxutilsr:  )r   rT   rU   r  r  rj   r?  r6  s           r    rS   zDocPara.wrap	  sh    r"%JJC

@%'/E;;/-E5u-.r"   )NNNT)	r$   r%   r&   r'   r!   rl  r:  r=  rS   r(   r"   r    r3  r3  	  s!    :D	r"   r3  c                        e Zd ZddZd Zd Zy)	DocAssertNc                 J    t         j                  |        || _        || _        y r   )r*   r!   r  r  )r   condr  s      r    r!   zDocAssert.__init__	  s    $	r"   c                 R    t         j                  | ||      | _        | j                  S r   )r3  r(  _condr  s      r    r(  zDocAssert.funcWrap	  s"    %%d2b1
zzr"   c                 h    | j                  ||      }t        | j                        st        |      yr  )r=  boolrH  AssertionError)r   rT   rU   r  s       r    rS   zDocAssert.wrap	  s,    r"%DJJ ''r"   r   )r$   r%   r&   r!   r(  rS   r(   r"   r    rD  rD  	  s    
r"   rD  c                   "    e Zd Zg fdZd Zd Zy)DocIfc                 V    t         j                  |        || _        |xs g |f| _        y r   )r*   r!   r  blocks)r   rF  	thenBlock	elseBlocks       r    r!   zDocIf.__init__	  s'    $	o2i/r"   c                 8    t        |t        t        f      s|f}|S r   )r   r~  r  )r   blocks     r    
checkBlockzDocIf.checkBlock	  s    %e-HEr"   c                      | j                   | j                  | j                  t        t	        | j                  ||                             yr  )r:  rT  rO  r   rJ  r(  r  s      r    rS   z
DocIf.wrap	  s=    $//$++c$t}}RPR?S:T6U*VWXr"   N)r$   r%   r&   r!   rT  rS   r(   r"   r    rM  rM  	  s    /1 0

r"   rM  c                       e Zd Zd Zd Zy)DocWhilec                 h    t         j                  |        || _        | j                  |      | _        y r   )r*   r!   r  rT  rS  )r   rF  
whileBlocks      r    r!   zDocWhile.__init__
  s'    $	__Z0
r"   c                     t        | j                  ||            r& | j                  t        | j                        | gz     yr  )rJ  r(  r:  r~  rS  r  s      r    rS   zDocWhile.wrap	
  s8    b$%DtDJJ/68r"   N)r$   r%   r&   r!   rS   r(   r"   r    rW  rW  
  s    1
r"   rW  c                       e Zd ZdZddZd Zy)SetTopFlowablesrv   c                      || _         || _        y r   _F_showr   ro  shows      r    r!   zSetTopFlowables.__init__
      
r"   c                     t        t        | dd       dd       }|rD| j                  |_        | j                  r'| j                  r| j                  |j                  _        yNr7   r   r[  )r`   r_  _topFlowablesr`  r   ri  r   rT   rU   r  s       r    rS   zSetTopFlowables.wrap
  sH    gd6$/tD $Czzdgg/3ww		,r"   Nr@  r$   r%   r&   
_ZEROZSIZEr!   rS   r(   r"   r    r\  r\  
      Jr"   r\  c                       e Zd ZdZddZd Zy)SetPageTopFlowablesrv   c                      || _         || _        y r   r^  ra  s      r    r!   zSetPageTopFlowables.__init__
  rc  r"   c                     t        t        | dd       dd       }|rD| j                  |_        | j                  r'| j                  r| j                  |j                  _        yre  )r`   r_  _pageTopFlowablesr`  r   ri  rg  s       r    rS   zSetPageTopFlowables.wrap"
  sH    gd6$/tD$(GGC!zzdgg/3ww		,r"   Nr@  rh  r(   r"   r    rl  rl  
  rj  r"   rl  r   )rv   NNN)r  N)d__version__r'   r   r   r   reportlab.lib.colorsr   r   reportlab.lib.rl_accelr   reportlab.lib.enumsr   r	   r
   rA  r   r   r   r   reportlab.lib.abagr   reportlab.pdfbaser   reportlab.pdfbase.pdfmetricsr   reportlab.rl_configr   r   r   r   rc   __all__r   r*   r   r   r   r   r   r   r   r   r5  r9  rB  rH  rN  rR  rT  r{  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r#  rN  rU  rW  r{  r  r  r  r  r  rL  rT  rk  rr  reportlab.lib.sequencerr  r&  r  r  r  r  r  r  r  r  r  r  r  r  r.  r3  rD  rM  rW  r\  rl  r(   r"   r    <module>rz     sY   	, 
  0 ) < < . 6 # & 4 h h 
 !&  N N`P8 P*( &4PL8 L\[H [zx PX P
- 
-i
 i	I 		) 	FF F(3$j B?8 BH\ CH C	!( !">$ >$@P PO O* *X/ /
8# 8#td:h dN $j#*X j#Z; ;zvQ
#5h vQp$x $:. ., x  .s( sj	5V 5"&$d &$P,"n ,"\2H 2j 4$  !#$!##3 3jB1^ 1^fg g< +( (T }:h }~ < 4 i  0i 0d  G 	u 	h ( r"   