a
    ¦¾deIk ã                   @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 dZdZdZddlmZmZmZmZ G d	d
„ d
ƒZdd„ Zdd„ ZddlmZ dd„ Zdd„ Zdd„ Zefdd„Zdd„ ZG dd„ dƒZG dd„ dƒZddd d!d"d#d$d%d&d'd(d)d*d+œZG d,d-„ d-eƒZ d.d/„ Z!d|d1d2„Z"G d3d4„ d4eƒZ#G d5d6„ d6ƒZ$G d7d8„ d8ƒZ%G d9d:„ d:e%ƒZ&G d;d<„ d<e%ƒZ'G d=d>„ d>e'ƒZ(G d?d@„ d@e'ƒZ)G dAdB„ dBe%ƒZ*G dCdD„ dDƒZ+dEdF„ Z,d}dGdH„Z-d~dIdJ„Z.G dKdL„ dLƒZ/e/ƒ Z0G dMdN„ dNe/ƒZ1G dOdP„ dPe1ƒZ2G dQdR„ dRe1ƒZ3dSdT„ Z4dUZ5dVZ6dWdX„ Z7e1dYƒZ8dZd[d\d]d^efd_e
fd`dage4dbƒ dce8fg e4ddƒ dee8fdfd^efdgd_e
fd`dag e4dhƒ dfd^efdidjd`dadZdkg e4dlƒ dce0fg e4dmƒ dee0fdndodpdqdrdpdndsdpdtd[dudfd^efdvdwd`dag e4dxƒ dtdfg Z9dydz„ Z:e;d{k�r
e:ƒ  d0S )a!  new experimental paragraph implementation

Intended to allow support for paragraphs in paragraphs, hotlinks,
embedded flowables, and underlining.  The main entry point is the
function

def Paragraph(text, style, bulletText=None, frags=None)

Which is intended to be plug compatible with the "usual" platypus
paragraph except that it supports more functionality.

In this implementation you may embed paragraphs inside paragraphs
to create hierarchically organized documents.

This implementation adds the following paragraph-like tags (which
support the same attributes as paragraphs, for font specification, etc).

- Unnumberred lists (ala html)::

    <ul>
        <li>first one</li>
        <li>second one</li>
    </ul>


Also <ul type="disc"> (default) or <ul type="circle">, <ul type="square">.

- Numberred lists (ala html)::

    <ol>
        <li>first one</li>
        <li>second one</li>
    </ol>

Also <ul type="1"> (default) or <ul type="a">, <ul type="A">.

- Display lists (ala HTML):

For example

<dl bulletFontName="Helvetica-BoldOblique" spaceBefore="10" spaceAfter="10">
<dt>frogs</dt> <dd>Little green slimy things. Delicious with <b>garlic</b></dd>
<dt>kittens</dt> <dd>cute, furry, not edible</dd>
<dt>bunnies</dt> <dd>cute, furry,. Delicious with <b>garlic</b></dd>
</dl>

ALSO the following additional internal paragraph markup tags are supported

<u>underlined text</u>

<a href="http://www.reportlab.com">hyperlinked text</a>
<a href="http://www.reportlab.com" color="blue">hyperlinked text</a>

<link destination="end" >Go to the end (go to document internal destination)</link>
<link destination="start" color="cyan">Go to the beginning</link>

<setLink destination="start" color="magenta">This is the document start
  (define document destination inside paragraph, color is optional)</setLink>

é    ©ÚstringWidth)Úfp_str)ÚFlowable©Úcolors)Ú_baseFontNamegñhãˆµøä>)ÚTA_LEFTÚ	TA_CENTERÚTA_RIGHTÚ
TA_JUSTIFYc                   @   s„   e Zd Zd dd„ZdZdd„ Z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„ ZdS )"ÚparagraphEngineNc                 C   s|   ddl m} |d u rg }g | _|| _d | _| _d| _d| _d| _d| _	|| _
d | _ | _| _ddlm} || _g | _d S )Nr   ©Úblackç        Ú	Helveticaé
   é   )r	   )Úreportlab.lib.colorsr   ÚlineOpHandlersÚprogramÚindentÚrightIndentÚ
baseindentÚfontNameÚfontSizeÚleadingÚ	fontColorÚxÚyÚriseÚreportlab.lib.enumsr	   Ú	alignmentÚtextStateStack)Úselfr   r   r	   © r%   úP/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/platypus/para.pyÚ__init__W   s    zparagraphEngine.__init__)	r   r   r   r   r   r   r   r    r"   c                 C   s6   g }| j D ]}t| |ƒ}| |¡ q
| j|g | _|S ©N)ÚTEXT_STATE_VARIABLESÚgetattrÚappendr#   ©r$   ÚstateÚvarÚvalr%   r%   r&   ÚpushTextStatem   s    

zparagraphEngine.pushTextStatec                 C   sP   | j d }| j d d… | _ |d d … }| jD ]}|d }|d= t| ||ƒ q,d S )Néÿÿÿÿr   )r#   r)   Úsetattrr,   r%   r%   r&   ÚpopTextStatex   s    

zparagraphEngine.popTextStater   c                 C   sJ  | j  ¡ }|dd… }g }|}|r(|| _d}	d}
|�r |	�r | j}| j}|| | }| j  ¡ }|tk r|td| j| j|f ƒ‚z|  ||¡\}}}}}}}W n   ‚ Y n0 |
| }
| j}||krÊ|| }nd}	| j  |¡ �q | j	}||d… }|sú|d= |t
k�r"|�rt||ƒ}n
|  |¡}nâ|tk�rX|�r>t||ƒ}n
|  |¡}|  |||¡}n¬|tk�rŽ|�rtt||ƒ}n
|  |¡}|  |||¡}nv|tk�rô|�rÈ|�rÈ|�r¸t|||ƒ}n|  |||¡}n*|�rÚt||ƒ}n
|  |¡}t�rtdƒ ntdt|ƒ ƒ‚|�s|  |¡}| |¡ q0| j  ¡ }| j  |¡ || }||||fS )zCreturn program with line operations added if at least one line fitsNé   r   z#indents %s %s too wide for space %sr1   z2no justify because line is not full or end of parazbad alignment )Ú__dict__Úcopyr   r   r   ÚTOOSMALLSPACEÚ
ValueErrorÚfitLineÚupdater"   r	   Ú
stringLineÚ
shrinkWrapr
   ÚcenterAlignr   Ú
rightAlignr   ÚsimpleJustifyAlignÚjustifyAlignÚdebugÚprintÚreprÚcleanProgramÚextend)r$   ÚmaxwidthÚ	maxheightr   r   Ú
startstateÚ	remainderZlineprogramZheightremainingÚroomZcursorcountr   r   Z	linewidthZbeforelinestateÚ
lineIsFullÚlineÚcursorÚcurrentLengthÚ
usedIndentÚ	maxLengthÚjustStringsr"   Ú	laststateÚ
heightusedr%   r%   r&   Úformat„   s†    


ÿ
ÿ
ÿ











zparagraphEngine.formatc                 C   s
   | j  ¡ S r(   )r5   r6   ©r$   r%   r%   r&   ÚgetStateò   s    zparagraphEngine.getStatec                 C   s   | j  |¡ d S r(   )r5   r:   )r$   r-   r%   r%   r&   Ú
