a
    ¥Q•h±w ã                   @   sp  d Z dZddlZddlmZmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ d ¡ ZG dd„ dƒZ G dd„ dƒZ!G dd„ de!ƒZ"dd„ Z#d›dd„Z$dZ%dd„ Z&dd„ Z'G dd„ de!ƒZ(G d d!„ d!e!ƒZ)G d"d#„ d#e!ƒZ*G d$d%„ d%e*ƒZ+G d&d'„ d'e*ƒZ,G d(d)„ d)e,ƒZ-G d*d+„ d+e-ƒZ.G d,d-„ d-e-ƒZ/G d.d/„ d/e+ƒZ0dœd1d2„Z1d3d4„ Z2G d5d6„ d6ƒZ3G d7d8„ d8e3e!ƒZ4G d9d:„ d:e4ƒZ5G d;d<„ d<e!ƒZ6d=d>„ Z7G d?d@„ d@e!ƒZ8G dAdB„ dBe!ƒZ9G dCdD„ dDe*ƒZ:G dEdF„ dFe!ƒZ;G dGdH„ dHe!ƒZ<G dIdJ„ dJƒZ=dKdL„ Z>G dMdN„ dNe3ƒZ?G dOdP„ dPe?e!ƒZ@dQdR„ ZAdSdT„ ZBG dUdV„ dVe?e!ƒZCG dWdX„ dXƒZDG dYdZ„ dZe?eDe!ƒZEG d[d\„ d\e*ƒZFG d]d^„ d^e*ƒZGG d_d`„ d`e*ƒZHG dadb„ dbeDe*ƒZIG dcdd„ dde+ƒZJG dedf„ dfeƒZKG dgdh„ dheJƒZLG didj„ dje*ƒZMddklNmOZO ePdldmdndodpdqdrdsdtdudv�
ZQd�dxdy„ZRG dzd{„ d{ƒZSd|d}„ ZTG d~d„ de!ƒZUG d€d�„ d�eUƒZVdd‚lmWZW G dƒd„„ d„ƒZXG d…d†„ d†ƒZYG d‡dˆ„ dˆe?e!ƒZZG d‰dŠ„ dŠe!ƒZ[G d‹dŒ„ dŒe*ƒZ\G d�dŽ„ dŽe\ƒZ]G d�d�„ d�e\ƒZ^G d‘d’„ d’e^ƒZ_G d“d”„ d”e^ƒZ`G d•d–„ d–e`ƒZaG d—d˜„ d˜e*ƒZbG d™dš„ dše*ƒZcd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)Ú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                   @   s   e Zd ZdZdd„ ZdS )Ú	TraceInfoz0Holder for info about where an object originatedc                 C   s"   d| _ d| _d| _d| _d| _d S )Nz	(unknown)éÿÿÿÿ)ZsrcFileZstartLineNoZstartLinePosZ	endLineNoZ
endLinePos©Úself© r   úU/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/platypus/flowables.pyÚ__init__0   s
    zTraceInfo.__init__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   .   s   r   c                   @   sª   e Zd ZdZdZdZdd„ Zdd„ Zd&dd„Zd'd	d
„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd(dd„Zed d!„ ƒZd"d#„ Zd$d%„ ZdS ))ÚFlowablezÍAbstract 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                 C   s4   d| _ d| _d| _d| _d| _d | _d | _d | _d S )Nr   ÚLEFTÚBOTTOM)ÚwidthÚheightÚwrappedÚhAlignÚvAlignZ
_traceInfoÚ_showBoundaryÚencodingr   r   r   r   r   H   s    zFlowable.__init__c                 C   s   || _ |  ¡  | ` dS )z#ensure canv is set on and then drawN)ÚcanvÚdraw©r   r+   r   r   r   Ú_drawOnZ   s    zFlowable._drawOnc                 C   sf   |rbt | dƒrb| j}|ddtfv r0|d| 7 }n2|dtfv rF||7 }n|dtfvrbtdt|ƒ ƒ‚|S )Nr'   ÚCENTERZCENTREç      à?ÚRIGHTr"   zBad hAlign value )Úhasattrr'   r   r	   r   Ú
ValueErrorÚstr)r   ÚxZsWÚar   r   r   Ú_hAlignAdjust`   s    
zFlowable._hAlignAdjustc                 C   sd   |   ||¡}| ¡  | ||¡ |  |¡ t| dƒrX| jrX| t¡ | dd| j	| j
¡ | ¡  dS )z6Tell it to draw itself on the canvas.  Do not overrider)   r   N)r7   Ú	saveStateÚ	translater.   r2   r)   ÚsetStrokeColorr   Úrectr$   r%   ÚrestoreState©r   Úcanvasr5   ÚyÚ_sWr   r   r   ÚdrawOnk   s    

zFlowable.drawOnc                 C   s"   || _ |  ||¡\}}| ` ||fS )zWintended for use by packers allows setting the canvas on
        during the actual wrap)r+   Úwrap)r   r+   ÚaWÚaHÚwÚhr   r   r   ÚwrapOnw   s    zFlowable.wrapOnc                 C   s   | j | jfS )z–This will be called by the enclosing frame before objects
        are asked their size, drawn or whatever.  It returns the
        size actually used.©r$   r%   ©r   Ú
availWidthÚavailHeightr   r   r   rB      s    zFlowable.wrapc                 C   s   t | d| jƒS )z-This should return the minimum required widthZ	_minWidth)Úgetattrr$   r   r   r   r   ÚminWidth…   s    zFlowable.minWidthc                 C   s   || _ |  ||¡}| ` |S )zXintended for use by packers allows setting the canvas on
        during the actual split)r+   Úsplit)r   r+   rC   rD   ÚSr   r   r   ÚsplitOn‰   s    zFlowable.splitOnc                 C   s   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   rJ   Zavailheightr   r   r   rN   ‘   s    zFlowable.splitc                 C   s6   t | dƒr| jS t | dƒr.t | jdƒr.| jjS dS dS )zOreturns boolean determining whether the next flowable should stay with this oneÚkeepWithNextÚstyler   N)r2   rQ   rR   r   r   r   r   ÚgetKeepWithNextš   s    zFlowable.getKeepWithNextc                 C   s6   t | dƒr| jS t | dƒr.t | jdƒr.| jjS dS dS )zXreturns how much space should follow this item if another item follows on the same page.Ú
spaceAfterrR   r   N)r2   rT   rR   r   r   r   r   ÚgetSpaceAfter    s    zFlowable.getSpaceAfterc                 C   s6   t | dƒr| jS t | dƒr.t | jdƒr.| jjS dS dS )z[returns how much space should precede this item if another item precedess on the same page.ÚspaceBeforerR   r   N)r2   rV   rR   r   r   r   r   ÚgetSpaceBefore¦   s    zFlowable.getSpaceBeforec                 C   s   dS )z?Hook for IndexingFlowables - things which have cross referencesr   r   r   r   r   r   Ú
isIndexing¬   s    zFlowable.isIndexingNc                 C   sf   t | dƒr| jdd�}nt | dƒr.t| jƒ}nd}|rF|rF|d|… }d| jjtt| ƒƒ|  ¡ |f 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é   )ZidentifyÚtextz...Nz<%s at %s%s>%s)	r2   rY   r4   r[   Ú	__class__r   ÚhexÚidÚ
_frameName©r   ÚmaxLenÚrr   r   r   Úidentity°   s    

zFlowable.identityc                 C   s   t t | dd ƒdd ƒS )Nr+   Ú_doctemplate©rL   r   r   r   r   rd   À   s    zFlowable._doctemplatec                 C   s   t | j|d ƒS ©N)rL   rd   ©r   r6   r   r   r   Ú_doctemplateAttrÄ   s    zFlowable._doctemplateAttrc                 C   s2   t | dd ƒ}|s|  d¡}|r.|jr.d|j S dS )NÚ_frameÚframez	 frame=%sÚ )rL   rh   r^   ©r   Úfr   r   r   r_   Ç   s    zFlowable._frameName)r   )r   )N)r   r   r   r    Ú_fixedWidthÚ_fixedHeightr   r.   r7   rA   rG   rB   rM   rP   rN   rS   rU   rW   rX   rc   Úpropertyrd   rh   r_   r   r   r   r   r!   =   s*   

	

r!   c                   @   s*   e Zd ZdZd
dd„Zdd„ Zd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                 C   s    t  | ¡ || _|| _|| _d S rf   )r!   r   r$   r%   r[   )r   r$   r%   r[   r   r   r   r   Ð   s    
zXBox.__init__c                 C   s   d| j | j| jf S )NzXBox(w=%s, h=%s, t=%s))r$   r%   r[   r   r   r   r   Ú__repr__Ö   s    zXBox.__repr__c                 C   sr   | j  dd| j| j¡ | j  dd| j| j¡ | j  d| j| jd¡ | j  td¡ | j  d| j d| j | j¡ d S )Nr   é   r0   )	r+   r;   r$   r%   ÚlineÚsetFontr
   ÚdrawCentredStringr[   r   r   r   r   r,   Ù   s
    z	XBox.drawN)rr   )r   r   r   r    r   rs   r,   r   r   r   r   rq   Í   s   
rq   c                 C   sP   t | ƒr&| d  ¡ dkr&| dd … } q t | ƒrL| d  ¡ dkrL| d d… } q&| S )Nr   rk   rZ   r   )ÚlenÚstrip)Úlinesr   r   r   Ú_trimEmptyLinesâ   s
    r{   c                 C   sP   |   d¡}|dkrDt|ƒ}g }|D ]}||d…  ¡ }| |¡ q"n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)rN   r{   ÚrstripÚappend)r[   Údedentrz   Z	templinesru   r   r   r   Ú	_dedenterê   s    
r€   z[{( ,.;:/\-c                 C   sR   |d u rt }|d u rd}g }| D ],}t|ƒ|krBt|||||ƒ q | |¡ q |S )Nrk   )ÚSPLIT_CHARSrx   Ú	splitLiner~   )rz   Úmaximum_lengthÚsplit_charactersÚnew_line_charactersÚlines_splittedru   r   r   r   Ú
splitLines   s    ÿr‡   c                 C   s°   d}| r¬t | ƒdkr¬d}t | ƒ|kr.t | ƒ}n"t|ƒD ]}| | |v r6|d }q6|dkr`|d }|rˆ| | d|… ¡ d}|t |ƒ8 }n| || d|…  ¡ | |d … } qd S )NTr   rZ   F)rx   Úranger~   )Zline_to_splitr†   rƒ   r„   r…   Ú
first_lineZsplit_indexZ
line_indexr   r   r   r‚     s$    


ÿr‚   c                   @   sB   e Zd ZdZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zd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   rk   c                 C   s6   || _ || _t||ƒ| _|r2|r2t| j|||ƒ| _dS )zötext 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)rR   Ú
bulletTextr€   rz   r‡   )r   r[   rR   r‹   r   ZmaxLineLengthZ
splitCharsZnewLineCharsr   r   r   r   >  s    üzPreformatted.__init__c                 C   s2   | j }d}|d urdt|ƒ }d|d | j¡f S )NzPreformatted(zPreformatted(bulletText=%s,z%s'''\ 
%s''')r|   )r‹   ÚreprÚjoinrz   )r   ZbTÚHr   r   r   rs   N  s
    zPreformatted.__repr__c                 C   s&   || _ | jjt| jƒ | _| j | jfS rf   )r$   rR   Úleadingrx   rz   r%   rI   r   r   r   rB   U  s    zPreformatted.wrapc                    s,   | j }|j‰|j‰ t‡ ‡fdd„| jD ƒƒS )Nc                    s   g | ]}t |ˆ ˆƒ‘qS r   r   )Ú.0ru   ©ÚfontNameÚfontSizer   r   Ú
