
    g9                     v    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 Zdd	Z G d
 de
      Z G d de      Zy)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                 $    t        |       dz  dz  S )Nffffff9@      R@int)pxs    a/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fpdf/html.pypx2mmr      s    r74<    c                 l    | r2t        | dd d      }t        | dd d      }t        | dd d      }|||fS y )Nr               r   )colorrgbs       r   hex2decr      sK    a
Ba
Ba
B!Qw	 r   c                   l    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZddZddZddZd Zd Zy)	HTML2FPDFzRender basic HTML to FPDFNc                    t        j                  |        i | _        d| _        d| _        d| _        i | _        d | _        g | _        || _	        |xs d | _
        dx| _        x| _        | _        d| _        g | _        | j!                  dd       d| _        d| _        d | _        d | _        d | _        d | _        d| _        d | _        d | _        d | _        d | _        d | _        dx| _        | _        t?        ddd	d
dd      | _         y )NF c                     | S N )srcs    r   <lambda>z$HTML2FPDF.__init__.<locals>.<lambda>'   s    3 r       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)selfr6   r7   s      r   r.   zHTML2FPDF.__init__   s   D!
	
	"7#$$$$&gr" 

##

.334+Q34A$4H
r   c                 J   |d   dk(  r| j                   j                  | j                   j                  z
  | j                   j                  z
  }| j                  d   d   dk(  r!|t        | j                  d   d d       dz  z  }t        |d d       |z  dz  S t        |      dz  S )N%width      Y@g     @Y@g      @)r6   wr_marginl_marginr<   r   )rJ   lengthtotals      r   width2mmzHTML2FPDF.width2mm;   s    ":s?HHJJ!2!22TXX5F5FFEzz'"2&+TZZ0"56u<<vcr{#e+e33v;$$r   c           	      .	   | j                   zd| j                   vr*d| j                   vr	 | j                  | j                     g}nbd| j                   v r7| j                  }t        | j                   d         }| j                  |||z    }n| j                   j                  dd      g}t        |D cg c]  }| j                  |       c}      }t        | j                   j                  dd            dz  xs | j                  dz  }|| _
        t        | j                  j                  d	d            }| j                  s4| j                   j                  d
d      d   j                         }	|xr d}nE| j                  dd       |xs d}| j                   j                  d
d      d   j                         }	t        | j                   j                  d| j                   j                  dd                  }
| j"                  #| j$                  j'                  ||||d|	f|
f       | j(                  #| j*                  j'                  ||||d|	f|
f       || j*                  xr | j*                  d   d   d   xs dz   }| j,                  j.                  |z   | j,                  j0                  kD  rD| j                  s8| j3                          | j,                  j5                          dx| _        | _        | j(                  | j"                  y| j6                  s| j;                          | j=                  |||
       t>        r#tA        d| j,                  jB                  ||d       | j,                  jE                  ||||d|	       y y y | j                  y | jF                  rdt>        rtA        d|d       | j,                  jE                  d| j                  |dd| jF                  d   j                         | jH                         y |jK                  dd      }| jH                  r| jM                  | jH                  |       y t>        rtA        d|d       | j,                  jO                  | j                  |       y # t        $ r t	        d      w xY wc c}w )NrN   colspanz9Table column/cell width not specified, unable to continue240heightr$      g?borderr2   LLRBTCbgcolorr   r   Fztd cell*cell
 write)(r?   r=   r>   
IndexErrorRuntimeErrorr   getsumrU   htable_hr<   r@   upper	set_styler   rA   rD   rB   appendrE   rC   r6   ypage_break_triggeroutput_table_footeradd_pagerF   rG   output_table_header
box_shadowDEBUGprintxrb   r2   r1   replaceput_linkre   )rJ   txtlirW   lenghtrP   rj   r[   r2   r`   rY   s               r   handle_datazHTML2FPDF.handle_dataD   s   77dgg%)477*Bd--d.B.BCDA dgg%((dggi01((1W95WW[[/0;vT]]6*;<ADGGKK!,-1@TVVD[ADL!45F77GS1!4::<Ds4(3GS1!4::<dggkk)TWW[[B5OPQGzz%##a#fQu%=w$GHzz%##a#fQu%=w$GH$,,@4<<?1+=a+@EAFFxxzz& !<!<<TWW((*!!#6;; 4#3zz!djj&8'',,.1g.%	488::q#sCa#fQu5 '9! ZZ#ZZeFC-HHMM!DFF3q4::a=+>+>+@$))L++d3'Cyydii,%c2tvvc*c " d&'bccd <s   Q: 1R:Rc                 @   t         rt        d|||       |r| j                  j                  } | j                  j                  |  | j                  j                  | j                  j                  | j                  j                  ||d       || j                  _        y y )Nrt   F)ru   rv   r6   
fill_colorset_fill_colorrectrw   ro   )rJ   rP   rj   r`   r   s        r   rt   zHTML2FPDF.box_shadow|   sq    %aG4,,J#DHH##W-HHMM$((**dhhjj!Q<",DHH	 r   c                 4   | j                   r| j                  }| j                  j                  }| j                  j	                  | j
                         | j                  dd       | j                   D ]7  \  }}| j                  |d   |d   |        | j                  j                  |  9 | j                  d|       | j                  j                  | j                   d   d   d          | j                  j	                  | j
                         d| _
        y )Nr^   Tr$   r   )rB   r   r6   rw   set_xtable_offsetrm   rt   rb   lnrF   )rJ   r   rw   rb   r`   s        r   rs   zHTML2FPDF.output_table_header   s    <<A

AHHNN4,,-NN3t$!% %gQa':t$% NN3q!HHKKQ*1-.HHNN4,,-r   c                 (   | j                   r| j                  j                  }| j                  j                  | j                         | j                   D ]7  \  }}| j                  |d   |d   |        | j                  j                  |  9 | j                  j                  | j                   d   d   d          | j                  j                  |       t        | j                  j                  dd            r| j                          d| _        y )Nr$   r   r[   T)rC   r6   rw   r   r   rt   rb   r   r   r<   rh   output_table_seprG   )rJ   rw   rb   r`   s       r   rq   zHTML2FPDF.output_table_footer   s    <<

