U
    L»{j�9  ã                   @   sn   d Z dZdZdZddlmZ ddlmZmZm	Z	m
Z
 dZdd	„ Zddd„ZG dd„ de
ƒZG dd„ deƒZdS )zHTML Renderer for FPDF.pyz%Mariano Reingart <reingart@gmail.com>z#Copyright (C) 2010 Mariano ReingartzLGPL 3.0é   )ÚFPDF)ÚPY3KÚ
basestringÚunicodeÚ
HTMLParserFc                 C   s   t | ƒd d S )Nçffffff9@ç      R@©Úint)Zpx© r   úH/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fpdf/html.pyÚpx2mm   s    r   ú#000000c                 C   sH   | rDt | dd… dƒ}t | dd… dƒ}t | dd… dƒ}|||fS d S )Nr   é   é   é   é   r	   )ÚcolorÚrÚgÚbr   r   r   Úhex2dec   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d„ Z	dd„ Z
dd„ Zdd„ Zd!dd„Zd"dd„Zd#dd„Zdd„ Zdd„ ZdS )$Ú	HTML2FPDFzRender basic HTML to FPDFNc                 C   sà   t  | ¡ i | _d| _d| _d| _i | _d | _g | _|| _	|pDdd„ | _
d | _ | _| _d| _g | _|  dd¡ d| _d| _d | _d | _d | _d | _d| _d | _d | _d | _d | _d | _d | _| _tdd	d
dddd�| _ d S )NFÚ c                 S   s   | S ©Nr   )Úsrcr   r   r   Ú<lambda>'   ó    z$HTML2FPDF.__init__.<locals>.<lambda>é    Útimesé   é   g      ø?g¸…ëQ¸ò?r   g�Âõ(\�ê?gq=
×£på?)Úh1Úh2Úh3Úh4Zh5Zh6)!r   Ú__init__ÚstyleÚpreÚhrefÚalignÚ
page_linksÚfontÚ
font_stackÚpdfÚ	image_mapr   r   r   ÚindentÚbulletÚset_fontÚ	font_facer   ÚtableÚtable_col_widthÚtable_col_indexÚtdÚthÚtrÚtheaderÚtfooterÚtheadÚtfootÚtheader_outÚtfooter_outÚdictÚhsize)Úselfr.   r/   r   r   r   r&      s8    
zHTML2FPDF.__init__c                 C   s|   |d dkrl| j j| j j | j j }| jd d dkrT|t| jd d d… ƒd 9 }t|d d… ƒ| d S t|ƒd S d S )Néÿÿÿÿú%Úwidthç      Y@g     @Y@g      @)r.   ÚwÚr_marginÚl_marginr4   r
   )rB   ÚlengthÚtotalr   r   r   Úwidth2mm;   s    zHTML2FPDF.width2mmc              	      s  ˆ j d k	�rldˆ j krRdˆ j krRzˆ jˆ j g}W q” tk
rN   tdƒ‚Y q”X nBdˆ j kr„ˆ j}tˆ j d ƒ}ˆ j||| … }nˆ j  dd¡g}t‡ fdd„|D ƒƒ}tˆ j  dd¡ƒd	 pÈˆ jd
 }|ˆ _	tˆ j
 dd¡ƒ}ˆ j�sˆ j  dd¡d  ¡ }|�od}n,ˆ  dd¡ |�p d}ˆ j  dd¡d  ¡ }tˆ j  dˆ j dd¡¡ƒ}	ˆ jd k	�r|ˆ j ||||d|f|	f¡ ˆ jd k	�r¤ˆ j ||||d|f|	f¡ |ˆ j�rÂˆ jd d d �pÄd }
ˆ jj|
 ˆ jjk�rˆ j�sˆ  ¡  ˆ j ¡  d ˆ _ˆ _ˆ jd k�rˆ jd k�rˆ j�s,ˆ  ¡  ˆ  |||	¡ t�rTtdˆ jj ||dƒ ˆ j !||||d|¡ n–ˆ j