<listcomp>^  ó    z)Preformatted.minWidth.<locals>.<listcomp>)rR   r“   r’   Úmaxrz   )r   rR   r   r‘   r   rM   Z  s    zPreformatted.minWidthc                 C   s€   || j jk rg S t|d | j j ƒ}d | jd|… ¡}d | j|d … ¡}| j }|jdkrjt|ƒ}d|_t|| j ƒt||ƒgS )Nç      ð?r|   r   )rR   r�   Úintr�   rz   ÚfirstLineIndentr   rŠ   )r   rJ   rK   ZlinesThatFitZtext1Ztext2rR   r   r   r   rN   `  s    
zPreformatted.splitc                 C   sˆ   | j j}| j| j j }| j d¡ | j jr:| j | j j¡ | j ||¡}| 	| j j
| j j| j j¡ | jD ]}| |¡ qh| j |¡ d S )Nz%PreformattedPara)rR   Ú
leftIndentr%   r“   r+   Z
addLiteralÚ	textColorÚsetFillColorZ	beginTextrv   r’   r�   rz   ZtextLineZdrawText)r   Zcur_xZcur_yZtxr[   r   r   r   r,   q  s    
þ
zPreformatted.draw)Nr   NNrk   )
r   r   r   r    r   rs   rB   rM   rN   r,   r   r   r   r   rŠ   7  s   
rŠ   c                   @   sl   e Zd ZdZdZdZddd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zd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.
    rZ   NÚdirectÚautor/   Fc	              	   C   sZ  || _ || _t|dƒ}	d| _|	r2|| _t|ƒ| _n8t|dƒr^|| _t|ƒ| _d| _d| _d}	n| | _| _|| _|	�s.t	j
 |¡d dv �r.ddlm}
 |
|d	ƒ}zDzt |¡}W n(   |  ||||¡ Y W | ¡  dS 0 W | ¡  n
| ¡  0 |d | _|d | _|�r|d
 | _d| _|  |||d¡ n(|	�rF|  |||d¡ n|  ||||¡ dS )z8If size to draw at not specified, get it from the image.ÚreadNZ	_renderPyTrZ   )z.jpgz.JPGz.jpegz.JPEGr   )Úopen_for_readÚbé   )r'   Ú_maskr2   Ú_drawingÚ_filerŒ   ÚfilenameÚ_imgÚ_dpiÚosÚpathÚsplitextÚreportlab.lib.utilsr¡   r   ZreadJPEGInfoÚ_setupÚcloseÚ
imageWidthÚimageHeight)r   r§   r$   r%   ÚkindÚmaskÚlazyr'   ZuseDPIÚfpr¡   rm   Úinfor   r   r   r   ‘  sH    



þ


zImage.__init__c                 C   sR   | j }|rN|d dkr,|  jd|d  9  _|d dkrN|  jd|d  9  _d S )Nr   éH   g      R@rZ   )r©   r°   r±   )r   Údpir   r   r   Ú
_dpiAdjust½  s    "zImage._dpiAdjustc                 C   s,   || _ || _|| _|| _|dkr(|  ¡  d S ©Nr   )Ú_lazyÚ_widthÚ_heightÚ_kindÚ_setup_inner)r   r$   r%   r²   r´   r   r   r   r®   Ã  s
    zImage._setupc                 C   s  | j }| j}| j}| j}|rP| ¡ \| _| _| jrrt|dƒrr|j	j
 dd¡| _n"| jrr| jj| jj | _| _d| _|  ¡  | jdkrˆ| `|dv rª|p˜| j| _|p¤| j| _nj|dv rÔ| j| d | _| j| d | _n@|d	v �rtt|ƒ| j t|ƒ| j ƒ}| j| | _| j| | _d S )
NÚ_imager¸   )r·   r·   Fé   )rž   Úabsolute)Z
percentageú%ç{®Gáz„?)ÚboundZproportional)r¼   r½   r¾   r¨   ÚgetSizer°   r±   r©   r2   rÀ   r¶   Úgetr¥   r$   r%   r¹   r»   Ú	drawWidthÚ
drawHeightÚminÚfloat)r   r$   r%   r²   ÚimgÚfactorr   r   r   r¿   Ê  s.    
zImage._setup_innerc                 C   sp   | j |t ks| j|t krd| j | jf| _tt|ƒ| j  t|ƒ| j ƒ}|  j |9  _ |  j|9  _| j | jfS rf   )rÈ   r   rÉ   Ú_oldDrawSizerÊ   rË   )r   rC   rD   rÍ   r   r   r   Ú_restrictSizeã  s    zImage._restrictSizec                 C   s    t | dd ƒ}|r|\| _| _d S )NrÎ   )rL   rÈ   rÉ   )r   Zdwhr   r   r   Ú_unRestrictSizeë  s    zImage._unRestrictSizec                 C   sz   |dkrHddl m} || jƒ| _t| jtƒsBd | _| jdkrBd| _| jS |dv rb|  ¡  | j| S t	dt
| ƒ|f ƒ‚d S )Nr¨   r   )ÚImageReaderrÁ   rZ   )rÈ   rÉ   r°   r±   z<Image @ 0x%x>.%s)r­   rÑ   r¦   r¨   Ú
isinstancer   r»   r¿   Ú__dict__ÚAttributeErrorr^   )r   r6   rÑ   r   r   r   Ú__getattr__ð  s    
zImage.__getattr__c                 C   s   | j | jfS rf   )rÈ   rÉ   rI   r   r   r   rB   ý  s    z
Image.wrapc                 C   sÒ   t | ddƒ}t | ddƒ}| j}|rz| jt| jƒ }| jt| jƒ }|j}z&| ||¡ | 	| j
||¡ W ||_qÎ||_0 nT| j}|dkrŽd| _| j
j| jpž| j||| j| j| jd� |dkrÎd  | _| _|| _d S )NZ_offs_xr   Z_offs_yrÁ   rZ   )r³   )rL   r¥   rÈ   rË   r°   rÉ   r±   Ú	transformÚscalerA   r+   r»   Z	drawImager¨   r§   r¤   r¦   )r   ÚdxZdyÚdZsxZsyZotransr´   r   r   r   r,     s.    ûz
Image.drawc                 C   sB   t  | |¡}|dd … dkr>t| jtƒr>d|d d… | jf }|S )Néüÿÿÿz>...z%s filename=%s>)r!   rc   rÒ   r§   r4   r`   r   r   r   rc     s    zImage.identity)NNrž   rŸ   rZ   r/   F)N)r   r   r   r    rn   ro   r   r¹   r®   r¿   rÏ   rÐ   rÕ   rB   r,   rc   r   r   r   r   r�   …  s   	  ÿ
,r�   c                   @   s   e Zd Zdd„ ZdS )ÚNullDrawc                 C   s   d S rf   r   r   r   r   r   r,   #  s    zNullDraw.drawN)r   r   r   r,   r   r   r   r   rÛ   "  s   rÛ   c                   @   s*   e Zd ZdZdZdZd	dd„Zdd„ ZdS )
ÚSpacerzdA spacer just takes up space and doesn't draw anything - it guarantees
       a gap between objects.rZ   Fc                 C   s    || _ |rd| _|| _|| _d S )Ng-Cëâ6?)r$   r%   Zspacebefore)r   r$   r%   ZisGluer   r   r   r   +  s
    zSpacer.__init__c                 C   s   d| j j| j| jf S )Nz
%s(%s, %s))r\   r   r$   r%   r   r   r   r   rs   2  s    zSpacer.__repr__N)F)r   r   r   r    rn   ro   r   rs   r   r   r   r   rÜ   &  s
   
rÜ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
UseUpSpacec                 C   s   d S rf   r   r   r   r   r   r   6  s    zUseUpSpace.__init__c                 C   s   d| j j S )Nz%s()©r\   r   r   r   r   r   rs   9  s    zUseUpSpace.__repr__c                 C   s   || _ || _||d fS )Nç:Œ0âŽyE>rH   rI   r   r   r   rB   <  s    zUseUpSpace.wrapN)r   r   r   r   rs   rB   r   r   r   r   rÝ   5  s   rÝ   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú	PageBreakrZ   Nc                 C   s
   || _ d S rf   )ÚnextTemplate)r   rá   r   r   r   r   E  s    zPageBreak.__init__c                 C   s    d| j j| jrt| jƒndf S )Nú%s(%s)rk   )r\   r   rá   rŒ   r   r   r   r   rs   H  s    zPageBreak.__repr__)N)r   r   r   Ú
locChangerr   rs   r   r   r   r   rà   A  s   
rà   c                   @   s   e Zd ZdS )ÚSlowPageBreakN©r   r   r   r   r   r   r   rä   K  s   rä   c                   @   s   e Zd ZdS )ÚPageBreakIfNotEmptyNrå   r   r   r   r   ræ   N  s   ræ   c                   @   s2   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„ZdS )ÚCondPageBreakrZ   c                 C   s
   || _ d S rf   ©r%   )r   r%   r   r   r   r   T  s    zCondPageBreak.__init__c                 C   s   d| j f S )NzCondPageBreak(%s)rè   r   r   r   r   rs   W  s    zCondPageBreak.__repr__c                 C   s:   || j k r6|  d¡}|s ||fS ddlm} | |¡ dS )Nrj   r   ©Ú
FrameBreak©r   r   )r%   rh   Úreportlab.platypus.doctemplaterê   Úadd_generated_content)r   rJ   rK   rm   rê   r   r   r   rB   Z  s    


zCondPageBreak.wrapNc                 C   s   t | ƒ dd|  ¡  ¡S )Nú)z
,frame=%s))rŒ   Úreplacer_   ©r   ra   r   r   r   rc   b  s    zCondPageBreak.identity)N)r   r   r   rã   r   rs   rB   rc   r   r   r   r   rç   Q  s
   rç   rZ   c                 C   sâ  t |ddƒ}t |ddƒ}|du r$t}|rTddlm}	m}
 |}t|ƒ }|_d|_|`�zxd}d}d}d}| dd… } | �r¤|  d¡}t	|dƒr¶ddlm}
 t
||
ƒrt||j|j 8 }qt| ||d	¡\}}|durÞ| ||f¡ |rì|	| |ƒ |tkrød
st|tk�rqtt||�rt||ƒn|ƒ}||7 }|�sd| ¡ }|�rZt |dd
ƒ�rL|}t|| dƒ}||7 }n|du�rx| ¡ |_d}| ¡ }t |dd
ƒ�r–|}|}||7 }qt|du�r´||_||| fW |�rÌ||_S n|�rÜ||_0 dS )ú;return max width, required height for a list of flowables Frd   Nrj   r   )Ú_addGeneratedContentÚIndenterrZ   ÚframeAction©ró   éÿÿÿFÚ_SPACETRANSFER)rL   r   rì   rò   ró   r   rj   Ú_generated_contentÚpopr2   rÒ   ÚleftÚrightrG   r~   r   r–   rÊ   rW   Ú_spaceBeforerU   Ú_spaceAfter)ÚFrJ   r+   Ú
mergeSpaceÚobjÚdimsÚ	fakeWidthZdoctZcframerò   ró   Z
doct_frameÚWrŽ   ÚpSÚatToprm   rE   rF   Úsr   r   r   Ú_listWrapOne  sj    





