
    kfx                       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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                                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.          Z0 G d* d+e,          Z1dd-Z2d. Z3 G d/ d0          Z4 G d1 d2e4e"          Z5 G d3 d4e5          Z6 G d5 d6e"          Z7d7 Z8 G d8 d9e"          Z9 G d: d;e"          Z: G d< d=e+          Z; G d> d?e"          Z< G d@ dAe"          Z= G dB dC          Z>dD Z? G dE dFe4          Z@ G dG dHe@e"          ZAdI ZBdJ ZC G dK dLe@e"          ZD G dM dN          ZE G dO dPe@eEe"          ZF G dQ dRe+          ZG G dS dTe+          ZH G dU dVe+          ZI G dW dXeEe+          ZJ G dY dZe,          ZK G d[ d\e          ZL G d] d^eK          ZM G d_ d`e+          ZNddalOmPZP  eQdbdcdddedfdgdhdidjdkl
  
        ZRddnZS G do dp          ZTdq ZU G dr dse"          ZV G dt dueV          ZWddvlmXZX  G dw dx          ZY G dy dz          ZZ G d{ d|e@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 dea          Zb G d de+          Zc G d de+          ZddS )z3.3.0a  
A flowable is a "floating element" in a document whose exact position is determined by the
other elements that precede it, such as a paragraph, a diagram interspersed between paragraphs,
a section header, etcetera.  Examples of non-flowables include page numbering annotations,
headers, footers, fixed diagrams or logos, among others.

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

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

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

The "text" of a document usually consists mainly of a sequence of flowables which
flow into a document from top to bottom (with column and page breaks controlled by
higher level components).
    N)deepcopycopy)gray	lightgrey)fp_str)TA_LEFT	TA_CENTERTA_RIGHT)_baseFontName)strTypesrl_safe_execannotateException)ABag)pdfutilsstringWidth)_FUZZoverlapAttachedSpaceignoreContainerActionslistWrapOnFakeWidtha  AnchorFlowable BalancedColumns BulletDrawer CallerMacro CondPageBreak DDIndenter DocAssert
        DocAssign DocExec DocIf DocPara DocWhile FailOnDraw FailOnWrap Flowable FrameBG FrameSplitter
        HRFlowable Image ImageAndFlowables KeepInFrame KeepTogether LIIndenter ListFlowable ListItem
        Macro NullDraw PTOContainer PageBreak PageBreakIfNotEmpty ParagraphAndImage Preformatted
        SetPageTopFlowables SetTopFlowables SlowPageBreak Spacer TopPadder TraceInfo UseUpSpace XBox
        splitLine splitLinesc                       e Zd ZdZd ZdS )	TraceInfoz0Holder for info about where an object originatedc                 L    d| _         d| _        d| _        d| _        d| _        d S )Nz	(unknown))srcFilestartLineNostartLinePos	endLineNo
endLinePosselfs    \/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/platypus/flowables.py__init__zTraceInfo.__init__0   s+    "    N__name__
__module____qualname____doc__r#    r$   r"   r   r   .   s)        6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dS )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                 v    d| _         d| _        d| _        d| _        d| _        d | _        d | _        d | _        d S )Nr   LEFTBOTTOM)widthheightwrappedhAlignvAlign
_traceInfo_showBoundaryencodingr    s    r"   r#   zFlowable.__init__H   sE    
  !
 r$   c                 @    || _         |                                  | ` dS )z#ensure canv is set on and then drawN)canvdrawr!   r9   s     r"   _drawOnzFlowable._drawOnZ   s    			IIIr$   c                     |rgt          | d          rW| j        }|ddt          fv r	|d|z  z  }n;|dt          fv r||z  }n*|dt          fvrt          dt          |          z             |S )Nr3   CENTERCENTRE      ?RIGHTr.   zBad hAlign value )hasattrr3   r	   r
   r   
ValueErrorstr)r!   xsWas       r"   _hAlignAdjustzFlowable._hAlignAdjust`   s     	='$x(( 	=AXh	222SVwx(((R6'*** !4SVV!;<<<r$   c                 ~   |                      ||          }|                                 |                    ||           |                     |           t	          | d          rC| j        r<|                    t                     |                    dd| j	        | j
                   |                                 dS )z6Tell it to draw itself on the canvas.  Do not overrider6   r   N)rH   	saveState	translater<   rB   r6   setStrokeColorr   rectr0   r1   restoreStater!   canvasrE   y_sWs        r"   drawOnzFlowable.drawOnk   s    q%%AV4)) 	5d.@ 	5!!$'''KK!DJ444r$   c                 N    || _         |                     ||          \  }}| ` ||fS )zWintended for use by packers allows setting the canvas on
        during the actual wrap)r9   wrap)r!   r9   aWaHwhs         r"   wrapOnzFlowable.wrapOnw   s0     	yyB1I!tr$   c                     | 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.r0   r1   r!   
availWidthavailHeights      r"   rU   zFlowable.wrap   s     
DK((r$   c                 .    t          | d| j                  S )z-This should return the minimum required width	_minWidth)getattrr0   r    s    r"   minWidthzFlowable.minWidth   s    tK
333r$   c                 D    || _         |                     ||          }| ` |S )zXintended for use by packers allows setting the canvas on
        during the actual split)r9   split)r!   r9   rV   rW   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"   re   zFlowable.split   s	     	r$   c                     t          | d          r| j        S t          | d          r!t          | j        d          r| j        j        S dS )zOreturns boolean determining whether the next flowable should stay with this onekeepWithNextstyler   )rB   rk   rl   r    s    r"   getKeepWithNextzFlowable.getKeepWithNext   sR    4'' 	0A)AT'"" 	wtz.'I'I 	RVR\RiKiQr$   c                     t          | d          r| j        S t          | d          r!t          | j        d          r| j        j        S dS )zXreturns how much space should follow this item if another item follows on the same page.
spaceAfterrl   r   )rB   ro   rl   r    s    r"   getSpaceAfterzFlowable.getSpaceAfter   sQ    4%% 	do'=T'"" 	wtz,'G'G 	PTPZPeIeQr$   c                     t          | d          r| j        S t          | d          r!t          | j        d          r| j        j        S dS )z[returns how much space should precede this item if another item precedess on the same page.spaceBeforerl   r   )rB   rr   rl   r    s    r"   getSpaceBeforezFlowable.getSpaceBefore   sR    4&& 	t/?(?T'"" 	wtz-'H'H 	QUQ[QgJgQr$   c                     dS )z?Hook for IndexingFlowables - things which have cross referencesr   r*   r    s    r"   
isIndexingzFlowable.isIndexing   s    qr$   Nc                 @   t          | d          r|                     d          }n't          | d          rt          | j                  }nd}|r|r
|d|         }d| j        j        dt          t          |                     |                                 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 >)	rB   rw   rD   rz   	__class__r&   hexid
_frameNamer!   maxLenrs      r"   identityzFlowable.identity   s     4(( 	!!1!--AAT6"" 	DIAAA 	 	'6'
A#'>#:#:#:C4MMM4??K\K\K\K\^_^_``r$   c                 B    t          t          | dd           dd           S )Nr9   _doctemplaterb   r    s    r"   r   zFlowable._doctemplate   s     wtF400EEEr$   c                 .    t          | j        |d           S N)rb   r   r!   rG   s     r"   _doctemplateAttrzFlowable._doctemplateAttr   s    t(4000r$   c                 |    t          | dd           }|s|                     d          }|r|j        r
d|j        z  S dS )N_frameframez	 frame=%s )rb   r   r   r!   fs     r"   r   zFlowable._frameName   sI    D$''4d++G44!00kAD00rr$   r   r   )r&   r'   r(   r)   _fixedWidth_fixedHeightr#   r<   rH   rS   rZ   rU   rc   rg   re   rm   rp   rs   ru   r   propertyr   r   r   r*   r$   r"   r,   r,   =   sK         KL  $  	 	 	 	
 
 
 
  ) ) )4 4 4            a a a a  F F XF1 1 1    r$   r,   c                   &    e Zd ZdZddZd Zd ZdS )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().A Boxc                 d    t                               |            || _        || _        || _        d S r   )r,   r#   r0   r1   rz   )r!   r0   r1   rz   s       r"   r#   zXBox.__init__   s/    $
			r$   c                 8    d| j         d| j        d| j        dS )NzXBox(w=z, h=z, t=))r0   r1   rz   r    s    r"   __repr__zXBox.__repr__   s#     +/:::t{{{DIIINNr$   c                    | j                             dd| j        | j                   | j                             dd| j        | j                   | j                             d| j        | j        d           | j                             t          d           | j                             d| j        z  d| j        z  | j                   d S )Nr      r@   )	r9   rM   r0   r1   linesetFontr   drawCentredStringrz   r    s    r"   r:   z	XBox.draw   s    	q!TZ555	q!TZ555	q$+tz1555 		-+++	##C
NCOTYOOOOOr$   N)r   )r&   r'   r(   r)   r#   r   r:   r*   r$   r"   r   r      sZ        E E   O O OP P P P Pr$   r   c                    t          |           rU| d                                         dk    r7| dd          } t          |           r| d                                         dk    7t          |           rU| d                                         dk    r7| d d         } t          |           r| d                                         dk    7| S )Nr   r   rx   r   )lenstrip)liness    r"   _trimEmptyLinesr      s    
e** q))R//abb	 e** q))R//
e** r**b00crc
 e** r**b00Lr$   c                     |                      d          }|dk    rHt          |          }g }|D ]3}||d                                         }|                    |           4n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)re   r   rstripappend)rz   dedentr   	templinesr   s        r"   	_dedenterr      s     JJtEaxx#E**	 	 	D=''))DLL	  &&Lr$   z[{( ,.;:/\-c                     |t           }|d}g }| D ]>}t          |          |k    rt          |||||           )|                    |           ?|S )Nr   )SPLIT_CHARSr   	splitLiner   )r   maximum_lengthsplit_charactersnew_line_characterslines_splittedr   s         r"   
splitLinesr      s    &" N ( (t99~%%dNN13 3 3 3 !!$''''r$   c                    d}| rt          |           dk    rd}t          |           |k    rt          |           }n!t          |          D ]}| |         |v r|dz   }|dk    r|dz   }|r2|                    | d|                    d}|t          |          z  }n |                    || d|         z              | |d          } | rt          |           dk    d S d S d S d S )NTr   rx   F)r   ranger   )line_to_splitr   r   r   r   
first_linesplit_index
line_indexs           r"   r   r     sQ    J  4C..q00  }//m,,KK $N33 1 1
 !,0@@@",q.K >>$q.K 	*!!-+">???Jc"5666NN!!"5!K-(#) * * * &kll3?  4C..q0000 4 400 4 4r$   c                   8    e Zd ZdZddZd Zd Zd Zd	 Zd
 Z	dS )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. '> ').
    Nr   r   c                     || _         || _        t          ||          | _        |r |r t	          | j        |||          | _        dS dS dS )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)rl   
bulletTextr   r   r   )r!   rz   rl   r   r   maxLineLength
splitCharsnewLineCharss           r"   r#   zPreformatted.__init__>  si    
 
$tF++
 	M 	# $
 - * ,	 DJJJ	 	 	 	r$   c                 |    | j         }d}|dt          |          z  }|dd                    | j                  dS )NzPreformatted(zPreformatted(bulletText=%s,z'''\ 
r   z'''))r   reprjoinr   )r!   bTHs      r"   r   zPreformatted.__repr__N  sF    _>-R8A%&QQ		$*(=(=(=(=>>r$   c                 x    || _         | j        j        t          | j                  z  | _        | j         | j        fS r   )r0   rl   leadingr   r   r1   r]   s      r"   rU   zPreformatted.wrapU  s1    
j(TZ8
DK((r$   c                 r    | j         }|j        |j        t          fd| j        D                       S )Nc                 2    g | ]}t          |          S r*   r   ).0r   fontNamefontSizes     r"   
<listcomp>z)Preformatted.minWidth.<locals>.<listcomp>^  s%    OOODKXh77OOOr$   )rl   r   r   maxr   )r!   rl   r   r   s     @@r"   rc   zPreformatted.minWidthZ  sA    
>>OOOOODJOOOPPPr$   c                    || j         j        k     rg S t          |dz  | j         j        z            }d                    | j        d|                   }d                    | j        |d                    }| j         }|j        dk    rt          |          }d|_        t          || j                   t          ||          gS )N      ?r   r   )rl   r   intr   r   firstLineIndentr   r   )r!   r^   r_   linesThatFittext1text2rl   s          r"   re   zPreformatted.split`  s     +++I;,tz/AABB		$*Q|^455		$*\]]344
 A%%UOOE$%E!UDJ//eU1K1KLLr$   c                    | j         j        }| j        | j         j        z
  }| j                            d           | j         j        r$| j                            | j         j                   | j                            ||          }|	                    | j         j
        | j         j        | j         j                   | j        D ]}|                    |           | j                            |           d S )Nz%PreformattedPara)rl   
leftIndentr1   r   r9   
addLiteral	textColorsetFillColor	beginTextr   r   r   r   textLinedrawText)r!   cur_xcur_ytxrz   s        r"   r:   zPreformatted.drawq  s    
 