AHHNN4,,-!% %gQa':t$% HHKKQ*1-.HHNN1tzz~~h*+!!#r   c                 V   | j                   j                  | j                         | j                   j                  }| j                   j                  }t        | j                  D cg c]  }| j                  |       c}      }| j                   j                  ||||z   |       y c c}w r    )	r6   r   r   rw   ro   ri   r=   rU   line)rJ   x1y1r}   rP   s        r   r   zHTML2FPDF.output_table_sep   sv    t(()XXZZXXZZT5I5IJ6v&JKbBqD$ Ks   %B&c                    t        |      }t        rt        d||       |dk(  s
|dk(  s|dk(  r| j                  |d       |dk(  r
|d   | _        |dk(  r| j
                  j                  d	       |d
k(  r5| j
                  j                  d	       |r|r|j                  d      | _        || j                  v r| j                  |   }| j
                  j                  d	|z         | j
                  j                  ddd       | j
                  j                  d|z         |r|j                  d      | _        |dk(  r| j                          |dk(  rc| j
                  j                  ddd       | j
                  j                  d       | j                  dd       | j                  dd       d| _        |dk(  r.| j                  ddd       | j
                  j                  d       |dk(  r0| xj                  dz  c_        | j                   j#                  d       |dk(  r0| xj                  dz  c_        | j                   j#                  d       |dk(  r| j
                  j                  | j$                  d z          | j
                  j                  d!dd       | j                   | j                  dz
     }t'        |t(              s&|dz  }|| j                   | j                  dz
  <   d"|z  }| j
                  j+                  | j$                  d#| j                  z  |d$       | j                          |d%k(  r| j,                  j#                  | j.                  | j0                  | j2                  f       d&|v r1t5        |d&         | _         | j                  t2          t2        | _        d'|v rB|j                  d'      j7                         }	 | j
                  j                  |       || _        d(|v rQt;        |j                  d(            }| j
                  j                  | j.                  t;        |      )       || _        |d*k(  rKt        |j=                         D cg c]  \  }}|j7                         |f c}}      | _        d+| j>                  vrd,| j>                  d+<   | j>                  d+   d-   d.k(  r| j
                  j@                  | j
                  jB                  z
  | j
                  jD                  z
  }|t;        | j>                  d+   d d-       d/z  z  }| j
                  j@                  |z
  d0z  | _#        g | _$        dx| _%        | _&        g | _'        g | _(        d | _)        d | _*        d| _+        | j
                  j                          |d1k(  rmt        |j=                         D cg c]  \  }}|j7                         |f c}}      | _,        d| _-        | j
                  j]                  | jF                         |d2k(  rAt        |j=                         D cg c]  \  }}|j7                         |f c}}      | _/        |d3k(  r~t        |j=                         D cg c]  \  }}|j7                         |f c}}      | _/        d| _0        d+| j^                  v r(| jH                  j#                  | j^                  d+          |d4k(  ri | _)        |d5k(  ri | _*        |d6k(  r6d7|v r1| j
                  jc                         }	| j
                  je                         }