resetStateö   s    zparagraphEngine.resetStatec           /      C   sø  ddl m} | j}|| | j }d}g }d}d}	d}
t|ƒ}d}d}d}| j}| j}|d||ƒ}d}|�sÖ||k �rÖ|| }t|tƒs’t	|dƒ�rr|}d}t	|dƒr¸d}| 
| ¡}d}n@|}| ¡ }|rÖ||||ƒ}nd}|rô|sæ|
rô|d dk}nd}|}|�r
|| }|
| }||k�r,|�s,d}d}	n>|�r<| |¡ |�rL| |¡ t|ƒtk�rj| | ¡ |}
d}�nVt|tƒ�rÒd}t|ƒ}|tk�rÈ|
| }||k�r²|�s²d}n|tk�rÊ|}
| |¡ d}�nöt|tƒ�r¸d}|d }|dk�r| |¡ |d7 }d }}�qÈ|d	k�r`| j}|\}}t|tƒ�rHtt|ƒ }| _n
| }| _| |¡ �qÈ|d
k�r–|\}} |  }| _|d||ƒ}| |¡ �qÈ|dk�r8|\}}!tt|!ƒƒ}"t|!tƒ�r|!dd… dk�rä| j|"  }| _n.|!dd… dk�r| j|"  }| _n
|" }| _n
|" }| _|d||ƒ}| |¡ �qÈ|dk�r^|\}}#|#| _| |¡ �qÈ|dk�r¬|\}}$| j|$  }%| _|�ržt|%|ƒ}|| | j }| |¡ �qÈ|dk�rÌ|  ¡  | |¡ �qÈ|dk�rz|  ¡  W n   ‚ Y n0 | j}| j}|d||ƒ}| |¡ �qÈ|dk�r®|\}}&}%}'}"|%| j }%||&|%|'|"f}|�sVtdƒ‚t||&|'|"ƒƒ}(t|d|'|"ƒƒ}|%| |( })t|)|ƒ}|�r || | j }| |¡ �qÈ|dk�rì|\}}$| j|$ | _|�rà|| | j }| |¡ nÊ|dk�r|\}}*| j|*  }+| _| |¡ nœ|dk�r>|\}},|,| _| |¡ nx|dk�rj|\}}-| |¡ | j|-g | _nL|dk�r¦|\}}-| jdd… }.|. |-¡ |.| _| |¡ ntdt|ƒ ƒ‚ntdt|ƒ ƒ‚|sd|d7 }qd|�sæ| d¡ |	|||
|||fS )z(fit words (and other things) onto a liner   r   r4   Nú Úwidthr1   ÚnextLineÚcolorÚfaceÚsizeú+ú-r   r   ÚpushÚpopÚbulletúbullet not at beginning of liner   r    ÚalignÚlineOperationÚendLineOperationz*at format time don't understand indicator z-op must be string, float, instance, or tuple ©rZ   r   )Úreportlab.pdfbase.pdfmetricsr   r   r   Úlenr   r   Ú
isinstanceÚstrÚhasattrrY   Ústripr+   Úabsr7   ÚfloatÚtupler   r*   r   r   Úmaxr0   r3   r   r8   r    r"   r   ÚremoverC   )/r$   r   ZtotalLengthr   rO   rP   ÚdonerL   rM   rK   rN   Z	maxcursorZ	needspaceÚfirstZ
terminatedr   r   Ú
spacewidthrQ   ÚopcodeZlastneedspacerY   Z
saveopcodeZ	fullwidthZ	newlengthZaopcodeZ
nextLengthÚ	indicatorÚoldcolorÚiÚ	colornamer[   ÚfontnameÚfontsizer]   r   Ú	incrementr   rb   ÚfontÚbulletwidthÚ	bulletminr    Únewriser"   ÚhandlerÚhr%   r%   r&   r9   þ   s:   































zparagraphEngine.fitLinec                 C   s(   || }|d }|t kr$|  ||¡S |S )Nç       @©r7   ÚinsertShift)r$   rL   Ú
lineLengthrP   ÚdiffÚshiftr%   r%   r&   r=   Ò  s
    zparagraphEngine.centerAlignc                 C   s    || }|t kr|  ||¡S |S r(   r…   )r$   rL   r‡   rP   r‰   r%   r%   r&   r>   Ù  s    zparagraphEngine.rightAlignc                 C   sF   g }d}|D ]4}|r6t |tƒs(t|dƒr6| |¡ d}| |¡ q|S )Nr4   rY   r   )rj   rk   rl   r+   )r$   rL   r‰   Úresultrt   Úer%   r%   r&   r†   à  s    
zparagraphEngine.insertShiftc                 C   s  || }d}d}d}|D ]D}t |tƒr<|tkr<|r<|d7 }q|rt |tƒsTt|dƒrd}d}q|dk rj|S |t|ƒ }	|	tkr‚|S d}d}g }
d}t|ƒ}||k �r|| }|
 |¡ |rÔt |tƒsÎt|dƒrÔd}n&t |tƒrú|tkrú|rú||	 }||
d< |d7 }qš|
S )Nr   r4   rY   r1   )rj   ro   r7   rk   rl   ri   r+   )r$   rL   r‡   rP   rˆ   Z
spacecountZvisiblert   r‹   r‰   rŠ   rM   ZnlineÚexpandedr%   r%   r&   r@   ë  s<    



zparagraphEngine.justifyAlignc           
      C   s  g }d}t |ƒ}||k �r|| }t|tƒ�r||d k �r|g}d}|d7 }|| }||k rÚt|ttfƒrÚt|tƒr¬|dk rŒ|dkrŒ| }|dk r¢|dkr¢| }||7 }nt|tƒrÀ| |¡ |d7 }||k rV|| }qVd |¡}	| |	¡ | t|ƒ¡ |d8 }n
| |¡ |d7 }q|S )Nr   r4   r   rX   )ri   rj   rk   ro   r+   Újoin)
r$   rL   rŠ   ÚindexZmaxindexr‹   Z
thestringsZ	thefloatsZnexteÚsr%   r%   r&   r<   *  s:    










zparagraphEngine.shrinkWrapc                 C   s†  g }d}|D ]l}t |tƒrT|dk r0|dkr0| }|dk rF|dkrF| }t|ƒ| }qt|ƒtkrj| |¡ | |¡ d}q|rˆ| |¡ d}ttt|ƒd ƒƒ}|�r‚d}|D ]Ð}|d }|| }	|| }
d}t |	tƒsöt |
tƒsöt	|	dƒsöt	|
dƒrüd}njt |	t
ƒ�rf|	d }t |
t
ƒ�rL|
d }d}|dk�rf|dk�rf|dk�rfd}nt |
tƒ�rf|dk�rfd}|r®|
||< |	||< d}q®q |S )zcollapse adjacent spacingsr   r4   rY   rf   re   )rj   ro   rn   r7   r+   ÚlistÚrangeri   rk   rl   rp   )r$   rL   rŠ   Úlastr‹   ZchangeZrlinerŽ   Z	nextindexÚthisÚnextZdoswapZthisindicatorZnextindicatorr%   r%   r&   rD   P  sb    




ÿþþÿ
zparagraphEngine.cleanProgramc           +   	   C   sŒ  |j }|j}| j ¡ }d}d}| | j¡ | j}	| j}
| j}d}|D �]*}t	|t
ƒs`t|dƒ�r
|s´t|
ƒtkr’| dt|
dƒ ¡ |  j|
7  _| jD ]}| | j| j| ||¡ q˜d}|| jksÌ|| jkrä| j}| j}| ||¡ t	|t
ƒrú| |¡ n| | ||¡ qDt	|tƒ�rLt|ƒ}|tk�rp| dt|dƒ ¡ |  j|7  _qDt	|tƒ�r`|d }|dk�rÚ|\}}| j}| j}| j| j  }| _|	 }| _| j}
| j}d}| jD ]}| ||| ||¡ �q°| ||¡ �qp|dk�r2| j}|\}}t	|t
ƒ�rtt|ƒ }| _n
| }| _||k�r^| |¡ �qp|dk�rN|\}}|| _�qp|d	k�rä|\}}tt|ƒƒ}t	|t
ƒ�rÄ|dd… d
k�rš|  j|7  _n(|dd… dk�r¼|  j|8  _n|| _n|| _| j}| | j| j¡ �qp|dk�r |\}}|| _�qp|dk�r0|\}}| j|  }| _t|
|ƒ}
�qp|dk�rF|   ¡  �qp|dk�r†| j}| j}| j} |  !¡  || jk�r^| | j¡ �qp|dk�r¦|\}}!| "|!¡ �qp|dk�rX|\}}"}}}t| j|	 ƒtk�rÚt#dƒ‚tt$|"||ƒƒ}#tt$d||ƒƒ}$||$ |# }%|%|
k�r|%}
| %|d¡ | ||¡ | |"¡ | %| d¡ | | j| j¡ �qp|dk�rx|\}}| j| | _næ|dk�r¦|\}}&| j&|&  }'| _&| '|'¡ n¸|dk�rÀ|\}}(|(| _(nž|dk�rø|\}}| | j| j| ||¡ | j|g | _nf|dk�rN|\}}| | j| j| ||¡ | jdd…  })| _||)v �r^| j )|¡ n nt#dt*|ƒ ƒ‚qDt#dt*|ƒ ƒ‚qD| j ¡ }*| j +|¡ |*S )zrender the line(s)Nr   rY   z%s Tdr4   rZ   r[   r\   r]   r^   r_   r   r   r`   ra   ÚwordSpacingrb   rc   rX   r   r    rd   re   rf   zdon't understand indicator z!op must be string float or tuple ),Ú_escapeÚ_coder5   r6   ÚsetFillColorr   r   r   r   rj   rk   rl   rn   r7   r+   r   r   Ústart_atr   r   r   ÚsetFontÚtextOutÚexecutero   rp   r   Úend_atÚsetTextOriginr*   r   rq   r0   r3   ÚsetWordSpacer8   r   Z
moveCursorr    ZsetRiser"   rr   rC   r:   )+r$   r   ÚcanvasÚ
textobjectÚescapeÚcoderH   r~   r]   ZxstartZthislineindentZthislinerightIndentZindentedrv   r‚   rw   ry   Zendallmarksr   r   ZnewyZnewxrx   rz   r[   r{   r|   r   r   r}   r   ÚoldfontZoldsizeÚwsrb   r   ru   r€   r    r�   r"   ZnewhrR   r%   r%   r&   Ú
runOpCodes‘  sþ    





























zparagraphEngine.runOpCodes)N)r   )Ú__name__Ú
__module__Ú__qualname__r'   r)   r0   r3   rT   rV   rW   r9   r=   r>   r†   r@   r<   rD   r¦   r%   r%   r%   r&   r   U   s    