%dj11	0111: 	9I""4:#7888Y  ..


DJ'J'J&	( 	( 	( J 	 	DKK	2r$   )Nr   NNr   )
r&   r'   r(   r)   r#   r   rU   rc   re   r:   r*   r$   r"   r   r   7  s             ? ? ?) ) )
Q Q QM M 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dS )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.
    rx   Ndirectautor>   Fc	                    || _         || _        t          |d          }	d| _        |	r|| _        t          |          | _        nJt          |d          r,|| _        t          |          | _        d| _        d| _        d}	n|x| _        | _        || _        |	st          j
                            |          d         dv rddlm}
  |
|d	          }	 	 t          j        |          }n4#  |                     ||||           Y |                                 dS xY w	 |                                 n# |                                 w xY w|d         | _        |d         | _        |r|d
         | _        d| _        |                     |||d           dS |	r|                     |||d           dS |                     ||||           dS )z8If size to draw at not specified, get it from the image.readN	_renderPyTrx   )z.jpgz.JPGz.jpegz.JPEGr   )open_for_readb   )r3   _maskrB   _drawing_filer   filename_img_dpiospathsplitextreportlab.lib.utilsr   r   readJPEGInfo_setupclose
imageWidthimageHeight)r!   r   r0   r1   kindmasklazyr3   useDPIfpr   r   infos                r"   r#   zImage.__init__  s    
Xf%% 
	2!DJ NNDMMXk** 	2$DMx..DMDJDIBB)11DJ	 	0bg&&x0037YYY :99999h,,A#033DDKKfT$777					  								"1gDO#AwD $ G	DIKKfT!,,,,, 	0KKfT!,,,,,KKfT$/////s$   C' &D1 'DD1 D1 1Ec                     | j         }|rL|d         dk    r| xj        d|d         z  z  c_        |d         dk    r| xj        d|d         z  z  c_        d S d S d S )Nr   H   g      R@rx   )r   r   r   )r!   dpis     r"   
_dpiAdjustzImage._dpiAdjust  sr    i 	=1vrzz4??dSVm;??1vrzz4++tc!f}<++++	= 	=zr$   c                 v    || _         || _        || _        || _        |dk    r|                                  d S d S Nr   )_lazy_width_height_kind_setup_inner)r!   r0   r1   r   r   s        r"   r   zImage._setup  sB    

77D%%'''''77r$   c                    | j         }| j        }| j        }| j        }|r^|                                \  | _        | _        | j        r5t          |d          r%|j	        j
                            dd          | _        n1| j        r*| j        j        | j        j        c| _        | _        d| _        |                                  | j        dk    r| `|dv r|p| j        | _        |p| j        | _        d S |dv r&| j        |z  dz  | _        | j        |z  dz  | _        d S |d	v rZt'          t)          |          | j        z  t)          |          | j        z            }| j        |z  | _        | j        |z  | _        d S d S )
N_imager  )r  r  F   )r   absolute)
percentage%{Gz?)boundproportional)r
  r  r  r   getSizer   r   r   rB   r  r  getr   r0   r1   r  r	  	drawWidth
drawHeightminfloat)r!   r0   r1   r   imgfactors         r"   r  zImage._setup_inner  s   zi 	03-DOT-y ?WS22 ?JO//g>>	] 	040CDMDX-DOT-DI:q==di((("5doDN$8(8DOOO'''!_U247DN".v5d:DOOO---udo5eFmmDDT6TUUF!_V3DN".v5DOOO .-r$   c                 D   | j         |t          z   k    s| j        |t          z   k    rm| 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!   rV   rW   r  s       r"   _restrictSizezImage._restrictSize  s    >"U(""dobh&>&> $ ?Dr4>1%))DO2KLLFNNf$NNOOv%OO~t..r$   c                 N    t          | dd           }|r|\  | _        | _        d S d S )Nr   )rb   r  r  )r!   dwhs     r"   _unRestrictSizezImage._unRestrictSize  s7    d>$// 	2.1+DNDOOO	2 	2r$   c                 D   |dk    rUddl m}  || j                  | _        t	          | j        t
                    sd | _        | j        dk    rd| _        | j        S |dv r!|                                  | j        |         S t          dt          |           |fz            )Nr   r   )ImageReaderr  rx   )r  r  r   r   z<Image @ 0x%x>.%s)r   r&  r   r   
isinstancer   r	  r  __dict__AttributeErrorr   )r!   rG   r&  s      r"   __getattr__zImage.__getattr__  s    f99777777#DJ//DIdj22 1!
:q==q$*9GGG=##0BtHHQ<?@@@r$   c                     | j         | j        fS r   )r  r  r]   s      r"   rU   z
Image.wrap  s    ~t..r$   c                 B   t          | dd          }t          | dd          }| j        }|r| j        t          | j                  z  }| j        t          | j                  z  }|j        }	 |                    ||           |	                    | j
        ||           ||_        d S # ||_        w xY w| j        }|dk    rd| _        | j
                            | j        p| j        ||| j        | j        | j                   |dk    rd x| _        | _        || _        d S d S )N_offs_xr   _offs_yr  rx   )r   )rb   r   r  r  r   r  r   	transformscalerS   r9   r	  	drawImager   r   r   r   )r!   dxdydsxsyotransr   s           r"   r:   z
Image.draw  s3   T)A&&T)A&&M 	"%"8"88B5)9#:#::B[F%22b)))$f$$$$:DQwwQ
IDI$>$&$&$(N$(O)-   & & & Qww)--	DJ!


 ws   ,2B' '	B0c                     t                               | |          }|dd          dk    r/t          | j        t                    r|d d         d| j        d}|S )Nz>...z
 filename=r}   )r,   r   r'  r   rD   r   s      r"   r   zImage.identity  sY    d6**RSS66>>js;;>%&ssVVVDMMM:Ar$   )NNr   r   rx   r>   Fr   )r&   r'   r(   r)   r   r   r#   r  r   r  r!  r$  r*  rU   r:   r   r*   r$   r"   r   r     s          KL?G>C*0 *0 *0 *0X= = =( ( (6 6 62/ / /2 2 2
A A A/ / /" " "6     r$   r   c                       e Zd Zd ZdS )NullDrawc                     d S r   r*   r    s    r"   r:   zNullDraw.draw#      r$   N)r&   r'   r(   r:   r*   r$   r"   r;  r;  "  s#            r$   r;  c                   (    e Zd ZdZdZdZddZd ZdS )SpacerzdA spacer just takes up space and doesn't draw anything - it guarantees
       a gap between objects.rx   Fc                 B    || _         |rd| _        || _        || _        d S )Ng-C6?)r0   r1   spacebefore)r!   r0   r1   isGlues       r"   r#   zSpacer.__init__+  s+    
 	&DK%Dr$   c                 @    | j         j        d| j        d| j        dS )N(, r   )r~   r&   r0   r1   r    s    r"   r   zSpacer.__repr__2  s&    #~666tzzz4;;;OOr$   NF)r&   r'   r(   r)   r   r   r#   r   r*   r$   r"   r?  r?  &  sP        ! !KL   P P P P Pr$   r?  c                        e Zd Zd Zd Zd ZdS )
UseUpSpacec                     d S r   r*   r    s    r"   r#   zUseUpSpace.__init__6  r=  r$   c                      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>r\   r]   s      r"   rU   zUseUpSpace.wrap<  s     
!;t+,,r$   N)r&   r'   r(   r#   r   rU   r*   r$   r"   rH  rH  5  sA          0 0 0- - - - -r$   rH  c                   "    e Zd ZdZ	 ddZd ZdS )	PageBreakrx   Nc                     || _         d S r   )nextTemplate)r!   rQ  s     r"   r#   zPageBreak.__init__E  s    (r$   c                 \    | j         j        d| j        rt          | j                  nddS )NrD  r   r   )r~   r&   rQ  r   r    s    r"   r   zPageBreak.__repr__H  s7    >222dN_3g48I3J3J3Jeg3g3ghhr$   r   )r&   r'   r(   
locChangerr#   r   r*   r$   r"   rO  rO  A  sG        JD) ) ) )i i i i ir$   rO  c                       e Zd ZdS )SlowPageBreakNr&   r'   r(   r*   r$   r"   rU  rU  K          Dr$   rU  c                       e Zd ZdS )PageBreakIfNotEmptyNrV  r*   r$   r"   rY  rY  N  rW  r$   rY  c                   .    e Zd ZdZ	 d Zd Zd ZddZdS )CondPageBreakrx   c                     || _         d S r   r1   )r!   r1   s     r"   r#   zCondPageBreak.__init__T  s    r$   c                     d| j         dS )NzCondPageBreak(r   r]  r    s    r"   r   zCondPageBreak.__repr__W  s     %)[[[22r$   c                     || j         k     r6|                     d          }|s||fS ddlm} |                    |           dS )Nr   r   
FrameBreakr   r   )r1   r   reportlab.platypus.doctemplatera  add_generated_content)r!   r^   r_   r   ra  s        r"   rU   zCondPageBreak.wrapZ  s]    t{""%%g..A4Z44AAAAAA##J///tr$   Nc                 r    t          |                               dd|                                 z            S )Nr   z
,frame=%s))r   replacer   r!   r   s     r"   r   zCondPageBreak.identityb  s-    Dzz!!#l4??3D3D&DEEEr$   r   )r&   r'   r(   rS  r#   r   rU   r   r*   r$   r"   r[  r[  Q  sc        JP  3 3 3  F F F F F Fr$   r[  rx   c                    t          |dd          }t          |dd          }|t          }|r)ddlm}	m}
 |}t          |          x}|_        d|_        |`	 d}d}d}d}| dd         } | r_|                     d          }t          |d          r)ddlm}
 t          ||
          r||j        |j        z   z  }Q|                    ||d	          \  }}||                    ||f           |r |	| |           |t          k    r |t          k    rt!          ||rt#          ||          n|          }||z  }|sB|                                }|r&t          |dd
          r|}t!          ||z
  d          }||z  }n||                                |_        d}|                                }t          |dd
          r|}|}||z  }| _|||_        |||z
  f|r||_        S S # |r||_        w xY w);return max width, required height for a list of flowables Fr   Nr   r   )_addGeneratedContentIndenterrx   frameActionrk  F_SPACETRANSFER)rb   r   rc  rj  rk  r   r   _generated_contentpoprB   r'  leftrightrZ   r   r   r   r  rs   _spaceBeforerp   _spaceAfter)Fr^   r9   
mergeSpaceobjdims	fakeWidthdoctcframerj  rk  
doct_frameWr   pSatTopr   rX   rY   ss                       r"   _listWrapOnr  e  s   4t,,DT'$''F'	 &QQQQQQQQ
&z222$(!%'$aaaD 	aAq'' CCCCCCa)) 1!&.0J((4
955CAaaU!3!3!3 /$$Qv...5q%xxA9;c!J'''!<<AFA 	$$&& $q!1%88 AbDAQ?q7G7G7I7IC$4!!Aq)%00 BGA9  	: ?bCO!B$w 	$#DJJ	$6 	$#DJ####s   FG& &G1c                     t          | t          t          f          s	| dur| gpg } ddlm fd| D             r
J d            | S )z.if it isn't a list or tuple, wrap it in a listNr   )LCActionFlowablec                 4    g | ]}t          |          |S r*   )r'  )r   rE   r  s     r"   r   z$_flowableSublist.<locals>.<listcomp>  s)    ???a
1-= > >????r$   z)LCActionFlowables not allowed in sublists)r'  listtuplerc  r  )Vr  s    @r"   _flowableSublistr    sk    ae%%F1D=+@aS+FBq??????????1???kk@kkkkHr$   c                       e Zd ZddZddZdS )_ContainerSpaceNc                 n    || j         n|D ](}t          |d          s|                                c S )dS Nrl  r   )_contentrB   rs   r!   contentcs      r"   rs   z_ContainerSpace.getSpaceBefore  sO    #*?$-- 	* 	*A1]++ *'')))))*qr$   c                     t          || j        n|          D ](}t          |d          s|                                c S )dS r  )reversedr  rB   rp   r  s      r"   rp   z_ContainerSpace.getSpaceAfter  sU    7?$--HH 	) 	)A1]++ )((((()qr$   r   )r&   r'   r(   rs   rp   r*   r$   r"   r  r    s<                r$   r  c                   4    e Zd ZdZddZd Zd Zd ZddZdS )	KeepTogetherFNc                     t          t          d          s$ddlm} ddlm} |t          _        |t          _        |s|                                 g}t          |          | _        || _        d S )NNullActionFlowabler   )r  r`  )rB   r  rc  r  ra  r  r  
_maxHeight)r!   	flowables	maxHeightr  ra  s        r"   r#   zKeepTogether.__init__  s    |$899 	1IIIIIIAAAAAA.@L+&0L# 	400223I(33#r$   c                     | j         }t          t          t          |                    }dd                    |          z   }|                    dd          }| j        j        d|d| j        dS )Nr   z
  rD  z,maxHeight=r   )	r  r  mapr   r   rf  r~   r&   r  )r!   r   Ls      r"   r   zKeepTogether.__repr__  sg    MT!1IIdF##(,(?(?(?$///RRr$   c           	         g }	 t          | j        || j        |          \  }}n=#  t          d| j        j        | j        j        t          |           fz             Y nxY w|| _        |r|d         d         pd| _	        ||f| _
        |dfS )N)ry  z%