ý ÿr  c                    sJ   t | ttfƒs | dur| gpg } ddlm‰  ‡ fdd„| D ƒrFJ dƒ‚| S )z.if it isn't a list or tuple, wrap it in a listNr   ©ÚLCActionFlowablec                    s   g | ]}t |ˆ ƒr|‘qS r   )rÒ   ©r�   r5   r  r   r   r”   ž  r•   z$_flowableSublist.<locals>.<listcomp>z)LCActionFlowables not allowed in sublists)rÒ   ÚlistÚtuplerì   r	  )ÚVr   r  r   Ú_flowableSublistš  s     r  c                   @   s    e Zd Zddd„Zddd„ZdS )Ú_ContainerSpaceNc                 C   s2   |d u r| j n|D ]}t|dƒs| ¡   S qdS ©Nrô   r   )Ú_contentr2   rW   ©r   ÚcontentÚcr   r   r   rW   ¢  s    
z_ContainerSpace.getSpaceBeforec                 C   s6   t |d u r| jn|ƒD ]}t|dƒs| ¡   S qdS r  )Úreversedr  r2   rU   r  r   r   r   rU   ¨  s    
z_ContainerSpace.getSpaceAfter)N)N)r   r   r   rW   rU   r   r   r   r   r  ¡  s   
r  c                   @   s<   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zddd„ZdS )ÚKeepTogetherFNc                 C   sb   t tdƒs@ddlm} ddlm} ddlm} |t_|t_|| _|sN|  ¡ g}t|ƒ| _|| _	d S )NÚNullActionFlowabler   )r  ré   )ÚannotateException)
r2   r  rì   r  rê   r­   r  r  r  Ú
_maxHeight)r   Ú	flowablesÚ	maxHeightr  rê   r  r   r   r   r   ±  s    


zKeepTogether.__init__c                 C   sB   | j }ttt|ƒƒ}dd |¡ }| dd¡}d| jj|| jf S )Nr|   z
  z%s(%s,maxHeight=%s))	r  r  ÚmaprŒ   r�   rï   r\   r   r  )r   rm   ÚLr   r   r   rs   À  s
    zKeepTogether.__repr__c              
   C   s|   g }zt | j|| j|d�\}}W n,   |  d| jj| jjt| ƒf ¡ Y n0 || _|rd|d d pfd| _	||f| _
|dfS )N)r  z%
raised by class %s(%s)@0x%8.8x wrap
r   rZ   iÿÿÿ )r  r  r+   r  r\   r   r   r^   Ú_HÚ_H0Ú	_wrapInfo)r   rC   rD   r  r  rŽ   r   r   r   rB   Ç  s    &
zKeepTogether.wrapc                 C   s*  t | dd ƒ||fkr |  ||¡ | jd d … }t | dd ƒ }}|rZt |dd ƒ}|j}|j}| j|kot| j pt|| jk}| j|kp†|o†|}	|s’|	�r&d}
|  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   ri   Z_atTopFZ_peekNextFrameTr   )rL   rB   r  r¼   r½   r  r  r  rh   Ú
splitAtTopÚinsertrê   r  )r   rC   rD   rO   Úcfr  ZcAWZcAHÚC0ÚC1ZfbZpanfZnfZnAWZnAHr   r   r   rN   Ò  s,     

 zKeepTogether.splitc                 C   sJ   d| j jtt| ƒƒ|  ¡ d dd„ | jD ƒ¡f }|rB|d|… S |S d S )Nz<%s at %s%s> containing :%sr|   c                 S   s   g | ]}|  ¡ ‘qS r   )rc   ©r�   rm   r   r   r   r”   ì  r•   z)KeepTogether.identity.<locals>.<listcomp>r   )r\   r   r]   r^   r_   r�   r  )r   ra   Úmsgr   r   r   rc   ë  s    2zKeepTogether.identity)N)N)	r   r   r   r!  r   rs   rB   rN   rc   r   r   r   r   r  ®  s   
r  c                   @   s   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   r(  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚMacroz¬This 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                 C   s
   || _ d S rf   )Úcommand)r   r*  r   r   r   r   ý  s    zMacro.__init__c                 C   s   dt | jƒ S )Nz	Macro(%s))rŒ   r*  r   r   r   r   rs   ÿ  s    zMacro.__repr__c                 C   s   dS ©Nrë   r   rI   r   r   r   rB     s    z
Macro.wrapc                 C   s   t | jd d| jid� d S )Nr>   )ÚgÚl)r   r*  r+   r   r   r   r   r,     s    z
Macro.drawN©r   r   r   r    r   rs   rB   r,   r   r   r   r   r)  ù  s
   r)  c                  O   s   d S rf   r   )ÚargsÚkwdsr   r   r   Ú_nullCallable  s    r1  c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚCallerMacrozf
    like Macro, but with callable command(s)
    drawCallable(self)
    wrapCallable(self,aW,aH)
    Nc                 C   s   |pt | _|pt | _d S rf   )r1  Ú_drawCallableÚ_wrapCallable)r   ZdrawCallableZwrapCallabler   r   r   r     s    
zCallerMacro.__init__c                 C   s   d| j | jf S )NzCallerMacro(%r,%r))r3  r4  r   r   r   r   rs     s    zCallerMacro.__repr__c                 C   s   |   | ||¡ dS r+  )r4  ©r   rC   rD   r   r   r   rB     s    zCallerMacro.wrapc                 C   s   |   | ¡ d S rf   )r3  r   r   r   r   r,     s    zCallerMacro.draw)NNr.  r   r   r   r   r2  	  s
   
r2  c                   @   sB   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚParagraphAndImagez combine a Paragraph and an Imager£   rû   c                 C   s"   || _ || _|| _|| _|| _d S rf   )ÚPÚIÚxpadÚypadÚ_side)r   r7  r8  r9  r:  Úsider   r   r   r     s
    zParagraphAndImage.__init__c                 C   s   t | j ¡ | j ¡ ƒS rf   )r–   r7  rW   r8  r   r   r   r   rW   #  s    z ParagraphAndImage.getSpaceBeforec                 C   s   t | j ¡ | j ¡ ƒS rf   )r–   r7  rU   r8  r   r   r   r   rU   &  s    zParagraphAndImage.getSpaceAfterc                 C   sô   | j  ||¡\}}|| _|| _|| _| j}|j}| j}| j}|j	}	|j
}
||
 |j }|| | }||j }d|_t|| |	d  ƒ}| |g||g  |g ¡|_| jdkrÈ|| gd|  dg | _t|jjƒ|	 |_t||jƒ| _| j| jfS )Nr   r—   rú   rZ   )r8  rB   ÚwIÚhIr$   r7  rR   r9  r:  r�   rš   ÚrightIndentr™   r˜   Z
breakLinesÚblParar;  Ú_offsetsrx   rz   r%   r–   )r   rJ   rK   r=  r>  r7  rR   r9  r:  r�   rš   Zlater_widthsZintermediate_widthsZfirst_line_widthZnIWr   r   r   rB   )  s*    

zParagraphAndImage.wrapc           	      C   s–   | j | j| j| jf\}}}}|| |ks6t|jƒdkr:g S | ||¡}|sN|S |d  }| _ |d= |j}t| j jj	ƒ|j
 |_t||jƒ| _| g| S rº   )r7  r=  r>  r:  rx   ZfragsrN   rR   r@  rz   r�   r%   r–   )	r   rJ   rK   r7  r=  r>  r:  rO   rR   r   r   r   rN   A  s    zParagraphAndImage.splitc                 C   sž   | j }| jdkr^| j |d| j| j | j ¡ | j| j_z| j |dd¡ W | j`qš| j`0 n<| j || j	| j
 | j | j| j | j ¡ | j |dd¡ d S )Nrú   r   )r+   r;  r8  rA   r%   r>  r:  rA  r7  r$   r=  r9  r-   r   r   r   r,   M  s    

,zParagraphAndImage.drawN)r£   r£   rû   )
r   r   r   r    r   rW   rU   rB   rN   r,   r   r   r   r   r6    s   
r6  c                   @   s   e Zd Zdd„ ZdS )Ú
FailOnWrapc                 C   s   t dƒ‚d S )Nz3FailOnWrap flowable wrapped and failing as ordered!©r3   rI   r   r   r   rB   [  s    zFailOnWrap.wrapN)r   r   r   rB   r   r   r   r   rB  Z  s   rB  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
FailOnDrawc                 C   s   dS r+  r   rI   r   r   r   rB   _  s    zFailOnDraw.wrapc                 C   s   t dƒ‚d S )Nz2FailOnDraw flowable drawn, and failing as ordered!rC  r   r   r   r   r,   b  s    zFailOnDraw.drawN)r   r   r   rB   r,   r   r   r   r   rD  ^  s   rD  c                	   @   sD   e Zd ZdZdddedddddf	dd	„Zd
d„ Zdd„ Zdd„ ZdS )Ú
HRFlowablezLike the hr tagz80%rZ   Úroundr/   r#   Nc
           
      C   sD   t  | ¡ || _|| _|| _|| _|| _|| _|| _|| _	|	| _
d S rf   )r!   r   r$   Ú	lineWidthÚlineCaprV   rT   Úcolorr'   r(   Údash)
r   r$   Z	thicknessrH  rI  rV   rT   r'   r(   rJ  r   r   r   r   g  s    
zHRFlowable.__init__c                 C   s   d| j | jf S )NzHRFlowable(width=%s, height=%s)rH   r   r   r   r   rs   z  s    zHRFlowable.__repr__c                 C   s^   | j }t|tƒrD| ¡ }| d¡r<|t|d d… ƒ d }nt|ƒ}t||ƒ}|| _|| jfS )NrÃ   r   rÄ   )	r$   rÒ   r   ry   ÚendswithrË   rÊ   r¼   rG  )r   rJ   rK   rE   r   r   r   rB   }  s    
$
zHRFlowable.wrapc                 C   st   | j }| ¡  | | j¡ | ddddœ| j ¡  ¡ | | j¡ | j	rT| 
| j	¡ | dd| j| j¡ | ¡  d S )Nr   rZ   rÁ   )ZbuttrF  Úsquare)r+   r8   ÚsetLineWidthrG  Z
setLineCaprH  Úlowerr:   rI  rJ  ÚsetDashru   r¼   r%   r<   r-   r   r   r   r,   ‡  s    zHRFlowable.draw)	r   r   r   r    r   r   rs   rB   r,   r   r   r   r   rE  e  s   ù

rE  c                   @   s   e Zd Zdd„ ZdS )Ú_PTOInfoc                 C   s   t |ƒ| _t |ƒ| _d S rf   )r  ÚtrailerÚheader)r   rQ  rR  r   r   r   r   ’  s    
z_PTOInfo.__init__N©r   r   r   r   r   r   r   r   rP  ‘  s   rP  c                 C   s   t | dƒr|  ¡ S t| ƒS d S )Nr   )r2   r   )r   r   r   r   Ú	cdeepcopy–  s    
rT  c                   @   s    e Zd Zddd„Zd	dd„ZdS )
Ú
_Containerr   r—   Nc              	   C   s$  ddl m}m}	 |}
|}d}|du r*| j}||9 }|du r@| j}|  ||| ¡}|| j| 7 }|}t| ddƒ}|D �]ª}ts”t	||ƒr”| 
|j¡ qrt	||	ƒrÂ||j| 7 }||j|j | 8 }qr| ||d¡\}}|tk rêt|ddƒsêqr||k�r| ¡ }t|ddƒ�s|t|| dƒ7 }||8 }| ¡ }t|ddƒ�r>|}|}t|d	dƒ}|�rÚ|d
 j�rÚ|d
 }|j}|j}|j}||j| |  }|
|||j   }|| | }t||| ƒ}td|| ƒ}| ||||||¡ ||_|j||||| d� ||d
 u�rt|ddƒ�s||8 }|`qrdS )z"we simulate being added to a framer   )ÚActionFlowableró   Nri   rö   Ú	_ZEROSIZEr÷   FÚ	_frameBGsr   )r@   )rì   rV  ró   r$   r  r7   r%   rL   r   rÒ   Úapplyrd   rú   rû   rG   r   rW   r–   rU   ÚactiveÚstartr¼   Ú_leftPaddingÚrenderri   rA   )r   r+   r5   r?   r@   r×   r  rC   rV  ró   Úx0Úy0r  Zytrj   r  rE   rF   r  ZfbgÚbgÚfbglZfbgrZbgmÚfbwÚfbxÚfbhÚfbyr   r   r   rA   �  s`    