n U?&Ar   c                 C   sZ   g }| D ]}t |tƒr| |¡ qd |¡}|t|ƒg}d}| rV| d |krV| |¡ |S )zEsimple case: line with just strings and spacings which can be ignoredrX   rg   r1   )rj   rk   r+   r�   ro   )rL   ÚlengthÚstringsr   ÚtextrŠ   Únextlinemarkr%   r%   r&   r;   >  s    


r;   c                 C   s¢   g }| dd… D ]}t |tƒr| |¡ qt|ƒd }|| }d |¡}|dkrv|dkrv|t|ƒ }d|f||dg}	n
||dg}	d}
| rž| d |
krž|	 |
¡ |	S )	z&simple justification with only stringsNr1   r4   rX   r   r•   )r•   r   rg   )rj   rk   r+   ri   r�   ro   )rL   rN   rP   r«   r   ZnspacesZslackr¬   ZwordspacingrŠ   r­   r%   r%   r&   r?   L  s    



r?   r   c                 C   s0   |   ¡ dv rdS |   ¡ dv r dS td|  ƒ‚d S )N)ÚYZYESÚTRUEÚ1r4   )ÚNÚNOÚFALSEÚ0r   z+true/false attribute has illegal value '%s')Úupperr8   )r¬   r%   r%   r&   ÚreadBoolb  s
    r¶   c                 C   s<   |   ¡ }|dkrtS |dkr tS |dv r,tS |dkr8tS d S )NÚLEFTÚRIGHT)ZCENTERZCENTREZJUSTIFY)rµ   r	   r   r
   r   )r¬   Zupr%   r%   r&   ÚreadAlignmentj  s    r¹   c                 C   s¾   |   ¡ } z
t| ƒW S  ty¸   |  ¡ } | dd… | dd…  }}|  ¡ }zt|ƒ}W n tyt   td|  ƒ‚Y n0 zdddddœ| }W n tyª   td|  ƒ‚Y n0 ||  Y S 0 dS )	zIRead a dimension measurement: accept "3in", "5cm",
    "72 pt" and so on.Néþÿÿÿzinvalid length attribute '%s'éH   g^|Åb±X<@gåÉjµZ­@r4   )ÚinÚcmÚmmÚpt)rm   ro   r8   ÚlowerÚKeyError)r¬   Z
numberTextZunitsÚnumberZ
multiplierr%   r%   r&   Ú
readLengthu  s,    
üûrÃ   c                    sb   |   ¡ } | dd… dkr4| dd… dkr4| dd… } |  d¡}dd„ |D ƒ}‡ fd	d„|D ƒ}|S )
z0from "(2, 1)" or "2,1" return [2,1], for exampleNr4   ú(r1   ú)ú,c                 S   s   g | ]}|  ¡ ‘qS r%   )rm   ©Ú.0r�   r%   r%   r&   Ú
<listcomp>•  ó    z"lengthSequence.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r%   r%   rÇ   ©Ú	converterr%   r&   rÉ   –  rÊ   )rm   Úsplit)r�   rÌ   Úslr%   rË   r&   ÚlengthSequence�  s     
rÏ   c                 C   s¼   | sdS ddl m} ddlm} | d |v r6|j|  S t| ƒ}d}dt|ƒ  krZdksdn J |ƒ‚d}tt|ƒƒD ]}|| d	kstJ |ƒ‚qtt|ƒdkr¢|j}nt|ƒdkr´|j	}||Ž S )
zCRead color names or tuples, RGB or CMYK, and return a Color object.Nr   r   )Úlettersz:Color tuple must have 3 (or 4) elements for RGB (or CMYC).é   é   z*Color tuple must have all elements <= 1.0.ç      ð?)
Úreportlab.libr   ÚstringrÐ   r5   rÏ   ri   r‘   ZColorZ	CMYKColor)r¬   r   rÐ   ÚtupÚmsgry   ZcolClassr%   r%   r&   Ú	readColorš  s"    
"rØ   c                   @   sT   e Zd ZegZegZegZegZegZe	gZ
egZegZegZegZegZegZdS )ÚStyleAttributeConvertersN)r§   r¨   r©   rÃ   r   r   Ú
leftIndentr   ÚfirstLineIndentr¹   r"   ÚspaceBeforeÚ
spaceAfterÚbulletFontSizeÚbulletIndentrØ   Ú	textColorÚ	backColorr%   r%   r%   r&   rÙ   °  s   rÙ   c                   @   s^   e Zd ZdZdZeZdZdZdZ	dZ
dZeZdZdZeZdZdZeZdZddd„Zd	d
„ ZdS )ÚSimpleStylez6simplified paragraph style without all the fancy stuffÚbasicr   r   r   Nc                 K   sD   | j }|r&|j  ¡ D ]\}}|||< q| ¡ D ]\}}|||< q.d S r(   )r5   Úitems)r$   ÚnameÚparentÚkwZmydictÚaÚbr%   r%   r&   r'   Ð  s    
zSimpleStyle.__init__c                 C   sN   |  ¡ D ]@}|| }|d urtt|ƒr<tt|ƒd }||ƒ}t| ||ƒ qd S ©Nr   )Úkeysrl   rÙ   r*   r2   )r$   Ú
dictionaryÚkeyÚvaluerÌ   r%   r%   r&   ÚaddAttributesØ  s    
zSimpleStyle.addAttributes)N)r§   r¨   r©   Ú__doc__rå   r   r   r   r   rÚ   r   rÛ   r	   r"   rÜ   rÝ   ÚbulletFontNamerÞ   rß   r   rà   rá   r'   rï   r%   r%   r%   r&   râ   ¾  s$   
râ   ZHeading1ZHeading2ZHeading3ZHeading4ZHeading5ZHeading6ZTitleZSubTitleÚNormalZCodeZUnorderedListZOrderedListZ
Definition)zh1.defaultStylezh2.defaultStylezh3.defaultStylezh4.defaultStylezh5.defaultStylezh6.defaultStyleztitle.defaultStylezsubtitle.defaultStyleúpara.defaultStylezpre.defaultStylezul.defaultStylezol.defaultStyleúli.defaultStylec                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚFastParazAparagraph with no special features (not even a single ampersand!)c                 C   s&   d|v rt dƒ‚|| _|| _d | _d S )Nú&zno ampersands please!)r8   ÚstyleÚ
simpletextÚlines)r$   r÷   rø   r%   r%   r&   r'   õ  s
    zFastPara.__init__c                 C   sö  | j }|| _| j}| j }|j}|j}|j}|j}	|j}