raised by class %s(%s)@0x%8.8x wrap
r   rx   i )r  r  r9   r   r~   r&   r'   r   _H_H0	_wrapInfo)r!   rV   rW   ry  r~  r   s         r"   rU   zKeepTogether.wrap  s    	HdmBtydCCCCAaa	HG4>Kbcgcqc|}  AE  ~F  ~F  KG  G  H  H  H  H  H&DGAJ+!B({s	    % 8Ac                 x   t          | dd           ||fk    r|                     ||           | j        d d          }t          | dd           x}}|rt          |dd           }|j        }|j        }| j        |k    o| j         p
|| j        k    }| j        |k    p|o|}	|s|	rd}
|                     d          }|r|r |            }|j        }|j        }|r| j	        r|s|o|o|o||k    o||k     }
n|r||j        k    r|| j        k    rd}
|
                    d |
r| j        n| j                               |S )Nr  r   _atTopF_peekNextFrameTr   )rb   rU   r  r
  r  r  r  r  r   
splitAtTopinsertra  r  )r!   rV   rW   rf   cfr  cAWcAHC0C1fbpanfnfnAWnAHs                  r"   re   zKeepTogether.split  s   4D))Br722DIIb4D4D4DM!!!T(4000U 	Bx--E)C*CWRZG0FBt4Fhrk*blU 	O 	OB(()9::D !d !TVVij 4? u GBG2G#s(GsCxH RY3<<HHQJ2J43JMMNNNr$   c           
          d| j         j        dt          t          |                     |                                 dd                    d | j        D                       }|r
|d|         S |S )Nr{   r|   z> containing :r   c                 6    g | ]}|                                 S r*   )r   r   r   s     r"   r   z)KeepTogether.identity.<locals>.<listcomp>  sB      rW  rW  rW  DErsr|r|r~r~  rW  rW  rWr$   r   )r~   r&   r   r   r   r   r  )r!   r   msgs      r"   r   zKeepTogether.identity  s     /3~/F/F/Fs2d88}}}UYUdUdUfUfUfUfgkgpgp  rW  rW  IM  IV  rW  rW  rW  hX  hX  hX  Y 	qx= Jr$   r   )	r&   r'   r(   r  r#   r   rU   re   r   r*   r$   r"   r  r    sq        J$ $ $ $S S S	 	 	  2     r$   r  c                       e Zd ZdZdZdS )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          JJJr$   r  c                   *    e Zd ZdZd Zd Zd Zd ZdS )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                     || _         d S r   )command)r!   r  s     r"   r#   zMacro.__init__  s    r$   c                 0    dt          | j                  z  S )Nz	Macro(%s))r   r  r    s    r"   r   zMacro.__repr__  s    T$,////r$   c                     dS Nrb  r*   r]   s      r"   rU   z
Macro.wrap  s    ur$   c                 B    t          | j        d d| j        i           d S )NrP   )gl)r   r  r9   r    s    r"   r:   z
Macro.draw  s&    T\Thty-ABBBBBBr$   Nr&   r'   r(   r)   r#   r   rU   r:   r*   r$   r"   r  r    s_        8 8  0 0 0  C C C C Cr$   r  c                      d S r   r*   )argskwdss     r"   _nullCallabler    s    Dr$   c                   ,    e Zd ZdZddZd Zd Zd ZdS )CallerMacrozf
    like Macro, but with callable command(s)
    drawCallable(self)
    wrapCallable(self,aW,aH)
    Nc                 >    |pt           | _        |pt           | _        d S 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'9$:L:L:LMMr$   c                 4    |                      | ||           dS r  )r  r!   rV   rW   s      r"   rU   zCallerMacro.wrap  s    42&&&ur$   c                 0    |                      |            d S r   )r  r    s    r"   r:   zCallerMacro.draw  s    4     r$   NNr  r*   r$   r"   r  r    sb         
; ; ; ;N N N  ! ! ! ! !r$   r  c                   8    e Zd ZdZddZd Zd Zd Zd Zd	 Z	d
S )ParagraphAndImagez combine a Paragraph and an Imager   rs  c                 L    || _         || _        || _        || _        || _        d S r   )PIxpadypad_side)r!   r  r  r  r  sides         r"   r#   zParagraphAndImage.__init__  s)    		


r$   c                 ~    t          | j                                        | j                                                  S r   )r   r  rs   r  r    s    r"   rs   z ParagraphAndImage.getSpaceBefore!  s.    46((**46+@+@+B+BCCCr$   c                 ~    t          | j                                        | j                                                  S r   )r   r  rp   r  r    s    r"   rp   zParagraphAndImage.getSpaceAfter$  s.    46''))$&*>*>*@*@AAAr$   c                 V   | j                             ||          \  }}|| _        || _        || _        | j        }|j        }| j        }| j        }|j	        }	|j
        }
||
z
  |j        z
  }||z
  |z
  }||j        z
  }d|_        t          ||z   |	dz  z            }|                    |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   rr  rx   )r  rU   wIhIr0   r  rl   r  r  r   r   rightIndentr   r   
breakLinesblParar  _offsetsr   r   r1   r   )r!   r^   r_   r  r  r  rl   r  r  r   r   later_widthsintermediate_widthsfirst_line_widthnIWs                  r"   rU   zParagraphAndImage.wrap'  s=   Z44B
Fyy-%
!J.1BB*T1B6.1FF2d7WS[)**<<!1 2S:M9N5N NP\~ ]^^:vWIqu-qc1DMqx~&&w."QX&&
DK((r$   c                    | j         | j        | j        | j        f\  }}}}||z   |k    st	          |j                  dk    rg S |                    ||          }|s|S |d         x}| _         |d= |j        }t	          | j         j        j	                  |j
        z  |_        t          ||j                  | _        | g|z   S r  )r  r  r  r  r   fragsre   rl   r  r   r   r1   r   )	r!   r^   r_   r  r  r  r  rf   rl   s	            r"   re   zParagraphAndImage.split?  s    &$'47DI=2r4d7;#ag,,//"9GGJ{++(qTDFaDtv}*++EM9"QX&&vaxr$   c                    | j         }| j        dk    rt| j                            |d| j        | j        z
  | j        z
             | j        | j        _        	 | j                            |dd           | j        `d S # | j        `w xY w| j                            || j	        | j
        z
  | j        z
  | j        | j        z
  | j        z
             | j                            |dd           d S )Nrr  r   )r9   r  r  rS   r1   r  r  r  r  r0   r  r  r;   s     r"   r:   zParagraphAndImage.drawK  s    y:vFMM$qTW!4TY!>???"mDFO$d1Q'''FOOODFO####FMM$tz$'1$);DK<OPTPY<YZZZFMM$q#####s   A; ;	BN)r   r   rs  )
r&   r'   r(   r)   r#   rs   rp   rU   re   r:   r*   r$   r"   r  r    s        **   D D DB B B) ) )0
 
 
$ $ $ $ $r$   r  c                       e Zd Zd ZdS )
FailOnWrapc                      t          d          )Nz3FailOnWrap flowable wrapped and failing as ordered!rC   r]   s      r"   rU   zFailOnWrap.wrapY  s    NOOOr$   N)r&   r'   r(   rU   r*   r$   r"   r  r  X  s(        P P P P Pr$   r  c                       e Zd Zd Zd ZdS )
FailOnDrawc                     dS r  r*   r]   s      r"   rU   zFailOnDraw.wrap]      sr$   c                      t          d          )Nz2FailOnDraw flowable drawn, and failing as ordered!r  r    s    r"   r:   zFailOnDraw.draw`  s    MNNNr$   N)r&   r'   r(   rU   r:   r*   r$   r"   r  r  \  s7          O O O O 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dS )
HRFlowablezLike the hr tagz80%rx   roundr>   r/   Nc
                     t                               |            || _        || _        || _        || _        || _        || _        || _        || _	        |	| _
        d S r   )r,   r#   r0   	lineWidthlineCaprr   ro   colorr3   r4   dash)
r!   r0   	thicknessr  r  rr   ro   r3   r4   r  s
             r"   r#   zHRFlowable.__init__e  s\     	$
"&$
			r$   c                 (    d| j         d| j        dS )NzHRFlowable(width=z	, height=r   r\   r    s    r"   r   zHRFlowable.__repr__x  s     48JJJLLr$   c                 &   | j         }t          |t                    rV|                                }|                    d          r|t          |d d                   z  dz  }nt          |          }t          ||          }|| _        || j        fS )Nr  r   r  )	r0   r'  r   r   endswithr  r  r
  r  )r!   r^   r_   rX   s       r"   rU   zHRFlowable.wrap{  s    Ja!! 			Azz# JuQssV}}$<T$AAhh!*$.  r$   c                    | j         }|                                 |                    | j                   |                    dddd| j                                                            |                    | j                   | j	        r|
                    | j	                   |                    dd| j        | j                   |                                 d S )Nr   rx   r  )buttr  square)r9   rJ   setLineWidthr  
setLineCapr  lowerrL   r  r  setDashr   r
  r1   rN   r;   s     r"   r:   zHRFlowable.draw  s    y$.)))!q99$,:L:L:N:NOPPPDJ'''9-dll49---		!QT[111r$   )	r&   r'   r(   r)   r   r#   r   rU   r:   r*   r$   r"   r  r  c  sw        aH   &M M M! ! !    r$   r  c                       e Zd Zd ZdS )_PTOInfoc                 V    t          |          | _        t          |          | _        d S r   )r  trailerheader)r!   r  r  s      r"   r#   z_PTOInfo.__init__  s$    '00&v..r$   Nr&   r'   r(   r#   r*   r$   r"   r	  r	    s#        / / / / /r$   r	  c                 h    t          | d          r|                                 S t          |           S )Nr   )rB   r   )rx  s    r"   	cdeepcopyr    s.    s: ||~~}}r$   c                       e Zd ZddZddZdS )