z_Container.drawOnc                 C   s.   g j }|p| jD ]}|t|ƒƒ q|j| _d S rf   )r~   r  rT  Ú__self__)r   r  ÚCr  r   r   r   ÚcopyContentÐ  s    z_Container.copyContent)r   r—   NN)N)r   r   r   rA   rh  r   r   r   r   rU  œ  s   
3rU  c                   @   s*   e Zd ZdZd	dd„Zdd„ Zd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                 C   sX   t ||ƒ}g  | _}t|ƒD ]6}t|tƒr8| |j¡ q| |¡ t|dƒs||_qd S )NÚ_ptoinfo)	rP  r  r  rÒ   ri  Úextendr~   r2   rj  )r   r  rQ  rR  r8  rg  Ú_r   r   r   r   Ý  s    



zPTOContainer.__init__c                 C   s$   t | j|| jƒ\| _| _| j| jfS rf   )r  r  r+   r$   r%   rI   r   r   r   rB   ç  s    zPTOContainer.wrapc           "      C   s&  ddl m} |dk rg S | j}| j}d } } } }	}
t|ƒ}i }d }}t|ƒD �]*}|| }|j}|| ¡ vr¾|j}|j	}t
||| jƒ\}}t|ƒr¨|d  ¡ }nd}||||f||< n|| \}}}}| ||d¡\}}t||ƒ�r|j|j }||j7 }||j7 }||8 }d}	d}
n(|�r>t| ¡ |	 dƒ}
||
7 }| ¡ }	|||	 7 }|t||	ƒ }|| |t k�rx �q‚|d7 }qT|||	 8 }|| | |
 d }|d| k�rÀ| |||¡}ng }t|ƒt|ƒ dk�rø|| | ƒg}|||ƒg}ng  }}|�sb|}|dk�r<||d   ¡ �r<|d8 }d|| _�q
|dk�rb|d  ¡ �rb|}d|d _tƒ g}t|ƒdk�rÂ|d |… |d d…  | | | } || |dd …  ||d d …  }!n6|�sÌg S |d |… | | | } || ||d …  }!| t|!dd	„ |jD ƒdd	„ |j	D ƒƒg }|S )
Nr   rõ   rö   rZ   gwJëÿï?çš™™™™™©?rß   c                 S   s   g | ]}t |ƒ‘qS r   )r   r
  r   r   r   r”   9  r•   z&PTOContainer.split.<locals>.<listcomp>)rì   ró   r+   r  rx   rˆ   rj  ÚkeysrQ  rR  r  rW   rG   rÒ   rú   rû   r–   rU   r   rP   ÚabsrS   rQ   rÝ   ri  )"r   rJ   rK   ró   r+   rg  r5   ÚirŽ   r  ÚhxÚnZI2WZdLeftZdRightr  r8  ÚTZHdrZtWZtHZtSBrl  rF   ÚdwZtHSrD   ZSSZR1IZR2IÚjrþ   ZR1ZR2r   r   r   rN   ë  s~    



$&*zPTOContainer.split)NN)r   r   r   r    r   rB   rN   r   r   r   r   ri  Ö  s   

ri  c                 C   s„   d| d  }d|  }d|d  }d| }|| ||  }|| }	| | }
| | }|| }|	| |
|  }|| ||  }||fS )Nr—   rÁ   r   )Ús0Ús1Zh0Zh1Za11Za12Za21Za22ZdetZb11Zb12Zb21Zb22r6   r¢   r   r   r   Ú_hmodel=  s    

rx  c           
      C   s–   |\}}t |ƒtkr||  S d| | }ddlm} |  | }|| | }|dk rVdS ||ƒ}|dkrr| | }n
| | }|| }	td| d|	 ƒS )z=solve the model v = a/s**2 + b/s for an s which gives us v==hr0   r   )ÚsqrtNr—   )ro  r   Úmathry  r–   )
rF   Úabr6   r¢   Útry  rm   rb   rw  Ús2r   r   r   Ú_qsolveM  s    

r~  c                   @   sH   e Zd Zg ddddddfdd„Zd	d
„ Zddd„Zdd„ Zddd„ZdS )ÚKeepInFramerZ   Úshrinkrk   r"   r#   Nc
           
      C   s‚   || _ || _|| _|| _|dv s4J d|  ¡ |f ƒ‚|dksPJ d|  ¡ |f ƒ‚|du r\t}|| _|phg | _|| _|| _	|	| _
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Úoverflowr€  Útruncatez%s invalid mode value %sr   z%s invalid maxHeight value %sN)ÚnameÚmaxWidthr  Úmoderc   r   Z
mergespacer  r(   r'   r  )
r   r…  r  r  rÿ   r†  r„  r'   r(   r  r   r   r   r   `  s    
zKeepInFrame.__init__c                 C   s   | j | j | j S rf   )r…  Ú_leftExtraIndentÚ_rightExtraIndentr   r   r   r   Ú_getAvailableWidthu  s    zKeepInFrame._getAvailableWidthc                 C   s~   d| j jtt| ƒƒ|  ¡ t| ddƒr4dt| ddƒ p6dt| ddƒrVdtt| ddƒƒ pXdt| ddƒrvd	tt| dƒƒ pxdf S )
Nz<%s at %s%s%s> size=%sx%sr„  rk   ú
 name="%s"r…  z maxWidth=%sr   r  z maxHeight=%s)r\   r   r]   r^   r_   rL   r   rð   r   r   r   rc   x  s
    " ýzKeepInFrame.identityc                    sB  ddl m} ˆj}ttˆjp||ƒƒ‰ttˆjp2||ƒƒ}ˆj‰ tˆj	ˆˆj
ˆ d�\}}|dkr˜|ˆt ksx||t kr˜d||ˆ d¡f }||ƒ‚�nž|ˆt krÈ||t krÈ|t ˆ_|t ˆ_�nn|dv rôtˆ|ƒt ˆ_t||ƒt ˆ_�nB‡ ‡‡fdd	„}	|}
|}d
}|ˆt k�rn|ˆ }|	|ƒ\}}||t k�rb|t ˆ_|t ˆ_|ˆ_||fS |}|}|}
|| }|	|ƒ\}}|t ˆ_|t ˆ_|ˆ_|td| |d ƒk �sÂ||t k�r6|}dD ]j}t|d
|  t||||ƒƒ}|	|ƒ\}}||t k�rÊ|ˆt k�rÊ|t ˆ_|t ˆ_|ˆ_ �q6�qÊˆjˆjfS )Nr   )ÚLayoutError©r  r�  zcontent %sx%s too large for %sé   )r‚  rƒ  c                    s<   t | ƒ} tˆj| ˆ ˆjˆ d�\}}||  }||  }||fS )NrŒ  )rË   r  r  r+   )r5   r  rŽ   ©r  r…  r   r   r   Úfunc�  s
    zKeepInFrame.wrap.<locals>.funcrZ   gffffffî?é
   )r   rÄ   rm  çš™™™™™¹?g333333Ã?)rì   r‹  r†  rË   rÊ   r…  r  r  r  r  r+   r   rc   r$   r%   Ú_scaler~  rx  )r   rJ   rK   r‹  r†  r  r  rŽ   Úidentr�  ZW0ÚH0rv  rw  ÚH1rm   r  r   rŽ  r   rB   ~  s\     




&


zKeepInFrame.wrapr   c           	      C   s¬   t | ddƒ}| jdk}|dkp |}|r†| ¡  |r^| ¡ }| ||| j| j¡ |j|dd� n(| ||¡ d }}| 	d| d| ¡ t
j| |||||d� |r¨| ¡  d S )Nr’  r—   rƒ  r   )Ústroke)r@   r×   )rL   r†  r8   Z	beginPathr;   r$   r%   ZclipPathr9   r×   rU  rA   r<   )	r   r+   r5   r?   r@   r×   rƒ  ÚssÚpr   r   r   rA   º  s    
zKeepInFrame.drawOn)N)r   )r   r   r   r   r‰  rc   rB   rA   r   r   r   r   r  _  s
   
<r  c                   @   s    e Zd Zddd„Zd	dd„ZdS )
Ú_FindSplitterMixinrZ   NTc                 C   s<  d}d}	d }
}d}|   |¡}t|ƒD �]ò\}}t|dƒrbddlm} t||ƒr&||j|j 8 }q&| ||d¡\}}|t	ks&|t	kr†q&t
||ƒ}|s¸| ¡ }|r®t
||
 dƒ}|	|7 }	n|durÊ| ¡ |_d}|	|ksÞ||krþ|||d|… ||d… f  S |	|7 }	|	|k�r
||	|  }|�r€ddlm} t||tfƒ�r€|jj}|t|t|ƒ ƒ t	 }||k �rp||7 }||| 7 }|}zt|ƒ |||¡}W n   d}Y n0 |�sÎ|||d|… ||d… f  S |||d|… |dd…  |dd… ||d d…  f  S | ¡ }
|	|
7 }	q&|du�r,|
|_||	|
 |g fS )rñ   r   rZ   rô   rõ   rö   N©Ú	Paragraph)Ú_getContentÚ	enumerater2   rì   ró   rÒ   rú   rû   rG   r   r–   rW   rü   Úreportlab.platypus.paragraphr›  rŠ   rR   r�   r˜   rË   rT  rP   rU   rý   )r   r+   rJ   rK   rÿ   r   r  ÚparaFixr  rŽ   r  ZsBr  rþ   rp  rm   ró   rE   rF   r  rD   r›  r�   ZnHrO   r   r   r   Ú
_findSplitÍ  sX    




 

 <
z_FindSplitterMixin._findSplitc                 C   sH   g }|d ur|n| j }|D ](}t|tƒr8| | ¡ ¡ q| |¡ q|S rf   )r  rÒ   ÚListFlowablerk  rœ  r~   )r   r  rþ   rg  rm   r   r   r   rœ  ÿ  s    
z_FindSplitterMixin._getContent)rZ   NNT)N)r   r   r   r   rœ  r   r   r   r   r™  Ì  s   
2r™  c                   @   sT   e Zd ZdZddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
ddd„ZdS )ÚImageAndFlowablesú(combine a list of flowables and an Imager   r£   rû   Nc	           	      C   s8   t |ƒ| _|| _|| _|| _|| _|| _|| _|| _d S rf   )	r  r  Ú_IÚ_irpadÚ_ilpadÚ_ibpadÚ_itpadr;  Ú	imageHref)	r   r8  rþ   ÚimageLeftPaddingÚimageRightPaddingÚimageTopPaddingÚimageBottomPaddingÚ	imageSider©  r   r   r   r     s    
zImageAndFlowables.__init__c                 C   s   t | ƒ}|  ¡  | ¡  |S rf   )r   Ú_resetrh  )r   r  r   r   r   r     s    zImageAndFlowables.deepcopyc                 C   s6   t | dƒr| j}nt | dƒr$| j}n| j}t | |¡S )NÚ_C1Ú_C0)r2   r°  r±  r  rU  rU   )r   rg  r   r   r   rU     s    

zImageAndFlowables.getSpaceAfterc                 C   s   t | j ¡ t | ¡ƒS rf   )r–   r¤  rW   rU  r   r   r   r   rW   %  s    z ImageAndFlowables.getSpaceBeforec                 C   s*   dD ] }zt | |ƒ W q   Y q0 qd S )N)Ú	_wrapArgsr±  r°  )Údelattrrg   r   r   r   r¯  (  s
    zImageAndFlowables._resetc                 C   sR  | j }| j}t| dƒrP| j||fkr@t|dd ƒd u r@| j| jfS |  ¡  | ¡  ||f| _| 	||¡ | 