d k	�rznˆˆ j"�r¼t�r”td|dƒ ˆ j !dˆ j|ddˆ j"d  ¡ ˆ j#¡ nF| $dd¡}ˆ j#�ràˆ  %ˆ j#|¡ n"t�ròtd|dƒ ˆ j &ˆ j|¡ d S )NrE   Úcolspanz9Table column/cell width not specified, unable to continueZ240c                    s   g | ]}ˆ   |¡‘qS r   ©rL   ©Ú.0Zlenght©rB   r   r   Ú
<listcomp>Q   s     z)HTML2FPDF.handle_data.<locals>.<listcomp>Úheightr   é   gÍÌÌÌÌÌô?Úborderr*   ÚLZLRÚBTÚCÚbgcolorr   r   Fztd cellÚ*ÚcellÚ
ú Úwrite)'r7   r5   r6   Ú
IndexErrorÚRuntimeErrorr
   ÚgetÚsumÚhÚtable_hr4   r8   ÚupperÚ	set_styler   r9   r<   r:   Úappendr=   r;   r.   ÚyZpage_break_triggerÚoutput_table_footerZadd_pager>   r?   Úoutput_table_headerÚ
box_shadowÚDEBUGÚprintÚxr[   r*   r)   ÚreplaceÚput_linkr^   )rB   ÚtxtÚlÚirM   rG   rc   rU   r*   rY   rS   r   rQ   r   Úhandle_dataD   sd    
 
$
  ( zHTML2FPDF.handle_datac                 C   sR   t rtd|||ƒ |rN| jj}| jj|Ž  | j | jj| jj||d¡ || j_d S )Nrk   ÚF)rl   rm   r.   Ú
fill_colorZset_fill_colorÚrectrn   rh   )rB   rG   rc   rY   rv   r   r   r   rk   |   s     zHTML2FPDF.box_shadowc                 C   sž   | j r”| j}| jj}| j | j¡ |  dd¡ | j D ]*\}}|  |d |d |¡ | jj|Ž  q4|  d|¡ | j 	| j d d d ¡ | j | j¡ d| _
d S )NrW   Tr   r   )r:   r   r.   rn   Úset_xÚtable_offsetrf   rk   r[   Úlnr>   )rB   r   rn   r[   rY   r   r   r   rj   „   s    zHTML2FPDF.output_table_headerc                 C   s˜   | j rt| jj}| j | j¡ | j D ]*\}}|  |d |d |¡ | jj|Ž  q"| j | j d d d ¡ | j |¡ t| j	 
dd¡ƒrŽ|  ¡  d| _d S )Nr   r   rU   T)r;   r.   rn   rx   ry   rk   r[   rz   r
   r4   ra   Úoutput_table_sepr?   )rB   rn   r[   rY   r   r   r   ri   “   s    zHTML2FPDF.output_table_footerc                    sP   ˆ j  ˆ j¡ ˆ j j}ˆ j j}t‡ fdd„ˆ jD ƒƒ}ˆ j  |||| |¡ d S )Nc                    s   g | ]}ˆ   |¡‘qS r   rN   rO   rQ   r   r   rR   ¥   s     z.HTML2FPDF.output_table_sep.<locals>.<listcomp>)r.   rx   ry   rn   rh   rb   r5   Úline)rB   Úx1Úy1rG   r   rQ   r   r{   ¡   s
    zHTML2FPDF.output_table_sepc                 C   sz  t |ƒ}trtd||ƒ |dks0|dks0|dkr<|  |d¡ |dkrN|d | _|dkrb| j d	¡ |d