|j}| 	¡ }g }ddl
m} |d|	|
ƒ}g }d}|| | }|| | }||k r˜|| | |fS ||k r¨||fS | jd u �rÆd}d}t|ƒ}d}||k �rr|�sr|}|sä|}|| }|||	|
ƒ}|�r|| }|| }|�r||k �r6|d7 }|}| |¡ qÈ| d |¡|t|ƒf¡ g }d}|| }|| |krÈd}qÈ|�r |�s | d |¡|t|ƒf¡ || }|| _|| _d ||d … ¡ }| _nd }| j}| j}|�rê||| f}n||f}|S )Nr   r   rX   r4   )rø   ÚavailableWidthr÷   r   rÚ   r   r   r   rÛ   rÍ   rh   r   rù   ri   r+   r�   ÚheightrI   )r$   rú   ÚavailableHeightrø   r÷   r¬   r   rÚ   r   r~   r]   ÚfirstindentÚwordsrù   r   ru   ZcurrentlineZcurrentlengthZfirstmaxlengthZ	maxlengthrS   rM   Únwordsrs   ZthismaxlengthZthiswordZthiswordsizeZ
nextlengthrI   rŠ   r%   r%   r&   Úwrapþ  sv    zFastPara.wrapc                 C   sT   | j }|j}||k rg S | j}|d u r.tdƒ‚| j}|rJt||ƒ}| |gS | gS d S )Nzmust wrap before split)r÷   r   rù   r8   rI   rõ   )r$   rú   rü   r÷   r   rù   rI   r”   r%   r%   r&   rÍ   F  s    
zFastPara.splitc                 C   sˆ  | j }| j}|j}|j}|j}|j}|j}|j}|j}	| j	}
|
j
}| j}|
 d|| ¡ |
 ¡ }|j}| ||¡ |jr„| |j¡ d}d}| j| }d}t|ƒ}||k �rz|| \}}}|d7 }|}|rÎ|	}|tkrÜ|}n~|tkrú|| }||d  }n`|tk�r|| }|| }nD|tk�rZ|}||k �rP|dk�rP| || |d  ¡ n
| d¡ | ||¡ | |¡ || }q¢|
 |¡ d S )Nr   r4   r„   rÓ   r   )r÷   rù   r   rÚ   r   r   r   r"   rÛ   Úcanvr–   rû   Ú	translateÚ	beginTextr—   rš   rà   r˜   rú   ri   r	   r
   r   r   rŸ   rž   r›   ÚdrawText)r$   r÷   rù   r   rÚ   r   r~   r]   r"   rý   Úcr¢   rû   r¡   r£   rt   r   Z
basicWidthÚcountÚnlinesr¬   rª   rÿ   Z
thisindentr   Úextrar%   r%   r&   ÚdrawU  s\    







zFastPara.drawc                 C   s   | j jS r(   )r÷   rÜ   rU   r%   r%   r&   ÚgetSpaceBeforeŒ  s    zFastPara.getSpaceBeforec                 C   s   | j jS r(   )r÷   rÝ   rU   r%   r%   r&   ÚgetSpaceAfter‘  s    zFastPara.getSpaceAfterN)
r§   r¨   r©   rð   r'   r   rÍ   r	  r
  r  r%   r%   r%   r&   rõ   ò  s   	H7rõ   c                  C   s8   i } ddl m} |ƒ }t ¡ D ]\}}|| | |< q| S ©Nr   )ÚgetSampleStyleSheet©Úreportlab.lib.stylesr  ÚDEFAULT_ALIASESrä   )rŠ   r  ÚstylesÚstylenamekeyÚstylenamevaluer%   r%   r&   ÚdefaultContext•  s    r  Nc                 C   sœ   i }ddl m} | d urdt ¡ D ]\}}|| v r | | ||< q t ¡ D ]\}}|| v rF| | ||< qF|ƒ }t ¡ D ]$\}}||vrr||v rr|| ||< qr|S r  r  )Z
stylesheetrŠ   r  r  r  r  r%   r%   r&   ÚbuildContext�  s    r  c                   @   s8  e Zd ZdZdZdKdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dLdd„ZdMdd„Zdd„ ZdNdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ ZdOd$d%„Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dPdIdJ„Z'dS )QÚParar   Nc                 C   sn   || _ t|ƒ| _|| _|| _|| _g | _g | _d | _|| _	|sN|j
| _
|j| _d| _d| _|j| _|j| _d S rê   )r   r  ÚcontextÚ
parsedTextÚ
bulletTextÚstyle1r   ÚformattedProgramrI   r-   rÜ   rÝ   ÚboldÚitalicr   r\   r   r]   )r$   r÷   r  r  r-   r  r   r%   r%   r&   r'   ¶  s     
zPara.__init__c                 C   s   | j S r(   )rÜ   rU   r%   r%   r&   r
  Í  s    zPara.getSpaceBeforec                 C   s   | j S r(   )rÝ   rU   r%   r%   r&   r  Ò  s    zPara.getSpaceAfterc                 C   sÜ  t r.tdt| ƒ||ƒ td| jƒ td| jƒ || _tƒ  | _}| j|_| j	}| j}| j
}|rh|d }n| jj}| j}d| _|r | |¡ d|_d|_|d }	n| jj}	||	krÂd| _|d |fS |d u rÚ|d u rÚtdƒ‚|sî|  |¡ | _}| j�s(| ||||¡\}}
}}|| _|| _|| _|
| _n
| j}d }
|
�rr|d }t| jd d || jd�| _|
| j_| j| j_d| _nd | _|}||k�rŽ|d }||f}t �rØ|\}}t|| ƒd	k �rÈtd
t||ƒ ƒ td||f|ƒ |S )NZWRAPPINGz   r   r4   r   zneed parsedText for formatting©r  r  r-   r  gš™™™™™¹?gš™™™™™É?zexact match???zwrap is)rA   rB   Úidr  r   rü   r   Úmyenginer   r  r-   r  r   ÚcansplitrW   r   r   r8   ÚcompileProgramrT   rû   rR   ZremainderProgramr  r  rI   rÝ   rn   rC   )r$   rú   rü   Úpr  r  r-   r   r   ZneedatleastrI   rR   rS   rû   rŠ   Úwrƒ   r%   r%   r&   r   Ö  sr    


ÿ
ÿ

z	Para.wrapc                 C   sV   |dks| j sg S || _| j}|d u r0tdƒ‚n|s8g S | j}|rL| |g}n| g}|S )Nr   zmust call wrap before split)r!  rü   r  r8   rI   )r$   rú   rü   r  rI   rŠ   r%   r%   r&   rÍ     s    

z
Para.splitc           
      C   sÆ   | j }| j}|d u rtdƒ‚| j}| j}|rB| |¡ d|_d|_| j}| j	}|r\|d }n| j
j}| d|| j ¡ | ¡ }ts†trªtddƒ |D ]}	t|	ƒ q”tdƒ | |||¡}| |¡ d S )Nzmust call wrap before drawr   r   z,============================================znow running programz,--------------------------------------------)r   r  r8   r-   rR   rW   r   r   r  rû   r  r   r  r]   r  ÚDUMPPROGRAMrA   rB   r¦   r  )
r$   r#  r  r-   rR   r  rû   r   Útr   r%   r%   r&   r	  6  s0    



z	Para.drawc           	      C   s2  | j }|d u rg }|j}|j}|d|fƒ ddlm} ||ƒ\| _| _| _|d|jfƒ |j| _	|d|j
fƒ |d|jfƒ |jr�|d|jfƒ |d|jfƒ |d|jfƒ |jrÀ|d	|jfƒ | jrÔ|  | j|¡ |  ||¡ |j�r.d}|D ](}|d
7 }t|tƒ�st|dƒrð �qqð| |d|j f¡ |S )Nr\   r   )Úps2ttr]   rd   r   r   r   r[   r4   rY   )r  r+   r   Úreportlab.lib.fontsr'  r\   r  r  r   r]   r"   rÚ   rÛ   r   r   rà   r  Ú	do_bulletÚcompileComponentrj   rk   rl   Úinsert)	r$   r  r   r÷   rè   Úfnr'  r  r   r%   r%   r&   r"  W  s:    zPara.compileProgramc                 C   s¾   |d u r| j }| j}|d u r g }| d¡ |jrH| d|j|j f¡ n| d|jf¡ | d¡ | j||d�}| d¡ | d¡ |jrœ| d|jf¡ n
| d¡ | d¡ | d¡ d S )N©r`   r   rg   ©r   ©ra   )r   r   )r  r  r+   rÜ   r   r"  rÝ   )r$   r   r  r÷   r%   r%   r&   Ú	linearize‘  s$    