||¡\}}|| _|| _| j}| j}| j}	| j}
|| | |  | _}|
| |	 }|tkrà|  |||¡\}}| _| _n|}d}||t k�rg | _| j| _t||ƒ }| _|| _| j�s*|| _nt| j||ƒ\}}|| | _| j| jfS )Nr²  rÎ   r   )r+   r¤  r2   r²  rL   r$   r%   r¯  rÐ   rB   rÏ   Ú_wIÚ_hIr¦  r¥  r§  r¨  Ú_iWr   r   r±  r°  r  r–   Ú_aHr  )r   rJ   rK   r+   r8  r=  r>  ZilpadZirpadZibpadZitpadZiWrD   r  r”  ÚW1r•  r   r   r   rB   /  s@    


zImageAndFlowables.wrapc           	   
   C   sà   t | dƒr>| j}| j||fks.t|dd ƒd ur>|  ¡  | ¡  |  ||¡\}}| j|kr\g S | j}|rª|d  	||| j ¡}|s†g }q®|d g}|dd … |dd …  }ng }t
| j| j| | j| j| j| j| j| jd�g| S )Nr²  rÎ   r   rZ   )rª  r«  r¬  r­  r®  r©  )r2   r¤  r²  rL   r¯  rÐ   rB   r·  r°  rN   r¢  r±  r¦  r¥  r¨  r§  r;  r©  )	r   rJ   rK   r8  r  rŽ   r%  rO   r°  r   r   r   rN   S  s4    

ùøzImageAndFlowables.splitc           	      C   sò   | j dkr&|| j }|| j | j }n|| j | j | j }|}| j |||| j | j | j	 ¡ | j
r |j| j
||| j | j | j	 || j || j fdd� | jrÀtj| |||| j| jd� | jrî| j\}}tj| |||| j | j|d� d S )Nrú   rZ   )Úrelative)r  rC   )r;  r¦  r¥  r´  r$   r¤  rA   r%   r¨  rµ  r©  ZlinkURLr±  rU  r¶  r°  r²  r·  )	r   r+   r5   r?   r@   ZIxZFxrC   rD   r   r   r   rA   o  s    

"8
zImageAndFlowables.drawOn)r   r£   r   r£   rû   N)r   )r   r   r   r    r   r   rU   rW   r¯  rB   rN   rA   r   r   r   r   r¢  	  s     ÿ
	$r¢  c                   @   s0   e Zd ZdZdZddd„Zdd„ Zdd	d
„ZdS )Ú_AbsRectrZ   Tr   Nc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S rf   )Ú_xÚ_yr¼   r½   Ú_strokeColorÚ
_fillColorÚ_strokeWidthÚ_strokeDashArray)	r   r5   r?   r$   r%   ÚstrokeWidthÚstrokeColorÚ	fillColorÚstrokeDashArrayr   r   r   r   „  s    z_AbsRect.__init__c                 C   s   dS r+  r   rI   r   r   r   rB   Ž  s    z_AbsRect.wrapc                 C   sª   | j tkr¦| jtkr¦| jo,| jd uo,| jdk}|s8| jr¦| ¡  |r\| | j¡ | | j¡ | jrn| 	| j¡ |j
| j| j| j | j|rŠdnd| jr–dndd� | ¡  d S ©Nr   rZ   )r–  Úfill)r¼   r   r½   r½  r¿  r¾  r8   r:   rM  rœ   r;   r»  r¼  r<   )r   r+   r5   r?   r@   Ústr   r   r   rA   ‘  s    
0z_AbsRect.drawOn)r   NNN)r   ©r   r   r   rW  r÷   r   rB   rA   r   r   r   r   rº  �  s
   

rº  c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
Ú	_ExtendBGrZ   Tc                 C   s   || _ || _|| _d S rf   )r¼  r½   Ú_bg)r   r?   r%   r`  rj   r   r   r   r   ¡  s    z_ExtendBG.__init__c                 C   s   dS r+  r   rI   r   r   r   rB   ¦  s    z_ExtendBG.wrapc           
      C   sX   | j }| j}| j}|j}|j| |j }|j| }| j}| ¡ }	| 	||||||¡ d S rf   )
rÊ  r¼  r½   rú   r¼   rû   Ú_x1r+   ÚgetPageNumberr]  )
r   rj   r`  re  rd  ra  rb  rc  r+   Úpnr   r   r   rô   ©  s    
z_ExtendBG.frameActionN)r   r   r   rW  r÷   r   rB   rô   r   r   r   r   rÉ  ž  s
   rÉ  c                   @   s0   e Zd ZdZdZddd„Zdd„ Zdd	d
„ZdS )Ú_AbsLinerZ   Tr   Nc                 C   s.   || _ || _|| _|| _|| _|| _|| _d S rf   )r»  r¼  rË  Ú_y1r½  r¿  rÀ  )r   r5   r?   Úx1Úy1rÁ  rÂ  rÄ  r   r   r   r   ·  s    z_AbsLine.__init__c                 C   s   dS r+  r   rI   r   r   r   rB   À  s    z_AbsLine.wrapc                 C   s^   | j rZ| jd urZ| jdkrZ| ¡  | | j ¡ | | j¡ | | j| j| j| j	¡ | 
¡  d S rº   )r½  r¿  r8   r:   rM  ru   r»  r¼  rË  rÏ  r<   ©r   r+   r5   r?   r@   r   r   r   rA   Ã  s    z_AbsLine.drawOn)r   NN)r   rÈ  r   r   r   r   rÎ  ´  s
   
	rÎ  c                   @   sD   e Zd ZdZddd	„Zdd
d„Zdd„ Zdd„ Zdd„ Zdd„ Z	dS )ÚBalancedColumnsr£  rÁ   r·   r   Nrk   r‘  c                 C   s¦   |pdt | ƒ | _|dk r.td||  ¡ f ƒ‚t|ƒ| _|| _|| _|| _|| _	|	| _
|
| _|| _|| _|t | _|| _|| _|| _|| _|| _|| _|| _|| _d S )NzBalancedColumns-%drÁ   z'nCols should be at least 2 not %r in %s)r^   r„  r3   Z
identitityr  r  Ú_nColsrT   r\  Ú_innerPaddingÚ_rightPaddingÚ_topPaddingÚ_bottomPaddingrV   r   Ú_neededÚshowBoundaryÚendSlackÚ_boxStrokeColorÚ_boxStrokeWidthÚ_boxFillColorÚ
_boxMarginÚ_vLinesStrokeColorÚ_vLinesStrokeWidth)r   rþ   ÚnColsÚneededrV   rT   rÚ  ÚleftPaddingÚinnerPaddingÚrightPaddingÚ
topPaddingÚbottomPaddingr„  rÛ  ÚboxStrokeColorÚboxStrokeWidthÚboxFillColorÚ	boxMarginÚvLinesStrokeColorÚvLinesStrokeWidthr   r   r   r   Í  s*    


zBalancedColumns.__init__c              
   C   s@   d| j j| jtt| ƒƒ|  ¡ t| ddƒr8dt| ddƒ p:df S )Nz<%s nCols=%r at %s%s%s>r„  rk   rŠ  )r\   r   rÔ  r]   r^   r_   rL   rð   r   r   r   rc   í  s    ÿzBalancedColumns.identityc                 C   s   | j S rf   )rT   r   r   r   r   rU   ò  s    zBalancedColumns.getSpaceAfterc                 C   s   | j S rf   )rV   r   r   r   r   rW   õ  s    zBalancedColumns.getSpaceBeforec           7         sV  g }ˆj ‰ddlm}m}m} ddlm‰  ddlm} ˆjd u rFˆjnˆj‰
ˆj	d u r\ˆj	nˆj	‰ˆj
d u rrˆj
nˆj
‰ˆjd u rˆˆjnˆj‰ˆj}ˆj}	ˆjd u r®tˆ
ˆƒnˆj}
|
d ‰	ˆj‰ˆj‰||
ˆd   ˆ
 ˆ tˆƒ ‰|}|ˆˆ 8 }ˆjˆˆˆ| dd�\}}}}|�sHtd	ˆ ¡ ||ˆˆ| d