krŠ| j d	¡ |rŠ|rŠ| d¡| _|| j	krÞ| j	| }| j d	| ¡ | j 
ddd¡ | j d| ¡ |rÞ| d¡| _|dkrî|  ¡  |dk�r2| j ddd¡ | j d¡ |  dd¡ |  dd¡ d| _|dk�rV|  
ddd¡ | j d¡ |dk�rz|  jd7  _| j d¡ |dk�rž|  jd7  _| j d¡ |dk�r,| j | jd  ¡ | j 
d!dd¡ | j| jd  }t|tƒ�s|d7 }|| j| jd < d"| }| j | jd#d$| j |f ¡ |  
¡  |d%k�rð| j | j| j| jf¡ d&|k�rvt|d& ƒ| _| j
tŽ  t| _d'|k�r¼| d'¡ ¡ }z| j |¡ || _W n tk
�rº   Y nX d(|k�rðt| d(¡ƒ}| jj| jt|ƒd)� || _|d*k�r¾t d+d,„ | ¡ D ƒƒ| _d-| jk�r(d.| jd-< | jd- d/ d0k�r„| jj | jj! | jj" }|t| jd- d d/… ƒd1 9 }| jj | d2 | _#g | _$d | _%| _&g | _'g | _(d | _)d | _*d| _+| j ¡  |d3k�rôt d4d,„ | ¡ D ƒƒ| _,d| _-| j .| j#¡ |d5k�rt d6d,„ | ¡ D ƒƒ| _/|d7k�r\t d8d,„ | ¡ D ƒƒ| _/d| _0d-| j/k�r\| j$ | j/d- ¡ |d9k�rli | _)|d:k�r|i | _*|d;k�r<d<|k�r<| j 1¡ }| j 2¡ }	t3| d-d¡ƒ}t3| d=d¡ƒ}
| j�rø| jd  4¡ d>k�rø| jj | d2 |d2  }| jj5|  6|d< ¡||	||
| jd?� | j .|| ¡ | j 7|	|
 ¡ |dk�sZ|dk�sZ|dk�rf|  |d¡ |d@k�rvdA| _d S )BNZSTARTTAGr   rs   Úur   Úar)   Úbrr   Úpr*   é–   r   r    Úhrr(   ZCourierr   é   rW   FÚITÚ
blockquoteéd   é-   r   Úulõ   Â•ÚolZlir!   é¾   z%s. z%s%s z     r,   r   ÚfaceÚsize)r�   r4   c                 S   s   g | ]\}}|  ¡ |f‘qS r   ©Úlower©rP   ÚkÚvr   r   r   rR   ê   s     z-HTML2FPDF.handle_starttag.<locals>.<listcomp>rE   z100%rC   rD   rF   g       @r9   c                 S   s   g | ]\}}|  ¡ |f‘qS r   r�   r’   r   r   r   rR   ú   s     r7   c                 S   s   g | ]\}}|  ¡ |f‘qS r   r�   r’   r   r   r   rR   þ   s     r8   c                 S   s   g | ]\}}|  ¡ |f‘qS r   r�   r’   r   r   r   rR      s     r<   r=   Zimgr   rS   rX   )ÚlinkÚcenterZCenter)8r@   rl   rm   rf   r)   r.   rz   ra   r*   rA   Úset_text_colorÚset_font_sizeÚput_liner2   r(   r0   r1   rg   rc   Ú
isinstancer   r^   r-   r3   Ú	font_sizer   r   r‘   r`   r
   Úitemsr4   rG   rH   rI   ry   r5   r>   r?   r:   r;   r<   r=   rd   r9   r6   rx   r7   r8   Úget_xÚget_yr   re   Úimager/   Zset_y)rB   ÚtagÚattrsr“   r1   rŽ   r�   rG   rn   rh   rc   r   r   r   Úhandle_starttag©   sê     
 

 






















    ÿ
zHTML2FPDF.handle_starttagc                 C   s€  t rtd|ƒ |dks.|dks.|dks.|dkrP| j d¡ |  ¡  |  ¡  d | _|dkr€| j | jpfdd	d
¡ | j d
¡ d| _	|dkr¢|  
ddd¡ | j d¡ |dkr®d}|dkrºd}|dksÒ|dksÒ|dkrÞ|  |d¡ |dkrìd	| _|dkrúd	| _|dk�r|  jd8  _| j ¡  |dk�rX| j�s6|  ¡  d | _d| _d | _d | _| j ¡  |dk�rhd | _|dk�rxd | _|dk�r˜| j | j¡ |  ¡  |dk�rÆ| j}| jd k�rÀ| j |¡ d | _|dk�sÚ|dk�r$| j�rüt �rðtdƒ |  d d¡ |  jt| j d!d"¡ƒ7  _d | _d| _|d#k�rl| j  ¡ \}}}|�rZ| j 
ddd¡ d | _!|  ||¡ d | _|d$k�r|d | _d S )%NZENDTAGr"   r#   r$   r%   é   r(   ZTimesr   r    Fr‡   r   r   Ústrongr   Zemrs   r   r€   r‚   )rŠ   rŒ   r   r4   r<   r=   Ztbodyr9   r7   r8   zrevert stylerW   rM   Ú1r,   r–   )"rl   rm   r.   rz   r2   rf   r*   r,   r˜   r(   r—   r)   r0   r1   Úpopr?   ri   r4   r8   r:   r;   r<   r=   rx   ry   r{   rd   r9   r6   r
   r7   ra   r-   r   )rB   r    rc   rŽ   r�   r   r   r   r   Úhandle_endtag  s€     
 







 

zHTML2FPDF.handle_endtagc                 C   sŠ   |r
|| _ |r2|| _|d d | _tr2td| jƒ | j | j p@ddd¡ | j | jpVd¡ |  dd¡ |  d	d¡ |  d
d¡ |  	¡  d S )Nr   r   ÚHr   r   r    r   Fr   rs   )
r3   r›   rc   rl   rm   r.   r2   r˜   rf   r—   )rB   rŽ   r�   r   r   r   r2   \  s     zHTML2FPDF.set_fontc                 C   sd   |r"| j  | ¡ ¡}|| j | ¡ < d}dD ]}| j  |¡r*||7 }q*trRtd|ƒ | j d|¡ d S )Nr   )r   rs   r   ZSET_FONT_STYLE)r'   ra   r‘   rl   rm   r.   r2   )rB   r    ÚenableÚtr'   Úsr   r   r   rf   j  s    
 
zHTML2FPDF.set_styler   c                 C   sF   |d kr | j  | j| j| j¡ n"| j  |||¡ || _|| _|| _d S r   )r.   r—   r   r   r   )rB   r   r   r   r   r   r   r—   v  s    zHTML2FPDF.set_text_colorc                 C   sD   |   ddd¡ |  dd¡ | j d||¡ |  dd¡ |   d¡ d S )Nr   éÿ   r   Tr   F)r—   rf   r.   r^   )rB   Úurlrq   r   r   r   rp     s
    zHTML2FPDF.put_linkc                 C   sJ   | j  d¡ | j  | j  ¡ | j  ¡ | j  ¡ d | j  ¡ ¡ | j  d¡ d S )Nr!   é»   r   )r.   rz   r|   r�   rž   rQ   r   r   r   r™   ‡  s    .zHTML2FPDF.put_line)N)NN)NN)Nr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   rL   rt   rk   rj   ri   r{   r¢   r§   r2   rf   r—   rp   r™   r   r   r   r   r      s   
	8pC


	r   c                   @   s   e Zd Zddd„ZdS )Ú	HTMLMixinNc                 C   s"   t | |ƒ}| |¡}| |¡ dS )z Parse HTML and convert it to PDFN)r   ÚunescapeÚfeed)rB   Útextr/   Zh2pr   r   r   Ú
write_html�  s    

zHTMLMixin.write_html)N)r¯   r°   r±   r·   r   r   r   r   r³   Œ  s   r³   N)r   )r²   Ú
__author__Ú__copyright__Ú__license__Zfpdfr   Zpy3kr   r   r   r   rl   r   r   r   Úobjectr³   r   r   r   r   Ú<module>   s   
  t