zPara.linearizec                 C   s@  t |tƒr6|r2| ¡ }|s&| d¡ nt| ||ƒ �nt |tƒrX|D ]}|  ||¡ qDnät |tƒ�r<|\}}}}|sxi }d| }	t| |	d ƒ}
|
d ur¤|
||||ƒ n˜t	�r,d| g}|j}|sÂi }| 
¡ D ]\}}|d||f ƒ qÊ|�r|dƒ |t|ƒƒ |d| ƒ n|dƒ d |¡}t| ||ƒ ntd	t|ƒ ƒ‚d S )
NrX   Úcompile_ú<z %s=%sú>z</%s>z/>Ú zdon't know how to handle tag )rj   rk   rm   r+   ÚhandleSpecialCharactersr�   r*  rp   r*   rA   rä   r�   r8   rC   )r$   r  r   Ústextr‹   ÚtagnameÚattdictÚcontentr  ZcompilernameÚcompilerÚLrè   ÚkÚvr&  r%   r%   r&   r*  ª  s>    



zPara.compileComponentc                 C   s�   | j }| j}| j}|||f}|d u r(|}|d u r4|}|d u r@|}|| _ || _|| _ddlm}	 |	|||ƒ}
|	|||ƒ}|
|krŒ| d|
f¡ |S )Nr   ©Útt2psr\   )r\   r  r  r(  r?  r+   )r$   r   r\   r  r  ZoldfaceZoldboldZ	olditalicZoldfontinfor?  r~   r¤   r%   r%   r&   Ú	shiftfontÓ  s     
zPara.shiftfontc                 C   s   |D ]}|   ||¡ qd S r(   )r*  ©r$   r8  r9  r  r   r‹   r%   r%   r&   r1  å  s    zPara.compile_c                 C   s   |  tƒ ¡ d S r(   )r+   ÚPageNumberObject©r$   r8  r9  r  r   r%   r%   r&   Úcompile_pageNumberë  s    zPara.compile_pageNumberc           	      C   s<   | j |dd�\}}}|D ]}|  ||¡ q| j ||d� d S )Nr4   )r  ©r@  r*  ©	r$   r8  r9  r  r   Úfré   ry   r‹   r%   r%   r&   Ú	compile_bî  s    zPara.compile_bc           	      C   s<   | j |dd�\}}}|D ]}|  ||¡ q| j ||d� d S )Nr4   )r  rE  rF  r%   r%   r&   Ú	compile_iô  s    zPara.compile_ic                 C   s6   |  dtf¡ |D ]}|  ||¡ q|  dtf¡ d S )Nre   rf   )r+   Ú	UNDERLINEr*  rA  r%   r%   r&   Ú	compile_uú  s    zPara.compile_uc           	      C   sv   | j }|d  | _ }|d }| d|f¡ || _ | d| f¡ |D ]}|  ||¡ qD| d|f¡ | d|f¡ d S ©Ngffffffæ?g      à?r]   r    ©r]   r+   r*  ©	r$   r8  r9  r  r   r]   Znewsizer    r‹   r%   r%   r&   Úcompile_sub  s    zPara.compile_subÚulc                 C   sž   |  ¡ }t||| jƒ}|D ]~}t|tƒr:| ¡ r˜tdƒ‚qt|tƒr|\}}	}
}|dkrhtdt|ƒ ƒ‚|  ¡ }|	r~| 	|	¡ | 
|¡ |  ||
||¡ qd S )Nú(don't expect CDATA between list elementsÚlizdon't expect %s inside list)r6   ÚbulletMakerr  rj   rk   rm   r8   rp   rC   r:   Ú
makeBulletÚcompile_para)r$   r8  r9  r  r   r7  ÚattsÚbulletmakerr‹   Úattdict1Úcontent1Únewattsr%   r%   r&   Ú
compile_ul  s    




zPara.compile_ulc                 C   s   | j ||||dd�S )NÚol)r7  )r[  rC  r%   r%   r&   Ú
compile_ol#  s    zPara.compile_olc                 C   s,  |  ¡ }|  ¡ }td|| jƒ}t|ƒ}d}|�r|d }	|d= t|	tƒrh|	 ¡ rZtdƒ‚n|s*�qnq*q*t|	tƒr*|	\}
}}}|
dkrž|
dkržtdt	|
ƒ ƒ‚|
dkrÐ|rºtdt	|ƒ ƒ‚|rÎ|  
||||¡ q*|
dkr*|  ¡ }|rî| |¡ |j||d	� |  
||||¡ d}q*|�r(td
t	|ƒ ƒ‚d S )NÚdlr4  r   rQ  ÚddÚdtz5don't expect %s here inside list, expect 'dd' or 'dt'z2dt will not be displayed unless followed by a dd: )Úblz0dt will not be displayed unless followed by a dd)r6   rS  r  r�   rj   rk   rm   r8   rp   rC   rU  r:   rT  )r$   r8  r9  r  r   rV  rW  Zcontentcopyrb   r‹   r7  rX  rY  rZ  r%   r%   r&   Ú
compile_dl&  sD    


ÿ
zPara.compile_dlc           	      C   sv   | j }|d  | _ }|d }| d|f¡ | d|f¡ |D ]}|  ||¡ q<| d|f¡ || _ | d| f¡ d S rL  rM  rN  r%   r%   r&   Úcompile_superQ  s    zPara.compile_superc                 C   sº   |  d¡ d|v rZ|d }ddlm} z||| j| jƒ}W n   |}Y n0 |  d|f¡ d|v rx|d }|  d|f¡ d|v r–|d }	|  d|	f¡ |D ]}
|  |
|¡ qš|  d¡ d S )Nr-  r\   r   r>  r[   r]   r/  )r+   r(  r?  r  r  r*  )r$   r8  r9  r  r   r\   r?  r~   rz   r]   r‹   r%   r%   r&   Úcompile_font^  s$    

