U
    B€BT9  ã                   @   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)Úpx© r   úF/home/ubuntu/graampay/app_env/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Úh4Úh5Ú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)Úselfr1   r2   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      @)r1   ÚwÚr_marginÚl_marginr7   r
   )rE   Ú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 )NrH   Úcolspanz9Table column/cell width not specified, unable to continueÚ240c                    s   g | ]}ˆ   |¡‘qS r   ©rO   ©Ú.0Úlenght©rE   r   r   Ú
<listcomp>Q   s     z)HTML2FPDF.handle_data.<locals>.<listcomp>Úheightr   é   gÍÌÌÌÌÌô?Úborderr-   ÚLÚLRÚBTÚCÚbgcolorr   r   Fztd cellÚ*ÚcellÚ
ú Úwrite)'r:   r8   r9   Ú
IndexErrorÚRuntimeErrorr
   ÚgetÚsumÚhÚtable_hr7   r;   ÚupperÚ	set_styler   r<   r?   r=   Úappendr@   r>   r1   ÚyÚpage_break_triggerÚoutput_table_footerÚadd_pagerA   rB   Úoutput_table_headerÚ
box_shadowÚDEBUGÚprintÚxra   r-   r,   ÚreplaceÚput_linkrd   )rE   ÚtxtÚlÚirP   rJ   ri   rZ   r-   r_   rX   r   rV   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 )Nrs   ÚF)rt   ru   r1   Ú
fill_colorÚset_fill_colorÚrectrv   rn   )rE   rJ   ri   r_   r~   r   r   r   rs   |   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 )Nr]   Tr   r   )r=   r   r1   rv   Úset_xÚtable_offsetrl   rs   ra   ÚlnrA   )rE   r   rv   ra   r_   r   r   r   rr   „   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   rZ   T)r>   r1   rv   r   r‚   rs   ra   rƒ   r
   r7   rg   Úoutput_table_seprB   )rE   rv   ra   r_   r   r   r   rp   “   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   rR   rS   rV   r   r   rW   ¥   s     z.HTML2FPDF.output_table_sep.<locals>.<listcomp>)r1   r   r‚   rv   rn   rh   r8   Úline)rE   Úx1Úy1rJ   r   rV   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 )BNÚSTARTTAGr   r{   Úur   Úar,   Úbrr   Úpr-   é–   r   r!   Úhrr+   ÚCourierr   é   r]   FÚITÚ
blockquoteéd   é-   r   Úulõ   Â•ÚolÚlir"   é¾   z%s. z%s%s z     r/   r   ÚfaceÚsize)r›   r7   c                 S   s   g | ]\}}|  ¡ |f‘qS r   ©Úlower©rT   ÚkÚvr   r   r   rW   ê   s     z-HTML2FPDF.handle_starttag.<locals>.<listcomp>rH   z100%rF   rG   rI   g       @r<   c                 S   s   g | ]\}}|  ¡ |f‘qS r   rœ   rž   r   r   r   rW   ú   s     r:   c                 S   s   g | ]\}}|  ¡ |f‘qS r   rœ   rž   r   r   r   rW   þ   s     r;   c                 S   s   g | ]\}}|  ¡ |f‘qS r   rœ   rž   r   r   r   rW      s     r?   r@   Úimgr   rX   r^   )ÚlinkÚcenterÚCenter)8rC   rt   ru   rl   r,   r1   rƒ   rg   r-   rD   Úset_text_colorÚset_font_sizeÚput_liner5   r+   r3   r4   rm   ri   Ú
isinstancer   rd   r0   r6   Ú	font_sizer   r   r   rf   r
   Úitemsr7   rJ   rK   rL   r‚   r8   rA   rB   r=   r>   r?   r@   rj   r<   r9   r   r:   r;   Úget_xÚget_yr   rk   Úimager2   Úset_y)rE   ÚtagÚattrsrŸ   r4   rš   r›   rJ   rv   rn   ri   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 )%NÚENDTAGr#   r$   r%   r&   é   r+   ÚTimesr   r!   Fr’   r   r   Ústrongr   Úemr{   r‰   rŠ   rŒ   )r•   r—   r   r7   r?   r@   Útbodyr<   r:   r;   zrevert styler]   rP   Ú1r/   r£   )"rt   ru   r1   rƒ   r5   rl   r-   r/   r¦   r+   r¥   r,   r3   r4   ÚpoprB   rp   r7   r;   r=   r>   r?   r@   r   r‚   r„   rj   r<   r9   r
   r:   rg   r0   r   )rE   r¯   ri   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   r{   )
r6   r©   ri   rt   ru   r1   r5   r¦   rl   r¥   )rE   rš   r›   r   r   r   r5   \  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   r{   r‰   ÚSET_FONT_STYLE)r*   rg   r   rt   ru   r1   r5   )rE   r¯   ÚenableÚtr*   Úsr   r   r   rl   j  s    
 
zHTML2FPDF.set_styler   c                 C   sF   |d kr | j  | j| j| j¡ n"| j  |||¡ || _|| _|| _d S r   )r1   r¥   r   r   r   )rE   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¥   rl   r1   rd   )rE   Úurlry   r   r   r   rx     s
    zHTML2FPDF.put_linkc                 C   sJ   | j  d¡ | j  | j  ¡ | j  ¡ | j  ¡ d | j  ¡ ¡ | j  d¡ d S )Nr"   é»   r   )r1   rƒ   r…   r«   r¬   rV   r   r   r   r§   ‡  s    .zHTML2FPDF.put_line)N)NN)NN)Nr   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   rO   r|   rs   rr   rp   r„   r±   rº   r5   rl   r¥   rx   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)rE   Útextr2   Ú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__Úfpdfr   Úpy3kr   r   r   r   rt   r   r   r   ÚobjectrÇ   r   r   r   r   Ú<module>   s   
  t