d„ ˆjD ƒf ƒ‚i ‰d'‡‡‡‡‡fdd„	‰d}|�rt|}�ndd l}‡‡fdd„}d| d¡d d f‡fdd„	}tt|tˆƒ ˆjd  ƒ|ƒ}ˆ|ƒ ˆ| d �s||||ƒ}|�r|\}}}}|}d}n
|}ˆj}nT|tˆƒ }ˆ|ƒ ˆ| d �sh||||ƒ}|�r^|\}}}}|}d}n
|}ˆj}|�rvJ dƒ‚ˆ||ƒ\}}}}ˆ ¡  |d g k�rÈ|d g k�rÈ|�rÈ||d g|d  }}ˆj}ˆj}ˆj }|ˆ ˆ | }|ˆ ˆ ‰|ˆ ‰|tˆƒ ‰|�s|	�r0|| |	 ƒ}|||	ƒ}nd  }}ˆj!d u�rJˆj!nˆj!‰|| ˆj ‰‡ ‡‡‡‡‡	‡
‡‡‡‡‡‡‡fdd„t"ˆƒD ƒ}ˆ #d¡‰ˆd u �r²|dˆ ¡  ƒ‚t$ˆdd ƒ} | �rÌ| d nd  }!}"G ‡‡fdd„d|ƒ}#|"�rt%ˆˆ|"ˆƒ}!| &|!¡ ˆj'}$| &|#g ||d ƒ¡ |�r4| &|¡ ˆj(�rPˆj)�rPˆj)dk�pTˆj*}%ˆj+�onˆj,�onˆj,dk}&|%�s||&�rˆj-}'|'�sŒd}'t.|'ƒdk�r°|'d  }( }) }*}+n”t.|'ƒdk�rØ|'d  }(}+|'d  })}*nlt.|'ƒdk�r|'d }(|'d  })}*|'d }+n@t.|'ƒdk�r4|'d }(|'d }*|'d }+|'d })ntd t/|'ƒ ƒ‚ˆ|) },|d j|d j  |* }-ˆ|+ }.ˆ|( |+ }/|.|/ }0|%�r¦t0|,|.|-|, |/ˆj*ˆj(ˆj)d!�}1|&�rg }2t"dˆƒD ]N}3d||3 j||3d  j ||3d  j   }4|2 &t1|4|.|4|0ˆj,ˆj+d"�¡ �qºn|}0ˆ}.|%�r$| &|1¡ |&�r4| 2|2¡ ˆ 3¡ }5t"ˆƒD ]T}3||3 }6|6�r~t4|||6d#d$�}6t|5|6 3¡ ƒ}5| &|6¡ |3ˆd k�rD| &|¡ �qD| &|#| |$ˆƒ¡ |!�rÞ|�r¼d}5tˆ|.ƒ|5 |!_5t||0ƒ|!j5 |!_6|�rî| &|¡ |�rN| &t7|ˆˆj8ˆj9ˆjˆj!ˆjˆjˆj	ˆj
ˆjˆj:d% ˆjˆj(ˆj)ˆj*ˆj-ˆj+ˆj,d&�¡ ˆ|fS )(Nr   )r‹  rV  ró   ©ÚFrameré   r0   rZ   F)rŸ  zB%s cannot make initial split aW=%r aH=%r ie cw=%r ah=%r
content=%sc                 S   s   g | ]}|j j‘qS r   rÞ   r&  r   r   r   r”     r•   z6BalancedColumns._generated_content.<locals>.<listcomp>c                    sü   | ˆ vrðg }d}d}d }|r$ˆd nd}t ˆƒD ]”}ˆjˆˆ| |dd�\}}	}
}t||ƒ}t||	ƒ}| |
¡ ||krÀˆjˆˆd|  |dd�\}}}}|d| |  krÀ| |¡ | d }g } qÆ|}q0| dt|g kƒ  |g k||||ffˆ | < ˆ |  d S )	Nr   rÁ   r   F)r  rŸ  rZ   g�íµ ÷Æ°>i † )rˆ   r   r–   r~   r˜   )ÚahrÛ  r  rE   rF   ZcnZicheckrp  ZwiÚhiÚc0Úc1ZwcZhcZcc0Zcc1)Ú_fresr+   Úcwrâ  r   r   r   Ú	splitFunc  s*    


 
*z5BalancedColumns._generated_content.<locals>.splitFuncc                    s   ˆ| ƒ ˆ |  d S rº   r   )rñ  )rõ  r÷  r   r   r�  1  s    z0BalancedColumns._generated_content.<locals>.funcé   rÁ   c                    sš   ||| |  }||| |  }t || ƒ|krl| |ƒ| |ƒk rF|}n|}||| |  }||| |  }q dd„ ˆ  ¡ D ƒ}|r–| ¡  |d d S d S )Nc                 S   s    g | ]\}}}|r|||f‘qS r   r   )r�   r5   ÚtfÚvr   r   r   r”   B  r•   zCBalancedColumns._generated_content.<locals>.gss.<locals>.<listcomp>r   rÁ   )ro  ÚvaluesÚsort)rm   r6   r¢   ZtolZgrr  rÙ   rþ   )rõ  r   r   Úgss5  s    z/BalancedColumns._generated_content.<locals>.gssgš™™™™™Ù?zunexpected non-empty C2c                    sZ   g | ]R}ˆ ˆ|ˆ  ˆˆˆ|s"ˆnˆˆ|ˆd  kr6ˆ	nˆˆdˆ
j |f ˆˆjˆjd�‘qS )rZ   z%s-%d)rä  rè  ræ  rç  r^   rÚ  r   Ú_debug)r„  Z_oASpacerþ  ©r�   rp  )rð  ÚbpadrØ   Úfhrj   ÚhgapÚlpadrâ  ÚobxÚrpadr   rÚ  ÚtpadÚy2r   r   r”   u  s   úúÚpageTemplatez&%s used in non-doctemplate environmentrX  r   c                       s0   e Zd ZdZg g dfdd„Z” f‡fdd„	ZdS )z3BalancedColumns._generated_content.<locals>.TActionz?a special Action flowable that sets stuff on the doc template TNc                 S   s    t  | ¡ || _|| _|| _d S rf   )r!   r   Úbgsrþ   rm   )r   r	  rþ   rm   r   r   r   r   ˆ  s    
z<BalancedColumns._generated_content.<locals>.TAction.__init__c                    s*   | j |_| jˆ _| | jj¡ | jˆ _d S rf   )rþ   Úframesr	  rX  Zhandle_currentFramerm   r^   )r   Údocrs  )rj   r   r   rY  Ž  s    z9BalancedColumns._generated_content.<locals>.TAction.apply)r   r   r   r    r   rY  r   )rs  rj   r   r   ÚTAction†  s   r  )r   r   r   r   r£   é   zInvalid value %s for boxMargin)rÃ  rÂ  rÁ  )rÁ  rÂ  r€  )r†  z-1)râ  rã  rV   rT   rÚ  rä  rå  ræ  rç  rè  r„  rÛ  ré  rê  rë  rì  rí  rî  )r   );ri   rì   r‹  rV  ró   Úreportlab.platypus.framesrð  rê   r\  rÖ  r×  rØ  r‡  rˆ  rÕ  r–   r+   rÔ  rË   r   r3   rc   r  rz  ry  rÊ   r˜   rT   rÛ  ÚclearrË  rÏ  r¼   rÚ  rˆ   rh   rL   rÉ  r~   r
  rÜ  rÝ  rÞ  rà  rá  rß  rx   rŒ   rº  rÎ  rk  rU   r  r¼  r½   rÓ  rÙ  rV   r„  )7r   rC   rD   ÚGr‹  rV  ró   rê   ZleftExtraIndentZrightExtraIndentÚgapZaH0r  r”  r±  ÚC2rÛ  rŽ   rz  r�  rý  r•  r¸  rg  r%  rÐ  rÑ  ÚfwZftopZ	indenter0Z	indenter1rþ   ZBGsZxbgr`  r  Ú	oldFramesZdoBoxZdoVLinesZobmZobmtZobmlZobmrZobmbZobx1Zobx2Zoby2ZobhZoby1ÚboxZvLinesrp  ZvlxÚsaZCir   )rð  rs  rõ  r   r+   rö  rØ   r  rj   r  r  râ  r  r  r   rÚ  r÷  r  r  r   rø   ø  sD    þÿ  "$ú



"


ý*$

òÿz"BalancedColumns._generated_contentc              
   C   sŽ   t | dd ƒ}|| j| j t k r0tƒ | g}d}nB|sZddlm} |dd|dddddd�| _|  ||¡\}}|sr| `|r€|j	|Ž  dt
||ƒfS )Nri   r   rï  iÿÿÿ)rä  ræ  rç  rè  )rL   rV   rÙ  r   rà   r  rð  ri   rø   rí   rÊ   )r   rC   rD   Z
self_framer  r•  rð  r   r   r   rB   ì  s    
ÿzBalancedColumns.wrap)rÁ   r·   r   r   NNNNNNrk   r‘  Nr   NNNN)N)
r   r   r   r    r   rc   rU   rW   rø   rB   r   r   r   r   rÓ  Ë  s"            ø
 
 urÓ  c                   @   s8   e Zd ZdZdZdZdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚAnchorFlowablezcreate a bookmark in the pdfrZ   Tc                 C   s   t  | dd¡ || _d S rº   )rÜ   r   Ú_name)r   r„  r   r   r   r     s    zAnchorFlowable.__init__c                 C   s   d| j j| jf S )Nrâ   )r\   r   r  r   r   r   r   rs     s    zAnchorFlowable.__repr__c                 C   s   dS r+  r   r5  r   r   r   rB     s    zAnchorFlowable.wrapc                 C   s   | j  | jdd¡ d S rº   )r+   ZbookmarkHorizontalr  r   r   r   r   r,     s    zAnchorFlowable.drawN)
r   r   r   r    rW  r÷   r   rs   rB   r,   r   r   r   r   r     s   r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_FBGBagc                 C   sD   t |ƒ}t| jtƒr|| jv s(|| jkoBt |ƒ| jkoB| j| ¡ kS rf   )r^   rÒ   Úfidr  ÚcidrÍ  rÌ  )r   rj   r+   r  r   r   r   Úmatches  s     ÿÿz_FBGBag.matchesc                 C   s&   |j | j  ¡ | _tt| jdd… ƒS )NrZ   rø  )Ú_codeÚcodePosrN   Ú_instr  rË   r-   r   r   r   ÚgetDims  s    z_FBGBag.getDimsc                 C   s2   t ||||ƒg| jdd…< d | j¡|j| j< d S )NrZ   rø  ú )r   r  r�   r  r  )r   r+   r5   r?   rE   rF   r   r   r   ÚsetDims  s    z_FBGBag.setDimsc                 C   s<  t |ƒtk�r8t |ƒtk�r8| ¡ }| jt|ƒkrx| jt|ƒkrx| j|krx|  |¡\}}	}
}|  ||||
||	 | ¡ nÀ| 	¡  | j
}|r”| |¡ | j}|d u sª|dk r®d n| j}|rà| |¡ | |¡ | j}|rà| |¡ t|ƒ| _t|ƒ| _|| _t|jƒ| _|j|||||�rdnd|�r(dndd� | ¡  d S rÅ  )ro  r   rÌ  r  r^   r  rÍ  r   r"  r8   rÃ  rœ   rÁ  rÂ  r:   rM  rÄ  rO  rx   r  r  r;   r<   )r   r+   rj   rc  re  rb  rd  rÍ  ZoxZoyZowZohZfbgcÚswÚscÚdar   r   r   r]    s.    &





*z_FBGBag.renderN)r   r   r   r  r   r"  r]  r   r   r   r   r    s   r  c                   @   s.   e Zd ZdZdZddd„Zdd	„ Zd
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.
    rZ   Nr   Tc           	      C   sT   t  | dd¡ || _|rPddlm} ||ƒ| _||ƒ| _|| _|| _|| _	|| _
d S )Nr   )Ú_evalMeasurement)rÜ   r   r[  rì   r'  rú   rû   rI  rÁ  rÂ  rÄ  )	r   rI  rú   rû   r[  rÁ  rÂ  rÄ  r'  r   r   r   r   @  s    

zFrameBG.__init__c                    s(   dˆ j jd ‡ fdd„d ¡ D ƒ¡f S )Nrâ   z, c                    s    g | ]}d |t ˆ |dƒf ‘qS )z%s=%rNre   rÿ  r   r   r   r”   M  r•   z$FrameBG.__repr__.<locals>.<listcomp>zstart color left right)r\   r   r�   rN   r   r   r   r   rs   L  s    zFrameBG.__repr__c                 C   s”   t | dd ƒ}|d u rd S | jr€| j}| j}|d u r6dn|}|j t| j| j| j	| jdv r^| jnd | j| j| j
dddd dd�¡ n|jr�|j ¡  d S )Nri   r   )rj   zframe-permanentr   T)rú   rû   rÃ  r[  rÂ  rÁ  rÄ  r  r  rÍ  r  rZ  )rL   r[  rÂ  rÁ  rX  r~   r  rú   rû   rI  rÄ  rù   )r   rj   r$  r#  r   r   r   r,   O  s.    õÿzFrameBG.draw)Nr   r   TNNN)r   r   r   r    rW  r   rs   r,   r   r   r   r   r&  9  s
   
r&  c                   @   s.   e Zd ZdZdZg dddfdd„Zd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.
    rZ   r�  r·   Tc                 C   s&   || _ |pg | _|| _|| _|| _d S rf   )rá   Ú
nextFramesr  ÚrequiredÚadjustHeight)r   rá   r)  r  r*  r+  r   r   r   r   n  s
    
zFrameSplitter.__init__c                    s”  ˆj }ddlm}m}m} |ˆjƒg}|ˆjˆj t k rJ| 	t
ƒ ¡ �n<ˆ d¡}|d u rl|dˆ ¡  ƒ‚‡fdd„|D ƒ}	|	s˜|dˆ ¡ ˆjf ƒ‚|	d }	‡fdd„|	jD ƒ}
d	d„ |
D ƒ‰ ‡ fd
d„ˆjD ƒ‰ ˆ �r|dˆ ¡ ˆ |	j|	dd„ |	jD ƒf ƒ‚ˆ d¡}	|	|	j|	jfdd„}||	_|ˆj }t|
ƒD ]0\}}t|ƒ}ˆj�rX||_| ¡  ||
|< �q:|
|	_| 	||
d jƒ¡ |j|Ž  dS )Nr   )ÚNextPageTemplateÚCurrentFrameFlowabler‹  ZpageTemplatesz(%s called in non-doctemplate environmentc                    s   g | ]}|j ˆ jkr|‘qS r   )r^   rá   )r�   r|  r   r   r   r”   �  r•   z&FrameSplitter.wrap.<locals>.<listcomp>z%s.nextTemplate=%s not foundc                    s   g | ]}|j ˆ jv r|‘qS r   )r^   r)  r&  r   r   r   r”   …  r•   c                 S   s   g | ]
}|j ‘qS r   ©r^   r&  r   r   r   r”   †  r•   c                    s   g | ]}|ˆ vr|‘qS r   r   r&  )ÚNr   r   r”   ‡  r•   z;%s frames=%r not found in pageTemplate(%s)
%r has frames %rc                 S   s   g | ]
}|j ‘qS r   r.  r&  r   r   r   r”   ‰  r•   r  c                 S   s   ||_ ||_|| |ƒ d S rf   )r
  ÚonPage)r+   r  rs  r0  r  r   r   r   Úunwrap‹  s    z"FrameSplitter.wrap.<locals>.unwraprë   )ri   rì   r,  r-  r‹  rá   r  r*  r   r~   rà   rh   rc   r
  r)  r^   r0  r�  r   r+  r%   r¯  rí   )r   rC   rD   rj   r,  r-  r‹  r  Ú	templatesrs  rþ   r1  rF   rp  rm   r   )r/  r   r   rB   u  s<    