zPara.compile_fontc           	      C   s�   |d }|  dd¡}t|ƒ}| d¡ | d|f¡ | d|f¡ | dtf¡ |D ]}|  ||¡ qT| dtf¡ | d|f¡ | d¡ d S )NÚhrefr[   Úbluer-  re   rf   r/  )ÚgetÚHotLinkr+   rJ  r*  )	r$   r8  r9  r  r   Úurlrz   ÚLinkr‹   r%   r%   r&   Ú	compile_at  s    
zPara.compile_ac           	      C   s”   |d }|  dd ¡}t|ƒ}| d¡ |r8| d|f¡ | d|f¡ | dtf¡ |D ]}|  ||¡ qX| dtf¡ | d|f¡ | d¡ d S )NÚdestinationr[   r-  re   rf   r/  )rg  ÚInternalLinkr+   rJ  r*  ©	r$   r8  r9  r  r   Údestrz   rj  r‹   r%   r%   r&   Úcompile_linkƒ  s    
zPara.compile_linkc           	      C   sœ   |d }|  dd¡}t|ƒ}| d¡ |r8| d|f¡ | d|f¡ |rX| dtf¡ |D ]}|  ||¡ q\|r€| dtf¡ | d|f¡ | d¡ d S )Nrl  r[   rf  r-  re   rf   r/  )rg  ÚDefDestinationr+   rJ  r*  rn  r%   r%   r&   Úcompile_setLink“  s    
zPara.compile_setLinkc                 C   s:   t |ƒdkst|d tƒs"tdƒ‚|d }|  ||¡ d S )Nr4   r   z*content for bullet must be a single string)ri   rj   rk   r8   r)  )r$   r8  r9  r  r   r¬   r%   r%   r&   Úcompile_bullet©  s    zPara.compile_bulletc                 C   s6   | j }|j| j }|j}|j}| d||||f¡ d S )Nrb   )r  rß   r   rñ   rÞ   r+   )r$   r¬   r   r÷   r   r~   r]   r%   r%   r&   r)  °  s
    zPara.do_bulletc           	      C   s<   | j |dd�\}}}|D ]}|  ||¡ q| j ||d� d S )NÚCourier)r\   rE  rF  r%   r%   r&   Ú
compile_tt¸  s    zPara.compile_ttc                 C   s   |   ddi|||¡ d S )Nr\   Úsymbol)rd  rC  r%   r%   r&   Úcompile_greek¾  s    zPara.compile_greekc                 C   s   |  t|||| jƒ¡ d S r(   )r+   ÚEvalStringObjectr  rC  r%   r%   r&   Úcompile_evalStringÁ  s    zPara.compile_evalStringc                 C   s   |  t|||| jƒ¡ d S r(   )r+   Ú
NameObjectr  rC  r%   r%   r&   Úcompile_nameÄ  s    zPara.compile_namec                 C   s   |  t|||| jƒ¡ d S r(   )r+   ÚGetNameObjectr  rC  r%   r%   r&   Úcompile_getNameÇ  s    zPara.compile_getNamec                 C   s   |  t|||| jƒ¡ d S r(   )r+   Ú	SeqObjectr  rC  r%   r%   r&   Úcompile_seqÊ  s    zPara.compile_seqc                 C   s   |  t|||| jƒ¡ d S r(   )r+   ÚSeqResetObjectr  rC  r%   r%   r&   Úcompile_seqResetÍ  s    zPara.compile_seqResetc                 C   s   |  t|||| jƒ¡ d S r(   )r+   ÚSeqDefaultObjectr  rC  r%   r%   r&   Úcompile_seqDefaultÐ  s    zPara.compile_seqDefaultró   c                 C   s˜   |d u ri }| j }| d|¡}|| }td|d�}| |¡ | dd ¡}	| j}
t||||	d�}| j}|
j| j  | _|_|j|d� | 	d¡ || _d S )Nr÷   zrml2pdf internal embedded style©rå   ræ   r  ©r  r  r.  rg   )
r  rg  râ   rï   r  r  r   rÚ   r0  r+   )r$   r8  r9  r  r   Ú	stylenamer  r÷   Znewstyler  ÚmystyleÚtheparaZmybaseindentr%   r%   r&   rU  Ó  s    

zPara.compile_para)NNNNr   )N)NN)NNN)rP  )ró   )(r§   r¨   r©   rÜ   rÝ   r'   r
  r  r   rÍ   r	  r"  r0  r*  r@  r1  rD  rH  rI  rK  rO  r[  r]  rb  rc  rd  rk  rp  rr  rs  r)  ru  rw  ry  r{  r}  r  r�  rƒ  rU  r%   r%   r%   r&   r  ±  sJ   
H!
:
)

+r  c                   @   s   e Zd Zdd„ Zddd„ZdS )rS  c           
      C   sˆ   || _ d}| d|¡ | _}ddd dœ| }| d|¡ | _}d|vrx|| }dd	lm} |j}|d
d|ƒ}	t|	ƒ|d< d| _d| _	d S )Nrô   r÷   Údiscr°   )rP  r\  r^  ÚtyperÚ   r   r   ÚXXXrt  r4   )
r7  rg  r÷   Útyprh   r   r   rk   r  Ú_first)
r$   r7  rV  r  r÷   rŒ  Zthestyler   r]   r   r%   r%   r&   r'   ç  s    zbulletMaker.__init__Nc                 C   sf  | j sd|d< nd| _ | j}| j}|d u �r<|dkrŒ|dkrFtdƒ}n4|dkrXtdƒ}n"|d	krjtd
ƒ}ntdt|ƒ ƒ‚d|vrŠd|d< n°|dk�r,d|v r®t|d ƒ| _n|  jd7  _|dkrÐt| jƒ}nZ|dkrôt	dƒ| j d }t|ƒ}n6|dk�rt	dƒ| j d }t|ƒ}ntdt|ƒ ƒ‚ntdt|ƒ ƒ‚d|v�rN||d< d|v�rb| j
|d< d S )Nr´   rÜ   r   rP  r‰  ém   Zcircleél   Zsquareén   z&unordered list type %s not implementedrñ   ZZapfDingbatsr\  rî   r4   r°   rè   ÚAz&ordered bullet type %s not implementedzbad tagname r  r÷   )r�  rŒ  r7  Úchrr8   rC   Úintr  rk   Úordr÷   )r$   rV  ra  rŒ  r7  Ztheordr%   r%   r&   rT  ú  s<    








zbulletMaker.makeBullet)N)r§   r¨   r©   r'   rT  r%   r%   r%   r&   rS  æ  s   rS  c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )rx  z)this will only work if rml2pdf is presentZ
evalStringc                 C   s$   |si }|| _ || _|| _|| _d S r(   )r8  r9  r  r  )r$   r8  r9  r  r  r%   r%   r&   r'   %  s    zEvalStringObject.__init__c                 C   s&   ddl m} | || ji ¡ }| _|S )Nr   )Ú
Controller)Úrlextra.rml2pdf.rml2pdfr•  ZprocessTupler  Úop)r$   rp   Úenginer•  r—  r%   r%   r&   ÚgetOp-  s    zEvalStringObject.getOpc                 C   sV   ddl m} | j}|sg }| j| j|| jf}|  ||¡ }| _t|ƒ}|||j	|j
ƒS ©Nr   r   )rh   r   r9  r7  r8  r  r™  r—  rk   r   r   )r$   r˜  r   r9  rp   r—  r�   r%   r%   r&   rY   3  s    zEvalStringObject.widthc                 C   s   |  t| jƒ¡ d S r(   )r›   rk   r—  ©r$   r˜  r¡   r    r%   r%   r&   rœ   @  s    zEvalStringObject.executeN)	r§   r¨   r©   rð   r7  r'   r™  rY   rœ   r%   r%   r%   r&   rx     s   rx  c                   @   s   e Zd Zdd„ ZdS )r~  c           	      C   sd   ddl m} |ƒ }| j}d|v r:|d }||  }| _|S d|v rL|d }nd }| |¡ }| _|S )Nr   ©ÚgetSequencerÚtemplater  )Úreportlab.lib.sequencerr�  r8  r—  Znextf)	r$   rp   r˜  r�  ÚglobalsequencerÚattrZtemplr—  r  r%   r%   r&   r™  E  s    
zSeqObject.getOpN©r§   r¨   r©   r™  r%   r%   r%   r&   r~  C  s   r~  c                   @   s   e Zd ZdZdd„ ZdS )rz  rå   c                 C   s   d S r(   r%   r›  r%   r%   r&   rœ   X  s    zNameObject.executeN)r§   r¨   r©   r7  rœ   r%   r%   r%   r&   rz  V  s   rz  c                   @   s   e Zd Zdd„ ZdS )r‚  c                 C   sP   ddl m} |ƒ }| j}z|d }W n ty:   d }Y n0 | |¡ d| _dS )Nr   rœ  r  r4  )rŸ  r�  r8  rÁ   ZsetDefaultCounterr—  )r$   rp   r˜  r�  r   r¡  Údefaultr%   r%   r&   r™  ]  s    