_Containerr   r   Nc           	         ddl m}m}	 |}
|}d}|| j        }||z  }|| j        }|                     |||z            }|| j        |z  z  }|}t          | dd          }|D ]}t          s+t          ||          r|
                    |j                   5t          ||	          r#||j        |z  z  }||j        |j        z   |z  z  }h|                    ||d          \  }}|t          k     rt          |dd          s||k    r;|                                }t          |dd          s|t#          ||z
  d          z  }||z  }|                                }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
            }|                    ||||||           ||_        |                    |||||z
             ||d
         urt          |dd          s||z  }|`dS )z"we simulate being added to a framer   )ActionFlowablerk  Nr   rn  	_ZEROSIZEro  F	_frameBGsr   )rR   )rc  r  rk  r0   r  rH   r1   rb   r   r'  applyr   rr  rs  rZ   r   rs   r   rp   activestartr
  _leftPaddingrenderr   rS   )r!   r9   rE   rQ   rR   r0  r  rV   r  rk  x0y0r  ytr   r  rX   rY   r  fbgbgfbglfbgrbgmfbwfbxfbhfbys                               r"   rS   z_Container.drawOn  s   KKKKKKKK:DJr
e?mGqU++	T[Xd++ #	 #	A) j>.J.J )***!H%% QVE\!qvag~u,,88DI..DAqwwwqT::wH1uu$$&&q!1%88 %QrT!$AFA!!Aq)%00 B%D11C 
6s2w~ 
6WwxhU\$.t34U%7 788!ebj"QrTll!CGnn		$uSS555AHHHT!A"Q$H'''##GA6Ft,L,L#RG#	 #	r$   c                 t    g j         }|p| j        D ]} |t          |                     |j        | _        d S r   )r   r  r  __self__)r!   r  Cr  s       r"   copyContentz_Container.copyContent  sA    I*T] 	 	AAillOOOO
r$   )r   r   NNr   )r&   r'   r(   rS   r*  r*   r$   r"   r  r    s=        1 1 1 1f# # # # # #r$   r  c                   &    e Zd ZdZddZd Zd ZdS )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 ]^}t          |t                    r|                    |j                   2|                    |           t          |d          s||_        _d S )N_ptoinfo)	r	  r  r  r'  r,  extendr   rB   r.  )r!   r  r  r  r  r)  _s          r"   r#   zPTOContainer.__init__  s    WV$$!'** 	= 	=A!L)) =$$$$q,,<1aj	= 	=r$   c                 n    t          | j        || j                  \  | _        | _        | j        | j        fS r   )r  r  r9   r0   r1   r]   s      r"   rU   zPTOContainer.wrap  s/    "-dmJty"Q"Q
DKz$+%%r$   c                    ddl m} |dk     rg S | j        }| j        }dx}x}x}x}	}
t	          |          }i }dx}}t          |          D ]\}||         }|j        }||                                vr]|j        }|j	        }t          ||| j                  \  }}t	          |          r|d                                         }nd}||||f||<   n||         \  }}}}|                    ||d          \  }}t          ||          r-|j        |j        z   }||j        z  }||j        z  }||z  }d}	d}
n@|r*t!          |                                |	z
  d          }
||
z  }|                                }	|||	z   z  }|t!          ||	          z   }||z   |t$          z
  k    r n|dz  }^|||	z   z  }||z
  |z
  |
z
  dz  }|d|z  k    r|                    |||          }ng }t)          |          t)          |          z   dk    r || |           g} |||          g}ng x}}|s|}|dk    rR||dz
                                           r5|dz  }d||         _        |dk    r||dz
                                           5|dk    r)|d                                         r|}d|d         _        t/                      g}t	          |          dk    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          |!d |j        D             d	 |j	        D                       gz   }|S )
Nr   rm  rn  rx   gwJ?皙?rM  c                 ,    g | ]}t          |          S r*   r   r   rE   s     r"   r   z&PTOContainer.split.<locals>.<listcomp>7  s    #?#?#?DGG#?#?#?r$   c                 ,    g | ]}t          |          S r*   r5  r6  s     r"   r   z&PTOContainer.split.<locals>.<listcomp>7  s    @[@[@[Qa@[@[@[r$   )rc  rk  r9   r  r   r   r.  keysr  r  r  rs   rZ   r'  rr  rs  r   rp   r   rg   absrm   rk   rH  r,  )"r!   r^   r_   rk  r9   r)  rE   ir   r  hxnI2WdLeftdRightr  r  THdrtWtHtSBr0  rY   dwtHSrW   SSR1IR2Ijrv  R1R2s"                                     r"   re   zPTOContainer.split  s   ;;;;;;q==)yMABFFq 	 	A!A
A

""Ih$Q
DI>>Bq66 A$--//CCC2bA!!f"R88DI66DAq!H%% 'VAG^!'!b 
 Q--//2155BGA__&&2IASR[[.Cuk%'''FAA 	
ad !mC"G+tK4
2..BBBu::c&kk!$&&8UFF7++,C8E&))*CCNC# 		&AA##!AaC&0022#Q$%!! A##!AaC&0022# !tt!,,..t$%!!\\Nr771992A2r"1"vc!!#A%BSABB!A#$$'BB 	I2A2s1QBS122B<#?#?QY#?#?#?@[@[RSRZ@[@[@[\\]]r$   r  )r&   r'   r(   r)   r#   rU   re   r*   r$   r"   r,  r,    sW        I I= = = =& & &O O O O 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b22rG   r   s                  r"   _hmodelr[  ;  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dS  ||          }|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   )r9  r   mathr]  r   )
rY   abrG   r   tr]  r   r   rO  s2s
             r"   _qsolverb  K  s    
CAa
1vvu}}s
AaA	
1A	!AAss44QA!tt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dS )KeepInFramerx   shrinkr   r.   r/   Nc
                 2   || _         || _        || _        || _        |dv s!J |                                 d|            |dk    s!J |                                 d|            |t
          }|| _        |pg | _        || _        || _	        |	| _
        dS )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overflowre  truncatez invalid mode value r   z invalid maxHeight value N)namemaxWidthr  moder   r   
mergespacer  r4   r3   rz  )
r!   rk  r  r  rw  rl  rj  r3   r4   rz  s
             r"   r#   zKeepInFrame.__init__^  s     	 "	????_c_l_l_n_n_n_nososAt???!|||QZQZ[|||,@z$2"r$   c                 0    | j         | j        z
  | j        z
  S r   )rk  _leftExtraIndent_rightExtraIndentr    s    r"   _getAvailableWidthzKeepInFrame._getAvailableWidths  s    }t44t7MMMr$   c                    d| j         j        dt          t          |                     |                                 t          | dd          rdt          | dd          z  pddt          | dd          r!dt          t          | dd	                    z  pdd
t          | dd          r dt          t          | d                    z  pd
S )Nr{   r|   rj  r   
 name="%s"z> size=rk  z maxWidth=%sr   rE   r  z maxHeight=%s)r~   r&   r   r   r   rb   r   rg  s     r"   r   zKeepInFrame.identityv  s     .2n.E.E.Es2d88}}}VZVeVeVgVgVgVB''S\74r;R;R-RYWYYYZ++cwtT^_`GaGa@b@b1bigiii[,,e6'RVWbJcJcCdCd1djhjjl 	lr$   c           
      <    ddl m}  j        }t          t	           j        p||                    t          t	           j        p||                    } j        t           j	         j
                  \  }}|dk    rE|t          z   k    s||t          z   k    r)d|d|d                     d          } ||          |t          z   k    r.||t          z   k    r |t          z
   _        |t          z
   _        n|d	v r<t	          |          t          z
   _        t	          ||          t          z
   _        nI fd
}	|}
|}d}|t          z   k    rP|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    r~|}dD ]y}t!          |d|z
  z  t#          ||||                    } |	|          \  }}||t          z   k    r5|t          z   k    r'|t          z
   _        |t          z
   _        | _         nz j         j        fS )Nr   )LayoutErrorrz  rg  zcontent rE   z too large for    )rh  ri  c                     t          |           } t          j        | z  j                  \  }}|| z  }|| z  }||fS )Nrv  )r  r  r  r9   )rE   r~  r   rz  rk  r!   s      r"   funczKeepInFrame.wrap.<locals>.func  sL    !HH"4=8DIQZ[[[1QQ!tr$   rx   gffffff?
   )r   r  r3  皙?g333333?)rc  ru  rl  r  r  rk  r  rz  r  r  r9   r   r   r0   r1   _scalerb  r[  )r!   r^   r_   ru  rl  r  r~  r   identry  W0H0rN  rO  H1r   r  rz  rk  s   `                @@r"   rU   zKeepInFrame.wrap|  s   >>>>>>yT]8jDDEE#dn;KHHII	N	4=$)yQQQ1'MMq%//1Yu_3D3D89!!!DMM"<M<M<MNE+e$$$1io#5#55DJE'DKK,,,Xa.DJi**50DKK       BBB%xZtBxx1io%%!"5DJ"#E'DK"$DKQ3J9B488DAq5DJE'DKDKT)^IbL1111Q	%5G5G 2  A	1Q32b0D0DEEA477DAq)E/))a%.?.?%&uW
&'g&'z4;&&r$   r   c                    t          | dd          }| j        dk    }|dk    p|}|r|                                 |rN|                                }|                    ||| j        | j                   |                    |d           n6|                    ||           dx}}|	                    d|z  d|z             t                              | |||||           |r|                                 d S d S )Nr|  r   ri  r   )stroke)rR   r0  )rb   rl  rJ   	beginPathrM   r0   r1   clipPathrK   r0  r  rS   rN   )	r!   r9   rE   rQ   rR   r0  ri  ssps	            r"   rS   zKeepInFrame.drawOn  s   Xc**9j(CZ#8 		1NN 1NN$$q!TZ444aq))))q###!

3u9c%i000$a5AAA"t  """""""r$   r   r   )r&   r'   r(   r#   rq  r   rU   rS   r*   r$   r"   rd  rd  ]  s        4618Z\djrz  GK # # # #*N N Nl l l l:' :' :'x# # # # # #r$   rd  c                       e Zd ZddZddZdS )_FindSplitterMixinrx   NTc                    d}d}	dx}
}d}|                      |          }t          |          D ]\  }}t          |d          r)ddlm} t          ||          r||j        |j        z   z  }?|                    ||d          \  }}|t          k    s|t          k    rpt          ||          }|s/|                                }|rt          ||
z
  d          }|	|z  }	n||                                |_        d}|	|k    s||k    r|||d|         ||d         fc S |	|z  }	|	|k    r||	|z
  z
  }|rhddlm} t          ||t          f          rK|j        j        }|t%          |t'          |          z            z  t          z   }||k     r||z  }|||z
  z  }|}	 t)          |                              |||          }n	#  d}Y nxY w|s|||d|         ||d         fc S |||d|         |dd         z   |dd         ||dz   d         z   fc S |                                }
|	|
z  }	||
|_        ||	|
z
  |g fS )ri  r   rx   rl  rm  rn  N	Paragraph)_getContent	enumeraterB   rc  rk  r'  rr  rs  rZ   r   r   rs   rt  reportlab.platypus.paragraphr  r   rl   r   r   r  r  rg   rp   ru  )r!   r9   r^   r_   rw  rx  r  paraFixr~  r   r  sBr  rv  r:  r   rk  rX   rY   r  rW   r  r   nHrf   s                            r"   
_findSplitz_FindSplitterMixin._findSplit  s   RW%%Q<< &	 &	CAaq'' CCCCCCa)) 1!&.0J((4
955CAa%xx1e88XAaA $$&&.3qtA;;qQ?q7G7G7I7IC$4+~~:+q!uQqrrU2222FA}} !A#&  FFFFFF!!Y|$<==  "#'/$SE'NN):%;%;;EAb55"-"#r"u,!!,,T*R@@AAAAA Ck1RaR51226666[2A2q!uQqrrU1QqSTT7]BBBB""BGAA?bCO!B$2~s   $GG
c                     g }||n| j         }|D ]T}t          |t                    r(|                    |                                           ?|                    |           U|S r   )r  r'  ListFlowabler/  r  r   )r!   r  rv  r)  r   s        r"   r  z_FindSplitterMixin._getContent  sk    *GG 	 	A!L)) ))))r$   )rx   NNTr   )r&   r'   r(   r  r  r*   r$   r"   r  r    s=        0 0 0 0d     r$   r  c                   J    e Zd ZdZ	 	 ddZd Zd Zd	 Zd
 Zd Z	d Z
ddZdS )ImageAndFlowables(combine a list of flowables and an Imager   r   rs  Nc	                     t          |          | _        || _        || _        || _        || _        || _        || _        || _        d S r   )	r  r  _I_irpad_ilpad_ibpad_itpadr  	imageHref)	r!   r  rv  imageLeftPaddingimageRightPaddingimageTopPaddingimageBottomPadding	imageSider  s	            r"   r#   zImageAndFlowables.__init__	  sF    (++'&(%
"r$   c                 t    t          |           }|                                  |                                 |S r   )r   _resetr*  )r!   r  s     r"   r   zImageAndFlowables.deepcopy  s,    JJ	r$   c                     t          | d          r| j        }nt          | d          r| j        }n| j        }t                              | |          S )N_C1_C0)rB   r  r  r  r  rp   )r!   r)  s     r"   rp   zImageAndFlowables.getSpaceAfter  sU    4 	AAT%   	AAA''Q///r$   c                     t          | j                                        t                              |                     S r   )r   r  rs   r  r    s    r"   rs   z ImageAndFlowables.getSpaceBefore#  s.    47))++J,E,Ed,K,KLLLr$   c                 @    dD ]}	 t          | |           #  Y xY wd S )N)	_wrapArgsr  r  )delattrr   s     r"   r  zImageAndFlowables._reset&  s=    * 	 	AQ		 	s   c                 H   | j         }| j        }t          | d          rT| j        ||fk    rt	          |dd           | j        | j        fS |                                  |                                 ||f| _        |	                    ||           |
                    ||          \  }}|| _        || _        | j        }| j        }| j        }	| j        }
||z
  |z
  |z
  x| _        }|
|z   |	z   }|t$          k    r'|                     |||          \  }}| _        | _        n|}d}||t$          z   k    rg | _        | j        | _        t/          ||          x}| _        || _        | j        s|| _        n#t3          | j        ||          \  }}||z   | _        | j        | j        fS )Nr  r   r   )r9   r  rB   r  rb   r0   r1   r  r$  rU   r!  _wI_hIr  r  r  r  _iWr   r  r  r  r  r   _aHr  )r!   r^   r_   r9   r  r  r  ilpadirpadibpaditpadiWrW   r~  r  W1r  s                    r"   rU   zImageAndFlowables.wrap-  s   yG4$$ 	 ~
;777GAnUY<Z<Z<bz$+--KKMMM#[0	z+&&&K88B"U*R/%772RZ%e88%)__T"R%@%@"Ab$((ABRX::DH}DHBr

"TX
x 	 DKKD99EBrR%DKz4;&&r$   c           
      :   t          | d          rM| j        }| j        ||fk    st          |dd           (|                                  |                                 |                     ||          \  }}| j        |k    rg S | j        }|rH|d         	                    ||| 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   rx   )r  r  r  r  r  r  )rB   r  r  rb   r  r$  rU   r  r  re   r  r  r  r  r  r  r  r  )	r!   r^   r_   r  r~  r   r  rf   r  s	            r"   re   zImageAndFlowables.splitQ  sA   4$$ 	$A~
;77771^TX;Y;Y;e!!###IIj--!8KX 	1J{48';<<A "tfqrrU2abb6\C!GHSL%)[&*k$(K'+{"jDND D D   	r$   c                 x   | j         dk    r|| j        z   }|| j        z   | j        z   }n|| j        z   | j        z
  | j        z
  }|}| j                            |||| j        z   | j        z
  | j	        z
             | j
        rI|                    | j
        ||| j        z   | j        z
  | j	        z
  || j        z   || j        z   fd           | j        r*t                              | |||| j        | j                   | j        r9| j        \  }}t                              | |||| j        z
  | j        |           d S d S )Nrr  rx   )relative)r  rV   )r  r  r  r  r0   r  rS   r1   r  r  r  linkURLr  r  r  r  r  r  )	r!   r9   rE   rQ   rR   IxFxrV   rW   s	            r"   rS   zImageAndFlowables.drawOnm  sP   :vT[BT[48+BBTZ(4BBtBq}T[8ABBB> 	}LL"amDK.G.PRTW[W_R_abcgcnan)oz{L|||8 	PdD"adhOOO8 	Q^FBdD!QtxZRPPPPP	Q 	Qr$   )r   r   r   r   rs  Nr   )r&   r'   r(   r)   r#   r   rp   rs   r  rU   re   rS   r*   r$   r"   r  r    s        22fg15	# 	# 	# 	#  0 0 0M M M  "' "' "'H  8Q Q Q Q Q Qr$   r  c                   ,    e Zd ZdZdZddZd Zd	dZdS )
_AbsRectrx   Tr   Nc	                 v    || _         || _        || _        || _        || _        || _        || _        || _        d S r   )_x_yr
  r  _strokeColor
_fillColor_strokeWidth_strokeDashArray)	r!   rE   rQ   r0   r1   strokeWidthstrokeColor	fillColorstrokeDashArrays	            r"   r#   z_AbsRect.__init__  sC    '#' /r$   c                     dS r  r*   r]   s      r"   rU   z_AbsRect.wrap  r  r$   c                    | j         t          k    r| j        t          k    r| j        o| j        d uo
| j        dk    }|s| j        r|                                 |r4|                    | j                   |                    | j                   | j        r|	                    | j                   |
                    | j        | j        | j         | j        |rdnd| j        rdnd           |                                 d S d S d S d S Nr   rx   )r  fill)r
  r   r  r  r  r  rJ   rL   r  r   rM   r  r  rN   )r!   r9   rE   rQ   rR   sts         r"   rS   z_AbsRect.drawOn  s$   ;ue!3!3"]t'8'D]IZ\]I]B $T_ $    9''(9:::%%d&7888? 7%%do666		$'$'$+dlr.!!WXdhds_z_`_`yz	{{{!!##### !3!3$ $r$   )r   NNNr   r&   r'   r(   r  ro  r#   rU   rS   r*   r$   r"   r  r    sU        IN0 0 0 0  $ $ $ $ $ $r$   r  c                   (    e Zd ZdZdZd Zd Zd ZdS )	_ExtendBGrx   Tc                 0    || _         || _        || _        d S r   )r  r  _bg)r!   rQ   r1   r  r   s        r"   r#   z_ExtendBG.__init__  s    r$   c                     dS r  r*   r]   s      r"   rU   z_ExtendBG.wrap  r  r$   c                     | j         }| j        }| j        }|j        }|j        |z
  |j        z
  }|j        |z
  }| j        }|                                }	|	                    ||||||           d S r   )
r  r  r  rr  r
  rs  _x1r9   getPageNumberr  )
r!   r   r  r&  r%  r   r#  r$  r9   pns
             r"   rl  z_ExtendBG.frameAction  sw    XglwlT!BH,i$y!!
		$uSS-----r$   N)r&   r'   r(   r  ro  r#   rU   rl  r*   r$   r"   r  r    sK        IN  
  	. 	. 	. 	. 	.r$   r  c                   ,    e Zd ZdZdZddZd Zd	dZdS )
_AbsLinerx   Tr   Nc                 h    || _         || _        || _        || _        || _        || _        || _        d S r   )r  r  r  _y1r  r  r  )r!   rE   rQ   x1y1r  r  r  s           r"   r#   z_AbsLine.__init__  s<    '' /r$   c                     dS r  r*   r]   s      r"   rU   z_AbsLine.wrap  r  r$   c                 T   | j         r| j        | j        dk    r|                                 |                    | j                    |                    | j                   |                    | j        | j        | j        | j	                   |
                                 d S d S d S d S r  )r  r  rJ   rL   r  r   r  r  r  r  rN   r!   r9   rE   rQ   rR   s        r"   rS   z_AbsLine.drawOn  s     	 !2!>4CTVWCWCWNN 1222d/000IIdgdgdhtx888	  	 !>!>CWCWr$   )r   NNr   r  r*   r$   r"   r  r    sU        IN0 0 0 0             r$   r  c                   L    e Zd ZdZ	 	 	 	 	 	 	 	 	 ddZdd	Zd
 Zd Zd Zd Z	dS )BalancedColumnsr  r  r  r   Nr   r{  c                    |pdt          |           z  | _        |dk     r't          d|d|                                           t	          |          | _        || _        || _        || _        || _	        |	| _
        |
| _        || _        || _        |t          z
  | _        || _        || _        || _        || _        || _        || _        || _        || _        d S )NzBalancedColumns-%dr  znCols should be at least 2 not z in )r   rj  rC   
identitityr  r  _nColsro   r  _innerPadding_rightPadding_topPadding_bottomPaddingrr   r   _neededshowBoundaryendSlack_boxStrokeColor_boxStrokeWidth_boxFillColor
_boxMargin_vLinesStrokeColor_vLinesStrokeWidth)r!   rv  nColsneededrr   ro   r  leftPaddinginnerPaddingrightPadding
topPaddingbottomPaddingrj  r  boxStrokeColorboxStrokeWidthboxFillColor	boxMarginvLinesStrokeColorvLinesStrokeWidths                       r"   r#   zBalancedColumns.__init__  s     ;02d88;	!88*%%%PTP_P_PaPaPabccc(++$'))%+&~( --)#"3"3r$   c                     d| j         j        d| j        dt          t	          |                     |                                 t          | dd          rdt          | dd          z  pdd	S )Nr{   z nCols=r|   rj  r   rs  r}   )r~   r&   r  r   r   r   rb   rg  s     r"   r   zBalancedColumns.identity  s     ,0N,C,C,CT[[[RUVXY]V^V^R_R_R_aeapaparararVB''S\74r;R;R-RYWYYY 	r$   c                     | j         S r   )ro   r    s    r"   rp   zBalancedColumns.getSpaceAfter  s
    r$   c                     | j         S r   )rr   r    s    r"   rs   zBalancedColumns.getSpaceBefore  s    r$   c                 *   789:;<=>?@ABCDEFGH g } j         ?ddlm}m}m} ddlm7 ddlm}  j        ?j        n j        A j	        ?j	        n j	        D j
        ?j
        n j
        G j        ?j        n j        :?j        }?j        }	 j        t          AD          n j        }
|
dz  @ j        ; j        B||
Bdz
  z  z
  Az
  Dz
  t%          B          z  <|}|G:z   z  }                     ;<B|z  d          \  }}}}|sDt)                                           d	|d
|d<dB|z  dd  j        D                       i 9d89;<B fd	Fd}|r|}ndd l}9Ffd}d|                    d          dz   dz  f9fd	}t3          t5          |t%          B          z   j        dz  z             |          } F|           9|         d         s% ||||          }|r|\  }}}}|}d}nY|} j        }nO|t%          B          z  } F|           9|         d         s$ ||||          }|r|\  }}}}|}d}n	|} j        }|r
J d             F||          \  }}}}9                                 |d         g k    r |d         g k    r|r||d         g|d         }}?j        }?j        }?j         }|:z   Gz   |z   }|:z   Gz   >|>z
  H|t%          B          z  =|s|	r || |	           } |||	          }nd x}} j!         j!        n?j!        E||z   ?j        z   C7:=>?@ABCD EGHfdtE          B          D             } #                    d          88  |d                                 z            tI          ?dd           } | r| d         nd x}!}" G 8?fdd|          }#|"r'tK          H>|"?          }!|&                    |!           8j'        }$|&                     |#g ||d                              |r|&                    |            j(        r j)        r j)        dk    p j*        }% j+        o j,        o
 j,        dk    }&|%s|&r j-        }'|'sd}'t]          |'          dk    r|'d         x}(x})x}*}+nt]          |'          dk    r|'d         x}(}+|'d         x})}*nt]          |'          dk    r|'d         }(|'d         x})}*|'d         }+nSt]          |'          dk    r!|'d         }(|'d         }*|'d         }+|'d         })nt)          d t_          |'          z            C|)z
  },|d         j        |d         j         z   |*z   }-H|+z
  }.>|(z   |+z   }/|.|/z   }0|%r(ta          |,|.|-|,z
  |/ j*         j(         j)        !          }1|&ryg }2tE          dB          D ]f}3d||3         j        ||3dz
           j        z   ||3dz
           j         z   z  }4|2&                    tc          |4|.|4|0 j,         j+        "                     gn|}0H}.|%r|&                    |1           |&r|2                    |2            3                                }5tE          B          D ]t}3||3         }6|6rJti          |||6d#$          }6t          |5|63                                          }5|&                    |6           |3Bdz
  k    r|&                    |           u|&                     |#| |$?                     |!r9|rd}5t3          H|.          |5z
  |!_5        t          ||0          |!j5        z
  |!_6        |r|&                    |           |r|&                    to          |fi d%Bd& j8        d' j9        d( j        d) j!        d* j        d+ j        d, j	        d- j
        d. j        d/ j:        d0z   d1 j        d2 j(        d3 j)        d4 j*        d5 j-        d6 j+        d7 j,                   >|fS )9Nr   )ru  r  rk  Framer`  r@   rx   F)r  z cannot make initial split aW=z aH=z ie cw=z ah=z	