(


zFrameSplitter.wrapN)r   r   r   r    rW  r   rB   r   r   r   r   r(  g  s   r(  )Ú_type2formatteru   â€¢u   â—�u   â– u   â—‹u   â—†u   â�–u   âž¤u   â�‡u   â��u   â˜…)
Ú
bulletcharZcirclerL  ZdiscZdiamondZ	diamondwxZ
rarrowheadZsparkleZ	squarelrsZ	blackstarÚ1c                 C   s`   |dkrt  | | ¡}nt| t| ƒƒ}|r\t|tƒr>|| }nt|ƒrP||ƒ}ntd| ƒ‚|S )NÚbulletz!unexpected BulletDrawer format %r)Ú_bulletNamesrÇ   r3  r˜   rÒ   r   Úcallabler3   )ÚvalueÚtypeÚformatr  r   r   r   Ú_bulletFormatª  s    


r<  c                
   @   s    e Zd Zdd
d„Zddd„Zd	S )ÚBulletDrawerÚ0rú   r5  ÚblackÚ	Helveticart   r   ÚltrNc                 C   s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S rf   )
r9  Ú_bulletAlignÚ_bulletTypeÚ_bulletColorÚ_bulletFontNameÚ_bulletFontSizeÚ_bulletOffsetYÚ_bulletDedentÚ
_bulletDirr<  )r   r9  ÚbulletAlignÚ
bulletTypeÚbulletColorÚbulletFontNameÚbulletFontSizeÚbulletOffsetYÚbulletDedentÚ	bulletDirÚbulletFormatr   r   r   r   º  s    zBulletDrawer.__init__c           	      C   s.  | j }|sd S | ¡  | ||¡ |j| j | j }| jdkrR|j|j | j	 }n|j
| j	 }| | j| j¡ | | j¡ | j}t|| j| jƒ}|dkr¨| |||¡ nz|dkrÀ| |||¡ nb|dv rØ| |||¡ nJ| d¡sî| d¡�r|dd …  ¡ �pd}| ||||¡ ntd	| ƒ‚| ¡  d S )
NZrtlrú   rû   )ÚcenterZcentreÚnumericÚdecimalé   Ú.zInvalid bulletAlign: %r)r9  r8   r9   r%   rF  rG  rI  r$   Ú_rightIndentrH  Ú_leftIndentrv   rE  rœ   rD  rB  r<  rC  Z
drawStringZdrawRightStringrw   Ú
startswithry   ZdrawAlignedStringr3   r<   )	r   Zindenterr+   r5   r?   r@   r9  rJ  Zpcr   r   r   rA   Ñ  s.    
zBulletDrawer.drawOn)
r>  rú   r5  r?  r@  rt   r   r   rA  N)r   )r   r   r   r   rA   r   r   r   r   r=  ¹  s             ö
r=  c                 C   s    t || j| j ƒ}t|| j| jƒS rf   )r<  rC  r   rE  rF  )r¢   r9  r   r   r   Ú_computeBulletWidthî  s    r[  c                   @   sZ   e Zd Zd ¡ Zddd„Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
ddd„ZdS )Ú
DDIndenterz/_flowable _leftIndent _rightIndent width heightr   c                 C   s"   || _ || _|| _d | _d | _d S rf   )Ú	_flowablerY  rX  r$   r%   )r   Úflowablerš   r?  r   r   r   r   ô  s
    zDDIndenter.__init__c                    s,   ˆ j  |ˆ j ˆ j |¡}‡ fdd„|D ƒS )Nc                    s   g | ]}t |ˆ jˆ jd �‘qS ))rš   r?  )r\  rY  rX  ©r�   r  r   r   r   r”   ý  s
   ýþz$DDIndenter.split.<locals>.<listcomp>©r]  rN   rY  rX  ©r   rC   rD   rO   r   r   r   rN   û  s    
üzDDIndenter.splitc              	   C   s.   | j  ||| j |td|| j | j ƒ¡ d S rº   )r]  rA   rY  r–   rX  rÒ  r   r   r   rA     s    zDDIndenter.drawOnc                 C   s@   | j  || j | j |¡\}}|| j | j | _|| _| j|fS rf   )r]  rB   rY  rX  r$   r%   ©r   rC   rD   rE   rF   r   r   r   rB     s    zDDIndenter.wrapc              	   C   sX   || j v rLz| j| W S  tyJ   |dvrFt| ›d|› d| j› �ƒ‚Y n0 t| j|ƒS )N©rV   rT   z has no attribute z dict=)Ú_IndenterAttrsrÓ   ÚKeyErrorrÔ   rL   r]  rg   r   r   r   rÕ     s    
 zDDIndenter.__getattr__c                 C   s(   || j v r|| j|< nt| j||ƒ d S rf   )rd  rÓ   Úsetattrr]  ©r   r6   rú  r   r   r   Ú__setattr__  s    
zDDIndenter.__setattr__c                 C   s$   || j v r| j|= nt| j|ƒ d S rf   )rd  rÓ   r³  r]  rg   r   r   r   Ú__delattr__  s    

zDDIndenter.__delattr__Nc                 C   s   d| j j| j |¡f S )Nz%s containing %s)r\   r   r]  rc   rð   r   r   r   rc   "  s    zDDIndenter.identity)r   r   )r   )N)r   r   r   rN   rd  r   rA   rB   rÕ   rh  ri  rc   r   r   r   r   r\  ò  s   
	
	r\  c                   @   s0   e Zd Zd ¡ Zd
dd„Zdd„ Zddd	„ZdS )Ú
LIIndenterzN_flowable _bullet _leftIndent _rightIndent width height spaceBefore spaceAfterr   Nc                 C   sD   || _ || _|| _|| _d | _d | _|d ur2|| _|d ur@|| _d S rf   )r]  Ú_bulletrY  rX  r$   r%   rV   rT   )r   r^  rš   r?  r6  rV   rT   r   r   r   r   '  s    zLIIndenter.__init__c                    s.   ˆj  |ˆj ˆj |¡‰ ‡ ‡fdd„ˆ D ƒS )Nc              	      s2   g | ]*}t |ˆjˆj|ˆ d  u r&ˆjp(dd�‘qS )r   N)rš   r?  r6  )rj  rY  rX  rk  r_  ©rO   r   r   r   r”   5  s   üýz$LIIndenter.split.<locals>.<listcomp>r`  r5  r   rl  r   rN   3  s    ûzLIIndenter.splitc              	   C   sH   | j r| j  | |||d¡ | j ||| j |td|| j | j ƒ¡ d S rº   )rk  rA   r]  rY  r–   rX  rÒ  r   r   r   rA   =  s    zLIIndenter.drawOn)r   r   NNN)r   )r   r   r   rN   rd  r   rA   r   r   r   r   rj  %  s   

rj  )Ú	ListStylec                   @   s   e Zd Zddd„ZdS )ÚListItemNc                 K   s¸   t |ttfƒs|f}|| _i  }| _|rLt |tƒsFtd| jj|f ƒ‚|| _	tj
D ]2}||v rj| |¡}n|rRt||ƒ}nqR|||< qRdD ](}| |t||d ƒ¡}|d urŠ|||< qŠd S )Nz&%s style argument (%r) not a ListStyle)r9  rV   rT   )rÒ   r  r  Ú
_flowablesÚ_paramsrm  r3   r\   r   Ú_styleÚdefaultsrÇ   rL   )r   r  rR   r0  ÚparamsÚkrú  r   r   r   r   E  s&    