zSeqDefaultObject.getOpNr¢  r%   r%   r%   r&   r‚  [  s   r‚  c                   @   s   e Zd Zdd„ ZdS )r€  c                 C   st   ddl m} |ƒ }| j}z|d }W n ty:   d }Y n0 zt|d ƒ}W n   d}Y n0 | ||¡ d| _dS )Nr   rœ  r  Úbaser4  )rŸ  r�  r8  rÁ   r“  Úresetr—  )r$   rp   r˜  r�  r   r¡  r  r¤  r%   r%   r&   r™  k  s    

zSeqResetObject.getOpNr¢  r%   r%   r%   r&   r€  i  s   r€  c                   @   s   e Zd ZdZdS )r|  ÚgetNameN)r§   r¨   r©   r7  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 )
rB  r‹  c                 C   s
   || _ d S r(   )Úexample)r$   r§  r%   r%   r&   r'   €  s    zPageNumberObject.__init__c                 C   s   ddl m} || j|j|jƒS rš  )rh   r   r§  r   r   )r$   r˜  r   r%   r%   r&   rY   ƒ  s    zPageNumberObject.widthc                 C   s   |  ¡ }| t|ƒ¡ d S r(   )ZgetPageNumberr›   rk   )r$   r˜  r¡   r    Únr%   r%   r&   rœ   ‡  s    zPageNumberObject.executeN)r‹  )r§   r¨   r©   r'   rY   rœ   r%   r%   r%   r&   rB  ~  s   
rB  c                  C   s€   ddl m} m} G dd„ d| ƒatƒ aG dd„ d| ƒatƒ }||d< ||d< ||d	< t|d
< t|d< t|d< t|d< t|d< dS )z8make the para the default para implementation in rml2pdfr   )ÚMapNoder•  c                   @   s   e Zd Zdd„ ZdS )Ú
paraMapperc                 S   sž   |\}}}}|d }	|  d|	¡}	||	 }
td|
d�}| |¡ |  dd ¡}d }|s‚t|ƒdkr‚|d }t|tƒr‚d|vr‚t||ƒ}|d u ršt||||d	�}|S )
Nz.defaultStyler÷   zrml2pdf internal styler„  r  r4   r   rö   r…  )rg  râ   rï   ri   rj   rk   rõ   r  )r$   Ú	nodetupleÚ
controllerr  Ú	overridesr7  r8  r9  r  r†  r÷   r‡  r  rŠ   r¬   r%   r%   r&   r  “  s    

zparaMapper.translateN©r§   r¨   r©   r  r%   r%   r%   r&   rª  ‘  s   rª  c                   @   s   e Zd Zdd„ ZdS )ÚulMapperc                 S   s   di |gd f}t  ||||¡S )NÚpara)ÚtheParaMapperr  )r$   r«  r¬  r  r­  rˆ  r%   r%   r&   r  ©  s    zulMapper.translateNr®  r%   r%   r%   r&   r¯  §  s   r¯  rP  r\  r^  r°  Úh1Úh2Úh3ÚtitleN)r–  r©  r•  rª  r±  r¯  )r©  r•  ZtheListMapperr%   r%   r&   ÚEmbedInRml2pdfŒ  s    r¶  c              	   C   sŠ  ddl m} ddlm} ddddœ}|dd… |v r>| d	¡ dr d|vr g }| ¡ D ]}| |d	 ¡ qV|r’|d
 }|d
d … |vr’| ¡ |d
< | |¡ |S |d u r¬g }| d¡}	d}
|	d
 }|	D �]¼}|
�s| d¡}|dk�r|d |… }|d dk�r~z6|d dk�r$t	|dd … dƒ}nt	|dd … ƒ}W n t
�yN   d
}Y n0 |dk�rtt|ƒ||d d …  }nd| }n„||v �r¼|| }t|tƒ�r¦| d¡}|||d d …  }nF||v �rú|| }t|tƒ�rä| d¡}|||d d …  }nd| }nd| }| ¡ }|d d
… D ]}| |d	 ¡ �q |�r€|�r€|d
 |v �rd| |d
 d	 ¡ n|d
  ¡ }|�r€| |¡ d}
qÆ|S )Nr   )Úgreeks)Ú
whitespacer2  r3  rö   )ÚltÚgtÚampr4   rX   r1   ú;ú#r   é   é   Úutf8)Zreportlab.platypus.paraparserr·  rÕ   r¸  r+   rÍ   rm   rE   Úfindr“  r8   r’  rj   ÚbytesÚdecode)r˜  r¬   r   r·  r¸  ÚstandardrŠ   r   r’   Zamptextrt   ZlastfragÚfragmentÚsemirå   r¨  r�   Z	sfragmentr$  r%   r%   r&   r5  ¸  st    














r5  c                 C   sL   d| vrd| vrt || d�S ddlm} |j| dd�}t|||d|d�S dS )	zf Paragraph(text, style, bulletText=None)
    intended to be like a platypus Paragraph but better.
    rö   r2  )rø   r   ©Ú	rparsexmlN©ZentityReplacerr  )rõ   rÔ   rÈ  ÚparsexmlSimpler  )r¬   r÷   r  Zfragsr  rÈ  Ú
parsedparar%   r%   r&   Ú	Paragraph  s
    rÌ  c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚUnderLineHandlerNc                 C   s
   || _ d S r(   )r[   )r$   r[   r%   r%   r&   r'     s    zUnderLineHandler.__init__c                 C   s   || _ || _d S r(   )ÚxStartÚyStart)r$   r   r   r°  r    r¡   r%   r%   r&   r™     s    zUnderLineHandler.start_atc                 C   sZ   |j d }| ¡  | j}| jd u r(|j}| |¡ | | j| j| ||| ¡ | ¡  d S )Ng       @)	r   Ú	saveStater[   r   ZsetStrokeColorrL   rÎ  rÏ  ÚrestoreState)r$   r   r   r°  r    r¡   Úoffsetr[   r%   r%   r&   r�     s    


zUnderLineHandler.end_at)N)r§   r¨   r©   r'   r™   r�   r%   r%   r%   r&   rÍ    s   
rÍ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )rh  c                 C   s
   || _ d S r(   )ri  )r$   ri  r%   r%   r&   r'   %  s    zHotLink.__init__c                 C   s8   |j }| j| j||| g}tr(td|ƒ |  ||¡ d S )NzLINKING RECTANGLE)r   rÎ  rÏ  rA   rB   Úlink)r$   r   r   r°  r    r¡   r|   Úrectr%   r%   r&   r�   (  s
    