content=c                 &    g | ]}|j         j        S r*   rK  r  s     r"   r   z6BalancedColumns._generated_content.<locals>.<listcomp>  s    EEE!-EEEr$   c                    | vrg }d}d}d }|rdz
  nd}t                    D ]}                    | |d          \  }}	}
}t          ||          }t          ||	          }|                    |
           ||k    rL                    d| z  |d          \  }}}}|d|z   | z  k    r|                    |           | dz
  }g } n|}| dt	          |g k              z  z   |g k    ||||ff| <   |          d         S )	Nr   r  r   F)r  r  rx   gư>i )r   r  r   r   r   )ahr  r  rX   rY   cnicheckr:  wihic0c1wchccc0cc1_fresr9   cwr  r!   s                   r"   	splitFuncz5BalancedColumns._generated_content.<locals>.splitFunc  sA   $,4q"u  A%)__T"RSX_%Y%YNBBAb		AAb		AHHRLLL&yy+/??41R4PR[`?+a+a(BS(
B..HHRLLL "4A!#B!EBBvc"b&kk11"b&!AaCb	9Q<r$   c                 6     |            |          d         S r  r*   )r
  r  r  s    r"   ry  z0BalancedColumns._generated_content.<locals>.func/  s    	"Ry|#r$      r  c                 v   |||z
  |z  z
  }|||z
  |z  z   }t          ||z
            |k    rI | |           | |          k     r|}n|}|||z
  |z  z
  }|||z
  |z  z   }t          ||z
            |k    Id                                 D             }|r"|                                 |d         d         S d S )Nc                 $    g | ]\  }}}||||fS r*   r*   )r   rE   tfvs       r"   r   zCBalancedColumns._generated_content.<locals>.gss.<locals>.<listcomp>@  s)    AAA&!BqbAa1XAAAr$   r   r  )r9  valuessort)	r   rG   r   tolgrr  r4  rv  r  s	           r"   gssz/BalancedColumns._generated_content.<locals>.gss3  s    Q"$Q"$!a%jj3&&qttaadd{{ QUbL(AQUbL(A !a%jj3&& BAELLNNAAA #FFHHHQ47Ntr$   g?zunexpected non-empty C2c                     g | ]B} 