zListItem.__init__)NrS  r   r   r   r   rn  D  s    þrn  c                   @   s   e Zd Zdd„ ZdS )Ú	_LIParamsc                 C   s   || _ || _|| _|| _d S rf   )r^  rs  r9  Úfirst)r   r^  rs  r9  rv  r   r   r   r   o  s    z_LIParams.__init__NrS  r   r   r   r   ru  n  s   ru  c                   @   sZ   e Zd ZdZddd„Zedd„ ƒZdd„ Zd	d
„ Zdd„ Z	ddd„Z
ddd„Zdd„ ZdS )r¡  Ú1aAiINc                 K   sj  || _ |r*t|tƒs$td| jj ƒ‚|| _tj ¡ D ](\}}t	| d| | 
|t|||ƒ¡ƒ q4dD ],}| 
|t||d ƒ¡}|d urbt	| ||ƒ qbd}|d u rÎt| dd ƒ}|d u rÎ| jdkrÄd}d}n
| j}d}| jdk�r0|�r|D ] }|| jvrätd	|| jf ƒ‚qän(| jD ] }|| jv�rtd
| j ƒ‚�q|| _|�pHt|ttfƒ| _d | _d | _| dd ¡| _d S )Nz!%s style argument not a ListStylerl  rc  FÚ_startr6  r4  Tz!invalid start=%r or bullettype=%rzinvalid bullettype=%rZcaption)ro  rÒ   rm  r3   r\   r   rR   rr  Úitemsrf  rÇ   rL   rC  Ú_numberStylesrx  r  r  Ú_autoÚ_list_contentÚ_dimsrù   Ú_caption)r   r  r[  rR   r0  rt  rú  rŸ   r   r   r   r   w  sB    
"


zListFlowable.__init__c                 C   s   | j d u r|  ¡ | _ | `| j S rf   )r|  rœ  ro  r   r   r   r   r  ²  s    

zListFlowable._contentc                 C   s4   | j |kr(t| j|| jƒ\| _| _|| _ | j| jfS rf   )r}  r  r  r+   r$   r%   r5  r   r   r   rB   ¹  s    
zListFlowable.wrapc                 C   s   | j S rf   )r  r5  r   r   r   rN   ¿  s    zListFlowable.splitc           
   	   c   s^  | j D �]P}t|ttfƒrL|rJt|ƒD ]"\}}|dko@t|tƒ |fV  q&qt|tƒ�rF|j}|s˜t|j ƒD ](\}}t|tƒr†tdƒ‚|dk|fV  qln¬| 	¡ }| 
dd ¡}| 
dd ¡}| 
dd ¡}t|j ƒd }t|j ƒD ]f\}}| 	¡ }	|�s|d u�r||	d< ||k�r |d u�r ||	d< |�r*d }dt||	||dkƒfV  qÜqt|tƒ |fV  qd S )Nr   z"LIIndenter not allowed in ListItemr9  rV   rT   rZ   )ro  rÒ   r  r  r�  rj  rn  rp  r3   r   rù   rx   ru  )
r   rm   rp  Úzrs  r9  rV   rT   rr  r7  r   r   r   Ú_flowablesIterÂ  s4    

zListFlowable._flowablesIterc                 C   sb   |rL|  d| j¡}|  d| j¡}|  dd ¡}|  dd ¡}t||||||d�S t|| j| j|ƒS d S )Nrš   r?  rV   rT   rc  )rÇ   rY  rX  rj  )r   r^  r6  rs  rš   r?  rV   rT   r   r   r   Ú_makeLIIndenterá  s    zListFlowable._makeLIIndenterc                    sr   ˆ d u r‡fdd„}nt ˆ dd ƒ‰‡ ‡‡fdd„}t||dƒ|dƒ|dƒ|dƒ|d	ƒ|d
ƒ|dƒ|dƒ|dƒd�
S )Nc                    s   t ˆ d|  ƒS ©Nrl  re   ©r6   r   r   r   Úgetpí  s    z&ListFlowable._makeBullet.<locals>.getprR   c                    s6   | ˆ v rˆ |  S ˆr(| ˆj v r(tˆ| ƒS tˆd|  ƒS r‚  )rÓ   rL   rƒ  ©rs  r   rR   r   r   r„  ñ  s    rJ  rK  rL  rM  rN  rO  ZcalcBulletDedentrQ  rR  )
r9  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  )rL   r=  )r   r9  rs  r„  r   r…  r   Ú_makeBulletë  s     özListFlowable._makeBulletc                 C   s  | j }| j}t|ttfƒr(|}|d }n|g}|d }t|dv ƒ}|rdzt|ƒ}W n   d}Y n0 | j}|dk�r–| j}| j}|dkrš|dkrš| j	}� nü|dkrª| j
}nì|}	d}
|  ¡ D ]†\}}|rät|
t| |	ƒƒ}
|râ|	|7 }	qºt|tƒrº|j}|�r$|j|k�r4t|
t||jƒƒ}
t|jƒ}	nt|
t| |	ƒƒ}
|rº|	|7 }	qº|dk�rr|dk�rb| j	|
 }n| j	|
d  }n$|dk�rˆ| j
|
 }n| j
|
d  }|| _g }|j}d}|  ¡ D �]\}}t|tƒ�r<|j}t|ttfƒ�ræ|d }||v �r<|j�r8| |¡d }||d … |d |…  |_|jd }|�r<||_ n|}i }|�sl|d7 }t| d	d ƒ}|d u�rl||d	< |�rž|| j||  |¡|d
�ƒ |�r¾||7 }�q²t|tƒ�r0|j}|�rà|j|k�rÔtd|j|f ƒ‚t|jƒ}n| j|t|dd ƒd�|_|�rt|j d	d¡|ƒ|jd	< ||ƒ |�r¾||7 }nŽt|tƒ�rª| |j¡ | j|j d |d
�}|j!�r |jd u�r‚|j}|�r‚t|ƒ}|  ||j¡|_|�r ||7 }||ƒ n|| j|d |d
�ƒ �q²t| dd ƒ}|d u�rú|d }t|j dd¡|ƒ|jd< | j"�r| #d| j"¡ |S )Nr   rw  rZ   rŸ   rA  rú   rû   r0   rV   )r6  rs  z>Included LIIndenter bulletType=%s != OrderedList bulletType=%srs  )rs  rT   r   )$rC  rx  rÒ   r  r  r˜   rH  rB  rI  rY  rX  r€  r–   r[  rj  rk  rK  r9  Z_calcBulletDedentr~   r¡  r{  ÚindexrL   r�  r†  r3   rÓ   rÇ   ru  Úupdaters  r^  rv  r~  r"  )r   Zbtr9  rû  ZautovÚincZbdZalignÚdirZtvalueZmaxWrÙ   rm   r¢   rO   ZaSrp  ZfstartZfparamsrV   r  rT   r   r   r   rœ  	  s¾    












zListFlowable._getContent)NN)N)N)r   r   r   rz  r   rp   r  rB   rN   r€  r�  r†  rœ  r   r   r   r   r¡  u  s     ý
;



r¡  c                   @   sJ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„Zdd„ Zdd„ Z	dd„ Z
dS )Ú	TopPadderz‡wrap a single flowable so that its first bit will be
    padded to fill out the space so that it appears at the
    bottom of its framec                 C   s   || j d< d S )NÚ_TopPadder__f)rÓ   rl   r   r   r   r   x	  s    zTopPadder.__init__c                 C   s(   | j  ||¡\}}|| | jd< ||fS )NÚ_TopPadder__dh)rŒ  rB   rÓ   rb  r   r   r   rB   {	  s    zTopPadder.wrapc                 C   s.   | j  ||¡}t|ƒdkr*t|d ƒ|d< |S )NrZ   r   )rŒ  rN   rx   r‹  ra  r   r   r   rN   €	  s    zTopPadder.splitr   c              	   C   s&   | j  |||td| jd ƒ |¡ d S )Nr   rß   )rŒ  rA   r–   r�  r=   r   r   r   rA   †	  s    zTopPadder.drawOnc                 C   s   t | j||ƒ d S rf   )rf  rŒ  rg  r   r   r   rh  ‰	  s    zTopPadder.__setattr__c                 C   s   t | j|ƒS rf   )rL   rŒ  rg   r   r   r   rÕ   Œ	  s    zTopPadder.__getattr__c                 C   s   t | j|ƒ d S rf   )r³  rŒ  rg   r   r   r   ri  �	  s    zTopPadder.__delattr__N)r   )r   r   r   r    r   rB   rN   rA   rh  rÕ   ri  r   r   r   r   r‹  t	  s   
r‹  c                   @   s6   e Zd ZdZdZddd„Zdd„ Zdd	„ Zd
d„ ZdS )Ú	DocAssignzJAt wrap time this flowable evaluates var=expr in the doctemplate namespacerZ   Úforeverc                 C   s   t  | ¡ |||f| _d S rf   ©r!   r   r/  )r   ÚvarÚexprZlifer   r   r   r   •	  s    
zDocAssign.__init__c                 C   s’   |   d¡}| t||d�¡ zL|  ¡ W dD ]}z
||= W q*   Y q*0 q*S ]}z
||= W qJ   Y qJ0 qJn$dD ]}z
||= W qn   Y qn0 qn0 d S )NÚ
_nameSpace©ZavailableWidthZavailableHeight)rh   rˆ  Údictr�  )r   rC   rD   ÚNSrt  r   r   r   ÚfuncWrap™	  s(    

ú

ü
zDocAssign.funcWrapc                 C   s    |   d| jjdd …  ¡| jŽ S )NrÙ   rZ   )rh   r\   r   r/  r   r   r   r   r�  ¥	  s    zDocAssign.funcc                 C   s   |   ||¡ dS r+  )r—  r5  r   r   r   rB   ¨	  s    zDocAssign.wrapN)r�  )	r   r   r   r    rW  r   r—  r�  rB   r   r   r   r   rŽ  ’	  s   
rŽ  c                   @   s   e Zd ZdZddd„ZdS )ÚDocExecz(at wrap time exec stmt in doc._nameSpacer�  c                 C   s   t  | ¡ ||f| _d S rf   r�  )r   ÚstmtZlifetimer   r   r   r   ®	  s    
zDocExec.__init__N)r�  r   r   r   r   r   r˜  ¬	  s   r˜  c                   @   s:   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zd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                 C   s,   t  | ¡ || _|| _|| _|| _|| _d S rf   )r!   r   r’  r;  rR   ÚklassÚescape)r   r’  r;  rR   r›  rœ  r   r   r   r   ¹	  s    
zDocPara.__init__c                 C   s.   | j }|r*t|tƒst|ƒ}|  d¡|ƒS d S )NZdocEval)r’  rÒ   r4   rh   )r   r’  r   r   r   r�  Á	  s    zDocPara.funcc                 G   s   |   d¡j|Ž  d S )Nrj   )rh   rí   )r   r/  r   r   r   Úadd_contentÇ	  s    zDocPara.add_contentc                 C   sR   |   ||¡}| jrF|  d¡ ¡ }| t||d�¡ ||d< | j| }nt|ƒ}|S )Nr“  r”  Z__expr__)r—  r;  rh   r   rˆ  r•  r4   )r   rC   rD   r9  r–  r   r   r   Ú	get_valueÊ	  s    zDocPara.get_valuec                 C   sr   |   ||¡}| j}|s"ddlm} | j}|sBddlm} |ƒ d }| jr\ddlm} ||ƒ}|  	|||d�¡ dS )Nr   rš  )ÚgetSampleStyleSheetZCode)rœ  )rR   rë   )
rž  r›  rž  r›  rR   Úreportlab.lib.stylesrŸ  rœ  Úxml.sax.saxutilsr�  )r   rC   rD   r9  r7  rR   rŸ  rœ  r   r   r   rB   Õ	  s    
zDocPara.wrap)NNNT)	r   r   r   r    r   r�  r�  rž  rB   r   r   r   r   rš  ²	  s   
rš  c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	Ú	DocAssertNc                 C   s   t  | ¡ || _|| _d S rf   )r!   r   r’  r;  )r   Úcondr;  r   r   r   r   å	  s    
zDocAssert.__init__c                 C   s   t  | ||¡| _| jS rf   )rš  r—  Ú_condr5  r   r   r   r—  ê	  s    zDocAssert.funcWrapc                 C   s"   |   ||¡}t| jƒst|ƒ‚dS r+  )rž  Úboolr¤  ÚAssertionError)r   rC   rD   r9  r   r   r   rB   î	  s    
zDocAssert.wrap)N)r   r   r   r   r—  rB   r   r   r   r   r¢  ä	  s   
r¢  c                   @   s(   e Zd Zg fdd„Zdd„ Zdd„ ZdS )ÚDocIfc                 C   s"   t  | ¡ || _|pg |f| _d S rf   )r!   r   r’  Úblocks)r   r£  Z	thenBlockZ	elseBlockr   r   r   r   õ	  s    
zDocIf.__init__c                 C   s   t |ttfƒs|f}|S rf   )rÒ   r  r  )r   Úblockr   r   r   Ú
checkBlockú	  s    zDocIf.checkBlockc              
   C   s*   | j |  | jtt|  ||¡ƒƒ ¡Ž  dS r+  )r�  rª  r¨  r˜   r¥  r—  r5  r   r   r   rB   ÿ	  s    &z
DocIf.wrapN)r   r   r   r   rª  rB   r   r   r   r   r§  ô	  s   r§  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚDocWhilec                 C   s    t  | ¡ || _|  |¡| _d S rf   )r!   r   r’  rª  r©  )r   r£  Z
whileBlockr   r   r   r   
  s    
zDocWhile.__init__c                 C   s*   t |  ||¡ƒr&| jt| jƒ| g Ž  dS r+  )r¥  r—  r�  r  r©  r5  r   r   r   rB   	
  s    zDocWhile.wrapN)r   r   r   r   rB   r   r   r   r   r«  
  s   r«  c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚSetTopFlowablesrZ   Fc                 C   s   || _ || _d S rf   ©Ú_FÚ_show©r   rþ   Úshowr   r   r   r   
  s    zSetTopFlowables.__init__c                 C   s:   t t | dd ƒdd ƒ}|r6| j|_| jr6| jr6| j|j_dS ©Nr+   rd   rë   )rL   r®  Z_topFlowablesr¯  rj   rø   ©r   rC   rD   r  r   r   r   rB   
  s    
zSetTopFlowables.wrapN)F©r   r   r   Z
_ZEROZSIZEr   rB   r   r   r   r   r¬  
  s   
r¬  c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚSetPageTopFlowablesrZ   Fc                 C   s   || _ || _d S rf   r­  r°  r   r   r   r   
  s    zSetPageTopFlowables.__init__c                 C   s:   t t | dd ƒdd ƒ}|r6| j|_| jr6| jr6| j|j_dS r²  )rL   r®  Z_pageTopFlowablesr¯  rj   rø   r³  r   r   r   rB   "
  s    
zSetPageTopFlowables.wrapN)Fr´  r   r   r   r   rµ  
  s   
rµ  )r   )rZ   NNN)r5  N)dÚ__version__r    rª   r   r   Zreportlab.lib.colorsr   r   Úreportlab.lib.rl_accelr   Zreportlab.lib.enumsr   r   r	   r   r
   r­   r   r   Zreportlab.lib.abagr   Zreportlab.pdfbaser   Úreportlab.pdfbase.pdfmetricsr   Úreportlab.rl_configr   r   r   r   rN   Ú__all__r   r!   rq   r{   r€   r�   r‡   r‚   rŠ   r�   rÛ   rÜ   rÝ   rà   rä   ræ   rç   r  r  r  r  r(  r)  r1  r2  r6  rB  rD  rE  rP  rT  rU  ri  rx  r~  r  r™  r¢  rº  rÉ  rÎ  rÓ  r  r  r&  r(  Zreportlab.lib.sequencerr3  r•  r7  r<  r=  r[  r\  rj  rm  rn  ru  r¡  r‹  rŽ  r˜  rš  r¢  r§  r«  r¬  rµ  r   r   r   r   Ú<module>   sÀ    
(N 

5D@,:gm=x  7(.5ö
53*  2