zHotLink.end_atc                 C   s   |j | j|dd� d S )Nr4   )Úrelative)ZlinkURLri  )r$   rÔ  r    r%   r%   r&   rÓ  0  s    zHotLink.linkN)r§   r¨   r©   r'   r�   rÓ  r%   r%   r%   r&   rh  #  s   rh  c                   @   s   e Zd Zdd„ ZdS )rm  c                 C   s    | j }d}|j|||dd� d S )Nr4  z[0 0 0])ZBorder)ri  ZlinkRect)r$   rÔ  r    ÚdestinationnameÚcontentsr%   r%   r&   rÓ  5  s    zInternalLink.linkN)r§   r¨   r©   rÓ  r%   r%   r%   r&   rm  3  s   rm  c                   @   s   e Zd ZdZdd„ ZdS )rq  r   c                 C   s0   | j }| js,|\}}}}| |||¡ d| _d S )Nr4   )ri  ÚdefinedZbookmarkHorizontal)r$   rÔ  r    rÖ  r   r   Úx1Úy1r%   r%   r&   rÓ  >  s
    zDefDestination.linkN)r§   r¨   r©   rØ  rÓ  r%   r%   r%   r&   rq  :  s   rq  c                 C   s(   |   ¡ }g }|D ]}| |d ¡ q|S )NrX   )rÍ   r+   )r¬   r6  rŠ   r‹   r%   r%   r&   Ú
splitspaceE  s
    rÛ  a¤  
This is Text.
<b>This is bold text.</b>
This is Text.
<i>This is italic text.</i>

<ul>
    <li> this is an element at 1
more text and even more text &amp; on and on and so forth
more text and even more text and on &amp; on and so forth
more text and even more text and on and on &amp; so forth
more text and even more text and on and on and so forth
more text and even more text and on and on and so forth --&gt;
more text <tt>monospaced</tt> and back to normal

    <ul>
        <li> this is an element at 2

more text and even more text and on and on and so forth
more text and even more text and on and on and so forth

        <ul>
            <li> this is an element at 3

more text and even more text and on and on and so forth


                <dl bulletFontName="Helvetica-BoldOblique" spaceBefore="10" spaceAfter="10">
                <dt>frogs</dt> <dd>Little green slimy things. Delicious with <b>garlic</b></dd>
                <dt>kittens</dt> <dd>cute, furry, not edible</dd>
                <dt>bunnies</dt> <dd>cute, furry,. Delicious with <b>garlic</b></dd>
                </dl>

more text and even more text and on and on and so forth

            <ul>
                <li> this is an element at  4
more text and even more text and on and on and so forth
                </li>
                <li> this is an element at4
more text and even more text and on and on and so forth
                </li>
            </ul>
more text and even more text and on and on and so forth
more text and even more text and on and on and so forth

            </li>
        </ul>
more text and even more text and on and on and so forth
more text and even more text and on and on and so forth
        </li>
    </ul>
<u><b>UNDERLINED</b> more text and even more text and on and on and so forth
more text and even more text and on and on and so forth</u>

<ol type="a">
    <li value="3">first element of the alpha list

     <ul type="square">
        <li>first element of the square unnumberred list</li>

        <li>second element of the unnumberred list</li>

        <li>third element of the unnumberred list
        third element of the unnumberred list
        third element of the unnumberred list
        third element of the unnumberred list
        third element of the unnumberred list
        third element of the unnumberred list
        third element of the unnumberred list
        </li>

        <li>fourth element of the unnumberred list</li>

      </ul>

    </li>

    <li>second element of the alpha list</li>

    <li>third element of the alpha list
    third element of the unnumberred list &amp;#33; --> &#33;
    third element of the unnumberred list &amp;#8704; --> &#8704;
    third element of the unnumberred list &amp;exist; --> &exist;
    third element of the unnumberred list
    third element of the unnumberred list
    third element of the unnumberred list
    </li>

    <li>fourth element of the alpha list</li>

  </ol>


    </li>
</ul>
u…  
<a href="http://www.reportlab.com">goto www.reportlab.com</a>.


<para alignment="justify">
<font color="red" size="15">R</font>ed letter. thisisareallylongword andsoisthis andthisislonger
justified text paragraph example with a pound sign Ã‚Â£
justified text paragraph example
justified text paragraph example
</para>

<para alignment="center">
<font color="green" size="15">G</font>reen letter.
centered text paragraph example
centered text paragraph example
centered text paragraph example
</para>
<para alignment="right">
<font color="blue" size="15">B</font>lue letter.
right justified text paragraph example
right justified text paragraph example
right justified text paragraph example
</para>
<para alignment="left">
<font color="yellow" size="15">Y</font>ellow letter.
left justified text paragraph example
left justified text paragraph example
left justified text paragraph example
</para>

c           
      C   sü   ddl m} ddlm} ddlm} |j|d d�}|dd ƒ}t||ƒ}| d| d| ¡\}}	t	d	|	|fƒ |  
¡  |  d
| d
| ¡ | jddd| d| dd
d� | |_|  
¡  | ¡  |  ¡  |  d
dd¡ | jdd||	dd
d� |  ¡  |  ¡  d S )Nr   ©Úinch)ÚParagraphStylerÇ  rÉ  rò   é   r   z
wrapped asr4   )ÚfillZstroke)Úreportlab.lib.unitsrÝ  r  rÞ  rÔ   rÈ  rÊ  r  r   rB   rÐ  r  rÔ  r  r	  rÑ  ZsetStrokeColorRGBÚshowPage)
r  ZtestpararÝ  rÞ  rÈ  rË  ÚSÚPr$  rƒ   r%   r%   r&   Útest2Ð  s&    

rå  zhttp://www.reportlab.comr-  )r   éd   )r   éÈ   )rb   zvery long bulleté2   rt  é   rd   r\   )r]   r   )r   ré  z1This is the first segment of the first paragraph.re   zÐHOTLINK This is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. rf   rg   )rb   ZBulletr   rt  é   zþThis is the SECOND!!! segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. )rb   z"Bullet not quite as long this timerè  rt  rê  )r\   zHelvetica-Oblique)r[   Zredz4This is the THIRD!!! segment of the first paragraph.zÈThis is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. This is the first segment of the first paragraph. )r    rß  zraised ztext )r    iöÿÿÿzlowered znormal r/  )r   rè  )rb   ÚOrè  rt  ré  )r\   r   a  And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a And this is the remainder of the paragraph indented further. a a a a a a a a c                  C   s   ddl m }  ddlm} ddlm} d}| |¡}t|tƒ t|tƒ t	t	 t	 }i }|�rt
dƒ | |d| ¡ | ¡ }| dd¡ tƒ }| |¡ d|_d|_d| }	d	}
| |	|
|¡\}}}}trÒ| |ƒ | |||¡}| |¡ | ¡  t
d
d|d d|d ƒ qV| ¡  t
|ƒ d S )Nr   )Úpprint)r    rÜ  zparatest0.pdfzNEW PAGErê  é   iô  z==============================zx=r   zy=r   )rì  Zreportlab.pdfgenr    rá  rÝ  ZCanvasrå  ÚtestparagraphÚtestparagraph1Útest_programrB   r  r  rž   r   rW   r   r   rT   rA   r¦   r  râ  Úsave)rì  r    rÝ  r,  r  rI   rR   r&  r#  rF   rG   Zformattedprogramrû   r%   r%   r&   Útest	  s:    




rò  Ú__main__)N)N)NNN)<rð   rh   r   Zreportlab.lib.rl_accelr   Zreportlab.platypus.flowablesr   rÔ   r   r  r   rA   r%  r7   r!   r	   r
   r   r   r   r;   r?   r   r   r¶   r¹   rÃ   rÏ   rØ   rÙ   râ   r  rõ   r  r  r  rS  rx  r~  rz  r‚  r€  r|  rB  r¶  r5  rÌ  rÍ  rJ  rh  rm  rq  rÛ  rî  rï  rå  Ztestlinkrð  rò  r§   r%   r%   r%   r&   Ú<module>   s  <	     n%ó $
    9:#,
L
	b ø	÷
ÿ÷õùõíøíäÿãá ðá0Ð1þÐ4!