tg        |j                  d+d            }tg        |j                  d8d            }| j                  rB| j                  d   ji                         d9k(  r"| j
                  j@                  |	z
  d0z  |d0z  z
  }	| j
                  jk                  | jm                  |d7         |	|
||| j                  :       | j
                  j]                  |	|z          | j
                  jo                  |
|z          |dk(  s
|dk(  s|dk(  r| j                  |d       |d;k(  rd<| _        y y # t8        $ r Y pw xY wc c}}w c c}}w c c}}w c c}}w )=NSTARTTAGr   r|   ur   ar1   brr   pr2      r$   r&   hrr0   Courierr      r^   FIT
blockquoted   -   r   ul   ollir'      z%s. z     rd   r4   r   facesize)r   r<   rN   z100%rL   rM   rO   g       @rA   r?   r@   rD   rE   imgr"   rY   r_   )linkcenterCenter)8rH   ru   rv   rm   r1   r6   r   rh   r2   rI   set_text_colorset_font_sizeput_liner:   r0   r8   r9   rn   rj   
isinstancer   re   r5   r;   	font_sizer   r   lowerrg   r   itemsr<   rP   rQ   rR   r   r=   rF   rG   rB   rC   rD   rE   rk   rA   r>   r   r?   r@   get_xget_yr   rl   imager7   set_y)rJ   tagattrskr9   r   r   vrP   rw   ro   rj   s               r   handle_starttagzHTML2FPDF.handle_starttag   s   U%
C/8sCx38NN3q!8FmDI9HHKKN8HHKKNuyy'9$*$**

3AHHKK!HH##C!,HH""26*599W#5dj9MMO:HHi2.HH""2&NN3u%NN3u%DHAb)HHKKN9KKNKKKv&9KKNKKKq!9HHKKq!HH##C!,[[Q/Ffj1!-3DKKM*&HHNN466U4;;->"GH!;OO""DNNDNNDJJ#OP%$U7^4
###U+"
yy(..0HH%%d+%)DN 599V,-!!$..s4y!A!%<G#!A	1~GHDJdjj(&,

7#zz'"2&+HHJJ!2!22TXX5F5FFSG,Sb12588%)XXZZ\3$6!#%D 277Dt/DLDLDJDJDLHHKKM9ekkmDsqQWWYNDEDG#$D HHNN4,,-9ekkmDsqQWWYNDEDG9ekkmDsqQWWYNDEDGDG$''!$$++DGGG,<=<DJ<DJ:~HHNN$HHNN$%))GQ/0%))HQ/0::$**Q-"5"5"73">As*QsU2At~~eEl; !Q		  ;qs#qs#8sCx38NN3%=!DJ g $  H  E EDs*   "a %a&
5a,
'a2
-a8
	a#"a#c                 ~   t         rt        d|       |dk(  s|dk(  s
|dk(  s|dk(  rB| j                  j                  d       | j	                          | j                          d | _        |dk(  rM| j                  j	                  | j                  xs dd	d
       | j                  j                  d
       d| _	        |dk(  r.| j                  ddd       | j                  j                  d       |dk(  rd}|dk(  rd}|dk(  s
|dk(  s|dk(  r| j                  |d       |dk(  rd	| _        |dk(  rd	| _        |dv r/| xj                  dz  c_        | j                  j                          |dk(  rR| j                  s| j!                          d | _        d| _        d | _        d | _        | j                  j                          |dk(  rd | _        |dk(  rd | _        |dk(  r5| j                  j/                  | j0                         | j3                          |dk(  r:| j4                  }| j,                  | j                  j                  |       d | _        |dk(  s|dk(  ru| j$                  r#t         rt        d       | j                  d d       | xj8                  t;        | j<                  j?                  d!d"            z  c_        d | _        d| _        |d#k(  r]| j@                  j                         \  }}}|r$| j                  j                  ddd       d | _!        | j	                  ||       d | _        |d$k(  rd | _        y y )%NENDTAGr(   r)   r*   r+      r0   Timesr   r&   Fr   r$   r   strongr   emr|   r   r   r   )r   r   r   r<   rD   rE   tbodyrA   r?   r@   zrevert styler^   rW   1r4   r   )"ru   rv   r6   r   r:   rm   r2   r4   r   r0   r   r1   r8   r9   poprG   rq   r<   r@   rB   rC   rD   rE   r   r   r   rk   rA   r>   r   r?   rh   r5   r   )rJ   r   rj   r   r   r   s         r   handle_endtagzHTML2FPDF.handle_endtag  s   %#&9T	S$Y#t)HHKKNMMONNDJ:HHdii272b9HH""2&DH!A&HHKKN=C9C8sCx38NN3&8DI8DJ,KKNKKKOO<##((*DJDGDLDLHHKKM<DJ<DJ<HHNN4,,-!!#9Azz!ADG9T	ww%/sE*  CIc(B$CC DGDG; $ 3 3 5D$''!A.!
MM$%DI=DJ r   c                    |r|| _         |r0|| _        |dz  dz  | _        t        rt	        d| j                         | j
                  j                  | j                   xs ddd       | j
                  j                  | j                  xs d       | j                  dd       | j                  d	d       | j                  d
d       | j                          y )Nr
   r	   Hr%   r   r&   r   Fr   r|   )
r;   r   rj   ru   rv   r6   r:   r   rm   r   )rJ   r   r   s      r   r:   zHTML2FPDF.set_font\  s    !DN!DND[%DFeC($..3GBr:t~~34sE"sE"sE"r   c                 D   |rF| j                   j                  |j                               }|| j                   |j                         <   d}dD ]#  }| j                   j                  |      s||z  }% t        rt	        d|       | j
                  j                  d|       y )Nr   )r   r|   r   SET_FONT_STYLE)r/   rh   r   ru   rv   r6   r:   )rJ   r   enabletr/   ss         r   rm   zHTML2FPDF.set_stylej  s    

syy{+A&,DJJsyy{# 	Azz~~a q	 %(%0"U#r   c                     |<| j                   j                  | j                  | j                  | j                         y | j                   j                  |||       || _        || _        || _        y r    )r6   r   r   r   r   )rJ   r   r   r   s       r   r   zHTML2FPDF.set_text_colorv  sT    9HH##DFF466$&&9HH##Aq!,DFDFDFr   c                     | j                  ddd       | j                  dd       | j                  j                  d||       | j                  dd       | j                  d       y )Nr$      r   Tr   F)r   rm   r6   re   )rJ   urlrz   s      r   ry   zHTML2FPDF.put_link  sR    Aa$sD!qS!sE"Ar   c                 r   | j                   j                  d       | j                   j                  | j                   j                         | j                   j	                         | j                   j                         dz   | j                   j	                                | j                   j                  d       y )Nr'      r   )r6   r   r   r   r   )rJ   s    r   r   zHTML2FPDF.put_line  sg    Adhhnn&txx~~'78H8LTXX^^M]^Ar   r    )NN)Nr$   r$   )__name__
__module____qualname____doc__r.   rU   r~   rt   rs   rq   r   r   r   r:   rm   r   ry   r   r!   r   r   r   r      sQ    I<%6+p-  %n"`AF
$r   r   c                       e Zd ZddZy)	HTMLMixinNc                 `    t        | |      }|j                  |      }|j                  |       y)z Parse HTML and convert it to PDFN)r   unescapefeed)rJ   textr7   h2ps       r   
write_htmlzHTMLMixin.write_html  s'    i(||D!r   r    )r   r   r   r   r!   r   r   r   r     s    r   r   N)z#000000)r   
__author____copyright____license__fpdfr   py3kr   r   r   r   ru   r   r   r   objectr   r!   r   r   <module>r      sN    4
5  7 7p
 pd r   