|z  z   |sn|	d z
  k    rndj         |fz  j        j                  CS )rx   z%s-%d)r  r  r  r  r   r  r   _debug)rj  _oASpacer$  )r   r:  r  bpadr2  fhr   hgaplpadr  obxrpadr!   r  tpady2s     r"   r   z6BalancedColumns._generated_content.<locals>.<listcomp>s  s     < < < *+ U3qt8Br"()3DDt4%&aZZTTTdTYqM))%*^|% % % < < <r$   pageTemplatez&%s used in non-doctemplate environmentr  r   c                   0    e Zd ZdZg g dfdZ ffd	ZdS )3BalancedColumns._generated_content.<locals>.TActionz?a special Action flowable that sets stuff on the doc template TNc                 d    t                               |            || _        || _        || _        d S r   )r,   r#   bgsrv  r   )r!   r2  rv  r   s       r"   r#   z<BalancedColumns._generated_content.<locals>.TAction.__init__  s/    !!$'''r$   c                     | j         |_        | j        _        |                    | j        j                   | j        _        d S r   )rv  framesr2  r  handle_currentFramer   r   )r!   docr@  r   s      r"   r  z9BalancedColumns._generated_content.<locals>.TAction.apply  s:    6"&(''	222"&(r$   )r&   r'   r(   r)   r#   r  )r@  r   s   r"   TActionr0    sY        QQ#%T     "# + + + + + + + +r$   r7  )r   r   r   r   r      zInvalid value %s for boxMargin)r  r  r  )r  r  re  )rl  r  r  rr   ro   r  r  r  r  r  r  rj  z-1r  r  r  r  r  r   r  r   );r   rc  ru  r  rk  reportlab.platypus.framesr  ra  r  r  r  r  ro  rp  r  r   r9   r  r  r  rC   r   r  r^  r]  r  r   ro   r  clearr  r  r
  r  r   r   rb   r  r   r4  r  r  r  r  r  r  r   r   r  r  r/  rp   rd  r  r  r  r  rr   rj  )Ir!   rV   rW   Gru  r  rk  ra  leftExtraIndentrightExtraIndentgapaH0r~  r  r  C2r  r   r^  ry  r"  r  r  r)  r  r  r  fwftop	indenter0	indenter1rv  BGsxbgr  r7  	oldFramesdoBoxdoVLinesobmobmtobmlobmrobmbobx1obx2oby2obhoby1boxvLinesr:  vlxsaCir  r@  r  r&  r9   r  r2  r'  r   r(  r)  r  r*  r+  r  r  r,  r-  sI   `                                                      @@@@@@@@@@@@@@@@@@r"   rp  z"BalancedColumns._generated_content  s
   XXXXXXXXXX333333======%)%6%>u!!DDU&*&8&@u""dFX$($4$<u  $BR'+':'Bu##H[0 2 $ 2 :c$tnnn@R3wy3a= 4'$.e<
dTkood2eBhuoEE"S 	222bbbrEEt}EEEE  
 	  	  	  	  	  	  	  	  	  	 .  4	5AA KKK$ $ $ $ $ $ "#		!q(8A'=      & C5<<(;;<<R@@AIaLLL8A; 1CQrNN -%&NAr3A$HHA#}HHe_	"Ry| 1D2A 1)*2sB#(#'=444444!	!X..B2Q488!bR!IqtrAYY\$wt|B$YBY%,, 	). 	) /!13C2CDDI 1ABBII$((I	*.*;*GT&&UM_ !33< < < < < < < < < < < < < < < < < /4Ell< < < 


/
/9+FXYYYeK--!+3r77t+b	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+n 	+ 	+ 	+  	 Br"U++CHHSMMMH		Aad##$$$)ahhy)))%Z$*>Z4CWYZCZq_c_q*et/Fe4KbdeKe %	H %	/C'i3xx{{,/F22t2dTTS1!!f$t!!f$ttS11v!!f$t1vS11v1v1v1v !ADII!MNNN:DR59QrU\)D0Dd7DT'$,C8D tD$t)S"&"4$($8$($8  
  Gq G GAqtx!AaC&*4QqsV]BCCMM(3tCI`mq  nE  #F  #F  #F  G  G  G  GDD!((3---%QXXf%%%!!u 	% 	%A1B  Brx888B,,..//%'zz$$$	Yu--... 	2M2D\\B&CFd4..36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r$   c           
      6   t          | dd           }|| j        | j        z   t          z
  k     rt	                      | g}d}n=|sddlm}  |dd|ddddd          | _        |                     ||          \  }}|s| `|r
 |j	        |  dt          ||          fS )Nr   r   r  i)r  r  r  r  )rb   rr   r  r   rO  r9  r  r   rp  rd  r  )r!   rV   rW   
self_framer;  r  r  s          r"   rU   zBalancedColumns.wrap  s    T(400
dt|+E111d#ABB B;;;;;;#eAa:!RS/0qB B B++Br22EB  K;7z7;;R|r$   )r  r  r   r   NNNNNNr   r{  Nr   NNNNr   )
r&   r'   r(   r)   r#   r   rp   rs   rp  rU   r*   r$   r"   r  r    s        22X\cg!""4 4 4 4@   
       r r rh    r$   r  c                   2    e Zd ZdZdZdZd Zd Zd Zd Z	dS )	AnchorFlowablezcreate a bookmark in the pdfrx   Tc                 L    t                               | dd           || _        d S r  )r?  r#   _name)r!   rj  s     r"   r#   zAnchorFlowable.__init__  s#    Qq!!!


r$   c                 0    | j         j        d| j        dS )NrD  r   )r~   r&   r^  r    s    r"   r   zAnchorFlowable.__repr__  s    >2224:::>>r$   c                     dS r  r*   r  s      r"   rU   zAnchorFlowable.wrap	  r  r$   c                 H    | j                             | j        dd           d S r  )r9   bookmarkHorizontalr^  r    s    r"   r:   zAnchorFlowable.draw  s$    	$$TZ!44444r$   N)
r&   r'   r(   r)   r  ro  r#   r   rU   r:   r*   r$   r"   r\  r\    s`        &&IN  ? ? ?  5 5 5 5 5r$   r\  c                   &    e Zd Zd Zd Zd Zd ZdS )_FBGBagc                     t          |          }t          | j        t                    r	|| j        v s|| j        k    o4t          |          | j        k    o| j        |                                k    S r   )r   r'  fidr  cidr  r  )r!   r   r9   rf  s       r"   matchesz_FBGBag.matches  sj    iiDHT**>sdhO#tx- M4$(*M/3w8J8J8L8L/L	Nr$   c                     |j         | j                                                 | _        t	          t
          | j        dd                   S )Nrx   r  )_codecodePosre   _instr  r  r;   s     r"   getDimsz_FBGBag.getDims  s8    Z-3355
5AaC)))r$   c                     t          ||||          g| j        dd<   d                    | j                  |j        | j        <   d S )Nrx   r   )r   rl  r   rj  rk  )r!   r9   rE   rQ   rX   rY   s         r"   setDimsz_FBGBag.setDims  sB    !!Aa??+
1Q3#&88DJ#7#7
4<   r$   c                    t          |          t          k    rt          |          t          k    r|                                }| j        t	          |          k    r^| j        t	          |          k    rF| j        |k    r;|                     |          \  }}	}
}|                     ||||
||	z   |z
             d S |	                                 | j
        }|r|                    |           | j        }||dk     rd n| j        }|rH|                    |           |                    |           | j        }|r|                    |           t	          |          | _        t	          |          | _        || _        t%          |j                  | _        |                    |||||rdnd|rdnd           |                                 d S d S d S r  )r9  r   r  rf  r   rg  r  rm  rp  rJ   r  r   r  r  rL   r  r  r  r   rj  rk  rM   rN   )r!   r9   r   r$  r&  r#  r%  r  oxoyowohfbgcswscdas                   r"   r  z_FBGBag.render  s   s88E>>c#hhunn##%%BxE""txD'9'9dgrkk"ll4002bT"SBrE#I66666   ~ ,%%d+++%Z2a44TTT5E )''+++%%b)))-B )R(((e99d88"4:		#c#cba$EUQQTU	VVV!!#####/ >nnr$   N)r&   r'   r(   rh  rm  rp  r  r*   r$   r"   rd  rd    sS        N N N
* * *8 8 8$ $ $ $ $r$   rd  c                   *    e Zd ZdZdZd	dZd Zd ZdS )
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.
    rx   Nr   Tc                     t                               | dd           || _        |rDddlm}  ||          | _         ||          | _        || _        || _        || _	        || _
        d S d S )Nr   )_evalMeasurement)r?  r#   r  rc  r}  rr  rs  r  r  r  r  )	r!   r  rr  rs  r  r  r  r  r}  s	            r"   r#   zFrameBG.__init__>  s    Qq!!!
 	3GGGGGG((..DI))%00DJDJ*D*D#2D   	3 	3r$   c                       j         j        dd                     fdd                                D                       dS )NrD  rE  c           	      <    g | ]}|d t          |d          S )=Nr   )r   r:  r!   s     r"   r   z$FrameBG.__repr__.<locals>.<listcomp>K  sG      >L  >L  >Lef7SWXYZ^K_K_K_>`  >L  >L  >Lr$   zstart color left rightr   )r~   r&   r   re   r    s   `r"   r   zFrameBG.__repr__J  s    >222499  >L  >L  >L  >L  kC  kI  kI  kK  kK  >L  >L  >L  4M  4M  4M  4M  N  	Nr$   c                 p   t          | dd           }|d S | j        rw| j        }| j        }|dn|}|j                            t          | j        | j        | j	        | j        dv r| j        nd | j        | j        | j
        dddd d                     d S |j        r|j                                         d S d S )Nr   r   )r   zframe-permanentr   T)rr  rs  r  r  r  r  r  rf  rg  r  rk  r  )rb   r  r  r  r  r   rd  rr  rs  r  r  rq  )r!   r   rx  rw  s       r"   r:   zFrameBG.drawM  s    Xd++=&&: 	"!B!BzrBO""TY&*j*.*48JB]4]4]djjcg,0,<,0,<040D&'&'%'*.'+" " "# # # # # _ 	"O!!!!!	" 	"r$   )Nr   r   TNNN)r&   r'   r(   r)   r  r#   r   r:   r*   r$   r"   r{  r{  7  sZ         
 I
3 
3 
3 
3N N N" " " " "r$   r{  c                   ,    e Zd ZdZdZg dddfdZd ZdS )	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.
    rx   rz  r  Tc                 P    || _         |pg | _        || _        || _        || _        d S r   )rQ  
nextFramesr>  requiredadjustHeight)r!   rQ  r  r>  r  r  s         r"   r#   zFrameSplitter.__init__l  s2    ($* (r$   c                      j         }ddlm}m}m}  | j                  g}| j         j        z   t          z
  k     r#|	                    t                                 n                     d          }|  |d                                 z             fd|D             }	|	s( |                                 d j        d          |	d         }	 fd|	j        D             }
d	 |
D             fd
 j        D             r? |                                 dd|	j        d|	dd |	j        D             	                               d          }	|	|	j        |	j        fd}||	_        | j        z
  }t#          |
          D ];\  }}t%          |          } j        r||_        |                                 ||
|<   <|
|	_        |	                     ||
d         j                              |j        |  dS )Nr   )NextPageTemplateCurrentFrameFlowableru  pageTemplatesz(%s called in non-doctemplate environmentc                 4    g | ]}|j         j        k    |S r*   )r   rQ  )r   r`  r!   s     r"   r   z&FrameSplitter.wrap.<locals>.<listcomp>  s(    ???QqtT->'>'>q'>'>'>r$   z.nextTemplate=z
 not foundc                 0    g | ]}|j         j        v |S r*   )r   r  )r   r   r!   s     r"   r   z&FrameSplitter.wrap.<locals>.<listcomp>  s'    >>>Qaddo&=&=q&=&=&=r$   c                     g | ]	}|j         
S r*   r   r  s     r"   r   z&FrameSplitter.wrap.<locals>.<listcomp>  s    qtr$   c                     g | ]}|v|	S r*   r*   )r   r   Ns     r"   r   z&FrameSplitter.wrap.<locals>.<listcomp>  s    888QQaZZqZZZr$   z frames=z not found in pageTemplate(z)
z has frames c                     g | ]	}|j         
S r*   r  r  s     r"   r   z&FrameSplitter.wrap.<locals>.<listcomp>  s=      ~V  ~V  ~V  HI~  C  ~V  ~V  ~Vr$   r.  c                 :    ||_         ||_         || |           d S r   )r4  onPage)r9   r6  r@  r  rG  s        r"   unwrapz"FrameSplitter.wrap.<locals>.unwrap  s(    "tC     r$   rb  )r   rc  r  r  ru  rQ  r>  r  r   r   rO  r   r   r4  r  r   r  r  r   r  r1   r  rd  )r!   rV   rW   r   r  r  ru  r;  	templatesr@  rv  r  rY   r:  r   r  s   `              @r"   rU   zFrameSplitter.wraps  s   ddddddddddD-..
/dht}$U***HHY[[!!!! --o>>I !k"LT]]__"\]]]????)???A h!kDMMOOOOTXTeTeTe"fgggdA>>>>!(>>>AQA8888$/888A X!kdhdqdqdsdsdsdstututuvwvzvzvz{|{|{|  ~V  ~V  MN  MU  ~V  ~V  ~V  ~V  #W  X  X  X##N33A"#18ah ! ! ! ! AHkA ||  !q''$0qah


!AHHH))!A$'22333##Q''sr$   N)r&   r'   r(   r)   r  r#   rU   r*   r$   r"   r  r  e  sR         
 I02RVZ ) ) ) )$ $ $ $ $r$   r  )_type2formatteru   •u   ●u   ■u   ○u   ◆u   ❖u   ➤u   ❇u   ❏u   ★)

bulletcharcircler  discdiamond	diamondwx
rarrowheadsparkle	squarelrs	blackstar1c                 "   |dk    rt                               | |           }n"t          |         t          |                     }|rHt	          |t
                    r||z  }n-t          |          r ||          }nt          d|z            |S )Nbulletz!unexpected BulletDrawer format %r)_bulletNamesr  r  r   r'  r   callablerC   )valuetypeformatr  s       r"   _bulletFormatr    s    X~~U5))D!#e**-- KfX&& 	K
AAf 	Kq		AA@6IJJJHr$   c                   2    e Zd Z	 	 	 	 	 	 	 	 	 	 dd
ZddZd	S )BulletDrawer0rr  r  black	Helveticar   r   ltrNc                     || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d S 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__  sX     
'%'--+)#)r$   c                 x   | j         }|sd S |                                 |                    ||           |j        | j        z
  | j        z   }| j        dk    r|j        |j        z
  | j	        z   }n|j
        | j	        z
  }|                    | j        | j                   |                    | j                   | j        }t!          || j        | j                  }|dk    r|                    |||           n|dk    r|                    |||           n|dv r|                    |||           ns|                    d          s|                    d          r7|dd                                          pd}|                    ||||           nt1          d	|z            |                                 d S )
Nrtlrr  rs  )centercentrenumericdecimal   .zInvalid bulletAlign: %r)r  rJ   rK   r1   r  r  r  r0   _rightIndentr  _leftIndentr   r  r   r  r  r  r  
drawStringdrawRightStringr   
startswithr   drawAlignedStringrC   rN   )	r!   indenterr9   rE   rQ   rR   r  r  pcs	            r"   rS   zBulletDrawer.drawOn  s   
ffq!OD001DD?E!!!669KKAA$t'99AT)$*>???$+,,,'eD$4T5GHHOOAa&&&&'!!  1U++++///""1Qu----##I.. 	F+2H2H2S2S 	FQRR&&((/CB""1QuR00006DEEEr$   )
r  rr  r  r  r  r   r   r   r  Nr   )r&   r'   r(   r#   rS   r*   r$   r"   r  r    sZ         &" '#.#%"#!"#!%* * * *.     r$   r  c                 n    t          || j        | j                   }t          || j        | j                  S r   )r  r  r   r  r  )r   r  s     r"   _computeBulletWidthr    s/    %ao>>EuQ.q/@AAAr$   c                   l    e Zd Zd                                ZddZd ZddZd Zd Zd Z	d	 Z
ddZd
S )
DDIndenterz/_flowable _leftIndent _rightIndent width heightr   c                 L    || _         || _        || _        d | _        d | _        d S r   )	_flowabler  r  r0   r1   )r!   flowabler   r  s       r"   r#   zDDIndenter.__init__  s+    !%'
r$   c                 v      j                             | j        z
   j        z
  |          } fd|D             S )Nc                 H    g | ]}t          |j        j                   S ))r   r  )r  r  r  )r   r  r!   s     r"   r   z$DDIndenter.split.<locals>.<listcomp>  sH          1#'#3$($5    r$   )r  re   r  r  r!   rV   rW   rf   s   `   r"   re   zDDIndenter.split  sW    N  D$4!4T5F!FKK    $%	   	r$   c           
          | j                             ||| j        z   |t          d|| j        z
  | j        z
                       d S r  )r  rS   r  r   r  r  s        r"   rS   zDDIndenter.drawOn  sG    d1T%5#5aAc$BR>RSWSd>d8e8efffffr$   c                     | j                             || j        z
  | j        z
  |          \  }}|| j        z   | j        z   | _        || _        | j        |fS r   )r  rU   r  r  r0   r1   r!   rV   rW   rX   rY   s        r"   rU   zDDIndenter.wrap  sW    n!!"T%5"5d6G"GLL!t''(99
z!|r$   c                     || j         v r>	 | j        |         S # t          $ r# |dvrt          | d| d| j                   Y nw xY wt	          | j        |          S )Nrr   ro   z has no attribute z dict=)_IndenterAttrsr(  KeyErrorr)  rb   r  r   s     r"   r*  zDDIndenter.__getattr__  s    ###`}Q'' ` ` `888(D)^)^a)^)^t})^)^___ 98` t~a(((s    *AAc                 \    || j         v r|| j        |<   d S t          | j        ||           d S r   )r  r(  setattrr  r!   rG   r  s      r"   __setattr__zDDIndenter.__setattr__  s<    ### DM!DN1Q'''''r$   c                 V    || j         v r
| j        |= d S t          | j        |           d S r   )r  r(  r  r  r   s     r"   __delattr__zDDIndenter.__delattr__  s8    ###a   DN1%%%%%r$   Nc                 T    | j         j        d| j                            |          S )Nz containing )r~   r&   r  r   rg  s     r"   r   zDDIndenter.identity   s,    %)^%<%<%<T^=T=TU[=\=\=\]]r$   rb  r   r   )r&   r'   r(   re   r  r#   rS   rU   r*  r  r  r   r*   r$   r"   r  r    s        FLLNNN     g g g g  ) ) )( ( (& & &^ ^ ^ ^ ^ ^r$   r  c                   L    e Zd Zd                                ZddZd ZddZdS )	
LIIndenterzN_flowable _bullet _leftIndent _rightIndent width height spaceBefore spaceAfterr   Nc                     || _         || _        || _        || _        d | _        d | _        ||| _        |	|| _        d S d S r   )r  _bulletr  r  r0   r1   rr   ro   )r!   r  r   r  r  rr   ro   s          r"   r#   zLIIndenter.__init__%  sU    !%'
"*D!(DOOO "!r$   c                      j         }|                    | j        z
   j        z
  |          t	                    dk    rt          |d          rpt	          |j        j                  }t	          d         j        j                  }t          t          |dd           dd           dk    r	||dz
  k    s	||dz
  k    rg r fdD             ng S )	Nrx   r  r   rl   	alignmentr8  r  c           
      l    g | ]0}t          |j        j        |d          u rj        pd          1S )r   N)r   r  r  )r  r  r  r  )r   r  rf   r!   s     r"   r   z$LIIndenter.split.<locals>.<listcomp>;  s_       
  	 1#'#3$($5"#qt)"<"D    r$   )	r  re   r  r  r   rB   r  r   rb   )r!   rV   rW   r   cnlnnlrf   s   `     @r"   re   zLIIndenter.split1  s    NGGBt''(992>>q66!88(++8ahn%%Cadk'((C7400TBBAEE#PSTUPU,,SU||      
 $%    	r$   c           
          | j         r| j                             | |||d           | j                            ||| j        z   |t	          d|| j        z
  | j        z
                       d S r  )r  rS   r  r  r   r  r  s        r"   rS   zLIIndenter.drawOnC  so    < 	1LT!Aa000d1T%5#5aAc$BR>RSWSd>d8e8efffffr$   )r   r   NNNr   )r&   r'   r(   re   r  r#   rS   r*   r$   r"   r  r  #  sb        ekkmmN
) 
) 
) 
)  $g g g g g gr$   r  )	ListStylec                       e Zd Z	 ddZdS )ListItemNc           	         t          |t          t          f          s|f}|| _        i x}| _        |r;t          |t
                    st          | j        j        d|d          || _	        t
          j
        D ]5}||v r|                    |          }n|rt          ||          }n0|||<   6dD ].}|                    |t          ||d                     }||||<   /d S )Nz style argument (z) not a ListStyle)r  rr   ro   )r'  r  r  
_flowables_paramsr  rC   r~   r&   _styledefaultsr  rb   )r!   r  rl   r  paramskr  s          r"   r#   zListItem.__init__K  s   " )T%L11 	%"I# "" 	 eI.. m T^MdMdMdejejej!klllDK# 	 	ADyyHHQKK E!$$F1II6 	 	A7540011A}q		 	r$   r   r  r*   r$   r"   r  r  J  s-         ' ' ' ' ' 'r$   r  c                       e Zd Zd ZdS )	_LIParamsc                 >    || _         || _        || _        || _        d S r   )r  r  r  first)r!   r  r  r  r  s        r"   r#   z_LIParams.__init__u  s"     



r$   Nr  r*   r$   r"   r  r  t  s#            r$   r  c                   \    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dS )r  1aAiINc                 ~   || _         |r8t          |t                    st          d| j        j        z            || _        t          j                                        D ]<\  }}t          | d|z   |
                    |t          |||                               =dD ]:}|
                    |t          ||d                     }|t          | ||           ;d}|,t          | dd           }|| j        dk    rd}d}n	| j        }d}| j        dk    rU|r)|D ]%}|| j        vrt          d	|d
| j                  &n*| j        D ]"}|| j        vrt          d| j        z            #|| _        |pt          |t          t           f          | _        d | _        d | _        |                    dd           | _        d S )Nz!%s style argument not a ListStyler0  r  F_startr  r  Tzinvalid start=z or bullettype=zinvalid bullettype=%rcaption)r  r'  r  rC   r~   r&   rl   r  itemsr  r  rb   r  _numberStylesr  r  r  _auto_list_content_dimsrq  _caption)r!   r  r  rl   r  r  r  r   s           r"   r#   zListFlowable.__init__}  s   $ $ 	eI.. ` !Dt~G^!^___DJ%++-- 	? 	?CAaDQtxx'%!*<*<==>>>>- 	" 	"A7540011A}Qq!!!=D$//E}#X--(EDD ,EDX%% U i iA 222(jPUPUPUVZVfVf)ghhh 3i ) U UA 222()@4CS)STTT 3;ZtEl;;
!
400r$   c                 T    | j         |                                 | _         | `| j         S r   )r
  r  r  r    s    r"   r  zListFlowable._content  s-    %!%!1!1!3!3D!!r$   c                     | j         |k    r/t          | j        || j                  \  | _        | _        || _         | j        | j        fS r   )r  r  r  r9   r0   r1   r  s      r"   rU   zListFlowable.wrap  sA    :r>>&1$-49&M&M#DJDJz$+%%r$   c                     | j         S r   )r  r  s      r"   re   zListFlowable.split  s
    }r$   c           
   #   p  K   | j         D ]}t          |t          t          f          r8|r5t	          |          D ]%\  }}|dk    ot          |t
                     |fV  &Wt          |t                    r#|j        }|sIt	          |j                   D ]3\  }}t          |t
                    rt          d          |dk    |fV  4|	                                }|
                    dd           }|
                    dd           }|
                    dd           }t          |j                   dz
  }t	          |j                   D ]M\  }}|	                                }	|s|||	d<   ||k    r|||	d<   |rd }dt          ||	||dk              fV  Nt          |t
                     |fV  d S )Nr   z"LIIndenter not allowed in ListItemr  rr   ro   rx   )r  r'  r  r  r  r  r  r  rC   r   rq  r   r  )
r!   r   r:  zr  r  rr   ro   r<  r  s
             r"   _flowablesIterzListFlowable._flowablesIter  s
      	6 	6A!T%L)) 6 G )! G G1dC:a
+C+C'CQFFFFFAh'' 6 ; )!, 7 7 & &1%a
33 S",-Q"R"RRdAg&
 $[[]]F"JJwt44E"(**]4"@"@K!'L!>!>JAL))A-A )!, 7 7 ; ;1"KKMM  ;[%</:Am,a44J$:.8AlO(De1QuQT!:!::::::; %Qz222A555559	6 	6r$   c                 ,   |rw|                     d| j                  }|                     d| j                  }|                     dd           }|                     dd           }t          ||||||          S t          || j        | j        |          S )Nr   r  rr   ro   r  )r  r  r  r  )r!   r  r  r  r   r  rr   ro   s           r"   _makeLIIndenterzListFlowable._makeLIIndenter  s     	RL1ABBJ **]43DEEK **]488KL66Jhz+fQ\hrssssht'78I&Q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 Nr0  r   )rG   r!   s    r"   getpz&ListFlowable._makeBullet.<locals>.getp  s    tCE***r$   rl   c                 x    | v r|          S r| j         v rt          |           S t          d| z             S r  )r(  rb   )rG   r  r!   rl   s    r"   r  z&ListFlowable._makeBullet.<locals>.getp  sH    ;;vay 0HQ%.00a2HtCE***r$   r  r  r  r  r  r  calcBulletDedentr  r  )
r  r  r  r  r  r  r  r  r  r  )rb   r  )r!   r  r  r  rl   s   ` ` @r"   _makeBulletzListFlowable._makeBullet  s    >+ + + + + + F7400E+ + + + + + +
  $] 3 3#tL11 $] 3 3#'4(8#9#9#'4(8#9#9"&$"7"7!%&8!9!9"d;//!%n!5!5   	r$   c           	      	   | j         }| j        }t          |t          t          f          r|}|d         }n|g}|d         }t          |dv           }|r	 t          |          }n	#  d}Y nxY w| j        }|dk    rA| j        }| j        }|dk    r|dk    r	| j	        }n|dk    r	| j
        }n|}	d}
|                                 D ]\  }}|r&t          |
t          | |	                    }
|r|	|z  }	-t          |t                    rq|j        }|rC|j        |k    r7t          |
t          ||j                            }
t          |j                  }	nt          |
t          | |	                    }
|r|	|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}|                                 D ]\  }}t          |t(                    r|j        }t          |t          t          f          r|d         }||v rR|j        rI|                    |          dz   }||d          |d |         z   |_        |j        d         }|r||_         n|}i }|s|dz  }t/          | d	d           }|||d	<   |r< ||                     ||                     |          |
                     |r||z  }t          |t                    r|j        }|r:|j        |k    rt5          d|j        d|          t          |j                  }n+|                     |t/          |dd                     |_        |r1t          |j                            d	d          |          |j        d	<    ||           |r||z  }t          |t:                    r|                    |j                   |                     |j         d |
          }|j!        rF|j        |j        }|rt          |          }|                     ||j                  |_        |r||z  } ||           k ||                     |d |
                     t/          | dd           }|9|d         }t          |j                            dd          |          |j        d<   | j"        r|#                    d| j"                   |S )Nr   r  rx   r   r  rr  rs  r@   rr   )r  r  zIncluded LIIndenter bulletType=z != OrderedList bulletType=r  )r  ro   r   )$r  r  r'  r  r  r   r  r  r  r  r  r  r   r  r  r  r  r  _calcBulletDedentr   r  r	  indexrb   r  r  rC   r(  r  r  updater  r  r  r  r  )r!   btr  r  autovincbdaligndirtvaluemaxWr4  r   r   rf   aSr:  fstartfparamsrr   r  ro   s                         r"   r  zListFlowable._getContent		  sn   eT%L)) 	F1IEEWFq	"-   	E

v::%E/CEzzeVmm%& ..00 . .CAa ."4(;D(H(HII-##Aj11 .I N |R//'*40CAag0N0N'O'O),QW#&t,?V,L,L#M#MD-#::g~~!-4!-S8F]]*T1BB*T#X5B!#X
&&(( .	G .	GCAa!L)) 'fd5\22 '#AYFV##w ' &U 3 3A 5#)%&&>&%.#@ !5 &G 9Q%d=>>*-8GM* G4''1A1A%1H1HPW'XXYYY$Aj)) GI X|R''(jmnmymymyz|z|)}~~~LLEE $ 0 0gaQU>V>V 0 W WAI a03AJNN=QR4S4ST_0`0`AJ}-1$Ai(( Gqx(((((4w(OO7 )w* !2E

 $ 0 0qx @ @AI(ESLE14''W'EEFFFFT,t44
!eA'*1:>>,q+I+I*'U'UAJ|$=3!((1T]333s   A% %A+r  r   )r&   r'   r(   r  r#   r   r  rU   re   r  r  r  r  r*   r$   r"   r  r  {  s        M 91 91 91 91v " " X"& & &  6 6 6>R R R R   0o o o o or$   r  c                   >    e Zd ZdZd Zd Zd ZddZd Zd Z	d	 Z
d
S )	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<   d S )N_TopPadder__f)r(  r   s     r"   r#   zTopPadder.__init__~	  s    )*o&&&r$   c                 `    | j                             ||          \  }}||z
  | j        d<   ||fS )N_TopPadder__dh)r.  rU   r(  r  s        r"   rU   zTopPadder.wrap	  s5    hmmBr""!*,Q$&'s
r$   c                     | j                             ||          }t          |          dk    rt          |d                   |d<   |S )Nrx   r   )r.  re   r   r,  r  s       r"   re   zTopPadder.split	  s>    HNN2b!!q66!88QqT??AaDr$   r   c           
      r    | j                             |||t          d| j        dz
            z
  |           d S )Nr   rM  )r.  rS   r   r0  rO   s        r"   rS   zTopPadder.drawOn	  s7    q3q4#8#8!8=====r$   c                 2    t          | j        ||           d S r   )r  r.  r  s      r"   r  zTopPadder.__setattr__	  s    1r$   c                 ,    t          | j        |          S r   )rb   r.  r   s     r"   r*  zTopPadder.__getattr__	  s    tx"""r$   c                 0    t          | j        |           d S r   )r  r.  r   s     r"   r  zTopPadder.__delattr__	  s    r$   Nr   )r&   r'   r(   r)   r#   rU   re   rS   r  r*  r  r*   r$   r"   r,  r,  z	  s         + + +  
  > > > >  # # #    r$   r,  c                   0    e Zd ZdZdZd	dZd Zd Zd ZdS )
	DocAssignzJAt wrap time this flowable evaluates var=expr in the doctemplate namespacerx   foreverc                 N    t                               |            |||f| _        d S r   r,   r#   r  )r!   varexprlifes       r"   r#   zDocAssign.__init__	  s'    $TM			r$   c                     |                      d          }|                    t          ||                     	 |                                 dD ]}	 ||= #  Y xY wS # dD ]}	 ||= #  Y xY ww xY w)N
_nameSpaceavailableWidthavailableHeight)r   r  dictry  )r!   rV   rW   NSr  s        r"   funcWrapzDocAssign.funcWrap	  s      ..
		$b<<<===	99;;7  1D	7  1D	s/   A AAA1%A)(A1)A-	+A1c                 f     |                      d| j        j        dd          z             | j         S )Nr4  rx   )r   r~   r&   r  r    s    r"   ry  zDocAssign.func	  s2    Et$$S)@)D%DEEtyQQr$   c                 2    |                      ||           dS r  )rE  r  s      r"   rU   zDocAssign.wrap	  s    bsr$   Nr8  )	r&   r'   r(   r)   r  r#   rE  ry  rU   r*   r$   r"   r7  r7  	  sc        TTI" " " "
 
 
R R R    r$   r7  c                       e Zd ZdZddZdS )DocExecz(at wrap time exec stmt in doc._nameSpacer8  c                 L    t                               |            ||f| _        d S r   r:  )r!   stmtlifetimes      r"   r#   zDocExec.__init__	  s%    $x-			r$   NrH  r%   r*   r$   r"   rJ  rJ  	  s.        22           r$   rJ  c                   2    e Zd ZdZd	dZd Zd Zd Zd ZdS )
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
    NTc                     t                               |            || _        || _        || _        || _        || _        d S r   )r,   r#   r<  r  rl   klassescape)r!   r<  r  rl   rQ  rR  s         r"   r#   zDocPara.__init__	  s=    $	

r$   c                     | j         }|rBt          |t                    st          |          } |                     d          |          S d S )NdocEval)r<  r'  rD   r   )r!   r<  s     r"   ry  zDocPara.func	  sS    y 	:d3''9D		34((33D999	: 	:r$   c                 @     |                      d          j        |  d S )Nr   )r   rd  )r!   r  s     r"   add_contentzDocPara.add_content	  s&    <g&&<dCCCCr$   c                    |                      ||          }| j        r[|                     d                                          }|                    t          ||                     ||d<   | j        |z  }nt          |          }|S )Nr?  r@  __expr__)rE  r  r   r   r  rC  rD   )r!   rV   rW   r  rD  s        r"   	get_valuezDocPara.get_value	  s    b$$; 	$$\227799BIId"R@@@AAA"BzNK"$EEJJEr$   c                     |                      ||          }| j        }|sddlm} | j        }|sddlm}  |            d         }| j        rddlm}  ||          }| 	                     |||                     dS )Nr   r  )getSampleStyleSheetCode)rR  )rl   rb  )
rY  rQ  r  r  rl   reportlab.lib.stylesr[  rR  xml.sax.saxutilsrV  )r!   rV   rW   r  r  rl   r[  rR  s           r"   rU   zDocPara.wrap	  s    r"%%J 	DCCCCCC
 	0@@@@@@%%''/E; 	 //////&--E5u---...sr$   )NNNT)	r&   r'   r(   r)   r#   ry  rV  rY  rU   r*   r$   r"   rO  rO  	  sq            : : :D D D	 	 	    r$   rO  c                   "    e Zd ZddZd Zd ZdS )	DocAssertNc                 V    t                               |            || _        || _        d S r   )r,   r#   r<  r  )r!   condr  s      r"   r#   zDocAssert.__init__	  s(    $	r$   c                 R    t                               | ||          | _        | j        S r   )rO  rE  _condr  s      r"   rE  zDocAssert.funcWrap	  s#    %%d2b11
zr$   c                 x    |                      ||          }t          | j                  st          |          dS r  )rY  boolrd  AssertionError)r!   rV   rW   r  s       r"   rU   zDocAssert.wrap	  s:    r"%%DJ 	( '''sr$   r   )r&   r'   r(   r#   rE  rU   r*   r$   r"   r`  r`  	  sF           
      r$   r`  c                   $    e Zd Zg fdZd Zd ZdS )DocIfc                 ^    t                               |            || _        |pg |f| _        d S r   )r,   r#   r<  blocks)r!   rb  	thenBlock	elseBlocks       r"   r#   zDocIf.__init__	  s1    $	o2i/r$   c                 D    t          |t          t          f          s|f}|S r   )r'  r  r  )r!   blocks     r"   
checkBlockzDocIf.checkBlock 
  s$    %e-- 	HEr$   c                      | j         |                     | j        t          t	          |                     ||                                                   dS r  )rV  rp  rk  r   rf  rE  r  s      r"   rU   z
DocIf.wrap
  sI    $//$+c$t}}RPR?S?S:T:T6U6U*VWWXXsr$   N)r&   r'   r(   r#   rp  rU   r*   r$   r"   ri  ri  	  sI        /1 0 0 0 0
  
    r$   ri  c                       e Zd Zd Zd ZdS )DocWhilec                 |    t                               |            || _        |                     |          | _        d S r   )r,   r#   r<  rp  ro  )r!   rb  
whileBlocks      r"   r#   zDocWhile.__init__

  s4    $	__Z00


r$   c                     t          |                     ||                    r  | j        t          | j                  | gz     dS r  )rf  rE  rV  r  ro  r  s      r"   rU   zDocWhile.wrap
  sF    b$$%% 	9DtDJ//688sr$   N)r&   r'   r(   r#   rU   r*   r$   r"   rs  rs  	
  s2        1 1 1
    r$   rs  c                        e Zd ZdZddZd ZdS )SetTopFlowablesrx   Fc                 "    || _         || _        d S r   _F_showr!   rv  shows      r"   r#   zSetTopFlowables.__init__
      


r$   c                     t          t          | dd           dd           }|r+| j        |_        | j        r| j        r| j        |j        _        dS Nr9   r   rb  )rb   r{  _topFlowablesr|  r   rp  r!   rV   rW   r6  s       r"   rU   zSetTopFlowables.wrap
  sU    gd6$//tDD 	7 $Cz 7dg 7/3w	,sr$   NrF  r&   r'   r(   
_ZEROZSIZEr#   rU   r*   r$   r"   rx  rx  
  <        J       r$   rx  c                        e Zd ZdZddZd ZdS )SetPageTopFlowablesrx   Fc                 "    || _         || _        d S r   rz  r}  s      r"   r#   zSetPageTopFlowables.__init__$
  r  r$   c                     t          t          | dd           dd           }|r+| j        |_        | j        r| j        r| j        |j        _        dS r  )rb   r{  _pageTopFlowablesr|  r   rp  r  s       r"   rU   zSetPageTopFlowables.wrap(
  sU    gd6$//tDD 	7$(GC!z 7dg 7/3w	,sr$   NrF  r  r*   r$   r"   r  r  "
  r  r$   r  r   )rx   NNN)r  N)e__version__r)   r   r   r   reportlab.lib.colorsr   r   reportlab.lib.rl_accelr   reportlab.lib.enumsr   r	   r
   r]  r   r   r   r   r   reportlab.lib.abagr   reportlab.pdfbaser   reportlab.pdfbase.pdfmetricsr   reportlab.rl_configr   r   r   r   re   __all__r   r,   r   r   r   r   r   r   r   r   r;  r?  rH  rO  rU  rY  r[  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r,  r[  rb  rd  r  r  r  r  r  r  r\  rd  r{  r  reportlab.lib.sequencerr  rC  r  r  r  r  r  r  r  r  r  r  r,  r7  rJ  rO  r`  ri  rs  rx  r  r*   r$   r"   <module>r     s3   	, 
			         0 0 0 0 0 0 0 0 ) ) ) ) ) ) < < < < < < < < < < . . . . . . I I I I I I I I I I # # # # # # & & & & & & 4 4 4 4 4 4 h h h h h h h h h h h h 
 !&        N N N N N N N N`P P P P P8 P P P*     (   &4 &4 &4PL L L L L8 L L L\[ [ [ [ [H [ [ [z    x   P P P P PX P P P
- 
- 
- 
- 
- 
- 
- 
-i i i i i
 i i i	 	 	 	 	I 	 	 		 	 	 	 	) 	 	 	F F F F FF F F F(3$ 3$ 3$ 3$j         @ @ @ @ @?8 @ @ @D    \   C C C C CH C C C	 	 	! ! ! ! !( ! ! !">$ >$ >$ >$ >$ >$ >$ >$@P P P P P P P PO O O O O O O O* * * * * * * *X/ / / / / / / /
  8# 8# 8# 8# 8# 8# 8# 8#td d d d d:h d d dN     $j# j# j# j# j#*X j# j# j#Z; ; ; ; ; ; ; ;zvQ vQ vQ vQ vQ
#5h vQ vQ vQp$ $ $ $ $x $ $ $:. . . . . . . .,         x      .s s s s s( s s sj	5 5 5 5 5V 5 5 5"&$ &$ &$ &$ &$d &$ &$ &$P," ," ," ," ,"n ," ," ,"\2 2 2 2 2H 2 2 2j 4 3 3 3 3 3t$  !#$!##     3 3 3 3 3 3 3 3jB B B1^ 1^ 1^ 1^ 1^ 1^ 1^ 1^f#g #g #g #g #g #g #g #gL + * * * * *( ( ( ( ( ( ( (T       } } } } }:h } } }~       <       4         i      0 0 0 0 0i 0 0 0d            G   	 	 	 	 	u 	 	 	    h       (     r$   