o
    ôSk[e  ã                   @   sÚ  d dl mZmZ d dlZd dlZd dlZd dlmZ d dlZ	d dl
mZ d dl
Z
d dlmZmZ d dlmZmZ d dlZd dlmZmZmZmZ d dlmamZmZmZmZmZmZ d d	lT d d	l T d d
l!m"Z"m#Z#m$Z$m%Z% d dl!m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,  m-Z- d dl.m/Z/m0Z0 i a1e 2d¡Z3e 4dej5ej6B ¡Z7G dd„ de8ƒZ9dd„ Z:d ;¡  <¡ Z=e>fdd„Z?e?e	j@jAjB_?ddiZCdd„ ZDdd„ ZEdd„ ZFdd„ ZGd d!„ ZHd,d#d$„ZId-d%d&„ZJd.d(d)„ZKeKZLd*d+„ ZMeMZNdS )/é    )Úprint_functionÚunicode_literalsN)ÚNode)Útreebuilders)ÚNextPageTemplateÚ
FrameBreak)Ú	PageBreakÚKeepInFrame)ÚBOXÚPOSÚMUSTÚFONT)ÚTAGSÚSTRINGÚINTÚBOOLÚSIZEÚCOLORÚFILE)Ú*)ÚgetBoxÚgetPosÚpisaTempFileÚtransform_attrs)ÚgetSizeÚgetBoolÚtoListÚgetColorÚgetAlign)ÚPmlRightPageBreakÚPmlLeftPageBreakÚ	xhtml2pdfzhttps?://[^/]+(.*)c                   @   s   e Zd Zdd„ ZdS )ÚAttrContainerc                 C   s"   zt  | |¡W S    | |  Y S ©N)ÚdictÚ__getattr__)ÚselfÚname© r(   úB/var/www/html/env/lib/python3.10/site-packages/xhtml2pdf/parser.pyr%   1   s   zAttrContainer.__getattr__N)Ú__name__Ú
__module__Ú__qualname__r%   r(   r(   r(   r)   r"   /   s    r"   c              
   C   s  i }|r |  ¡ D ]\}}z
t|ƒ|t|ƒ< W q   |||< Y qi }|tv �r	t| \}}t|d< t |¡D ]Ò\}}d ||< t|ƒtkrm|d tkr\||vr\t	 
|  
d|¡¡ d ||< q6| ||d ¡}	|d }
|d }n| |d ¡}	d }
|	d u�rt|ƒtkr™|	 ¡  ¡ }	|	|vr˜t	 
|  
d|t|ƒ¡¡ |
}	nk|tkr¯|	 ¡  ¡ }	|	dddd	t|ƒfv }	nU|tkrÈzt|	ƒ}	W nJ   t	 
|  
d
|¡¡ Y n<|tkrÓt|	| jƒ}	n1|tkrÞt|	| jƒ}	n&|tkrçt|	ƒ}	n|tkrðt|	ƒ}	n|tkrú|  |	¡}	n
|tk�r|  |	¡}	|	||< q6t |ƒS )NÚidé   zAttribute '%s' must be set!r   z4Attribute '%s' of wrong value, allowed is one of: %sÚ1ÚyÚyesÚtruez#Attribute '%s' expects a size value)!ÚitemsÚstrr   r   ÚsixÚ	iteritemsÚtypeÚtupler   ÚlogÚwarningÚgetÚlistÚstripÚlowerÚreprr   r   r   r
   r   ÚpageSizer   r   r   Úintr   r   r   ÚgetFiler   ÚgetFontNamer"   )ÚcÚtagÚ
attributesÚattrsÚkÚvÚnattrsÚblockÚadefÚnvÚdflr(   r(   r)   ÚpisaGetAttributes8   sx   

ÿ

ÿ€
ÿ



€rO   aÅ  
    color
    font-family
    font-size
    font-weight
    font-style
    text-decoration
    line-height
    letter-spacing
    background-color
    display
    margin-left
    margin-right
    margin-top
    margin-bottom
    padding-left
    padding-right
    padding-top
    padding-bottom
    border-top-color
    border-top-style
    border-top-width
    border-bottom-color
    border-bottom-style
    border-bottom-width
    border-left-color
    border-left-style
    border-left-width
    border-right-color
    border-right-style
    border-right-width
    text-align
    vertical-align
    width
    height
    zoom
    page-break-after
    page-break-before
    list-style-type
    list-style-image
    white-space
    text-indent
    -pdf-page-break
    -pdf-frame-break
    -pdf-next-page
    -pdf-keep-with-next
    -pdf-outline
    -pdf-outline-level
    -pdf-outline-open
    -pdf-line-spacing
    -pdf-keep-in-frame-mode
    -pdf-word-wrap
    c                 C   sÚ   || j v r
| j | S z
| | j||¡}W n ty   d }Y nw z| j}W n   |j | j ¡ p2d¡d  }| _Y ||v rB|| }|dkrbt| j	dƒrU| j	 
|||¡}n|tur[|S td|f ƒ‚|d urk|| j |< |S )NÚ r   ÚinheritÚ
getCSSAttrz5Could not find inherited CSS attribute value for '%s')ÚcssAttrsÚfindStyleForÚ
cssElementÚLookupErrorÚcssStyleÚparserÚparseInlineÚgetStyleAttrÚhasattrÚ
parentNoderR   ÚNotImplemented)r&   Ú
cssCascadeÚattrNameÚdefaultÚresultÚstyler(   r(   r)   rR   ½   s8   

ÿ
ÿÿÿ
rR   Úbgcolorúbackground-colorc                 C   s2   t D ]}||v rt | | vr|| | t | < q| S r#   )ÚnonStandardAttrNames)rD   ÚnÚattrListÚattrr(   r(   r)   ÚmapNonStandardAttrsæ   s
   €ri   c                 C   sf   d } }}| j  ¡ D ]\}}|dkr|}q|dkr|}q|dkr#|}qdt| jƒ| j ¡ |||f S )NrP   Úclassr-   rb   z%s#%s#%s#%s#%s)rF   r3   r-   r\   ÚtagNamer>   )ÚnodeÚ_clÚ_idÚ_strH   rI   r(   r(   r)   ÚgetCSSAttrCacheKeyí   s   €rp   c              	   C   s°   |j rUt| ƒ}t| jdƒr$| jj ¡ dkr$t |d ¡}|d ur$|| _|S t	 
| ¡| _i | _i }tD ]}z|  |j|¡||< W q1 tyO   tjd|dd� Y q1w | jt|< | jS )Nrk   ÚhtmlzCSS error '%s'r.   )Úexc_info)Úcssrp   r[   r\   rk   r>   ÚCSSAttrCacher;   rS   ÚcssDOMElementInterfaceÚCSSDOMElementInterfacerU   Ú	attrNamesrR   r^   Ú	Exceptionr9   Údebug)rl   rD   Ú_keyÚCachedCSSAttrÚ
cssAttrMapÚcssAttrNamer(   r(   r)   Ú
CSSCollectù   s*   ÿÿ
r~   c                 C   s    t | tjƒr
|  ¡ S | d  ¡ S )Nr   )Ú
isinstancer5   Ústring_typesr>   )Úsequencer(   r(   r)   r>     s   r>   c                 C   s’  d| j v rt| j d ƒ| j_d| j v rt| j d ƒ| j_d| j v r+|  | j d ¡| j_d| j v rDttd 	| j d ¡| jj
| jƒdƒ| j_
d| j v r_d 	| j d ¡}t|| jj
ƒ| j_|| j_nt| jj| jj
ƒ| j_d| j v rv| j d | j_d	| j v r‡td 	| j d	 ¡ƒ| j_d
| j v r t| j d
 ƒ}|dv rœd| j_nd| j_t| j  dd¡ƒD ]}d|v r³d| j_d|v r»d| j_d|v rÇd| j_d| j_q©d| j v rát| j d ƒ}|dv rÝd| j_nd| j_d| j v rñt| j d ƒ ¡ | j_d| j v rÿt| j d ƒ| j_d| j v �r| j d | j_d| j v �rDzd 	t| j d ƒ¡| j_W n t�y8   d 	t| j d d ƒ¡| j_Y nw | jjdv �rDd | j_d| j v �r|zd 	t| j d ƒ¡| j_W n t�yp   d 	t| j d d ƒ¡| j_Y nw | jjdv �r|d | j_d| j v �r¢d 	t| j d ƒ¡}| d¡�rœt |d d… ƒd }t |ƒ| j_!|�rt"| jd| j t| jj
d� d | j v �rÔ|d  | j_#|d   t| j d  | jj
ƒ7  < |d  | j_$d!| j v �rð|d!  t| j d! | jj
ƒ7  < |d! | j_%d"| j v �rt| j d" ƒ ¡ | j_&d#| j v �r|  '| j d# ¡| j_(|�r!t"| jd$| j t| jj
d� |�rGt"| jd%| j t| jj
d� t"| jd&| j d'd(„ ƒ t"| jd)| j tƒ d S d S )*NÚcolorrd   zfont-familyz	font-sizerP   g      ð?zline-heightzletter-spacingz-pdf-line-spacingzfont-weight)ÚboldÚbolderÚ500Ú600Ú700Ú800Ú900r.   r   ztext-decorationÚ	underlinezline-throughÚnonez
font-style)ÚitalicÚobliquezwhite-spacez
text-alignzvertical-alignÚheight)ÚautoÚwidthÚzoomú%éÿÿÿÿg      Y@))ÚspaceBeforeú
margin-top)Ú
spaceAfterúmargin-bottom)ÚfirstLineIndentztext-indent)Úextrasúmargin-leftúmargin-rightzlist-style-typezlist-style-image))Ú
paddingTopzpadding-top)ÚpaddingBottomzpadding-bottom)ÚpaddingLeftzpadding-left)ÚpaddingRightzpadding-right))ÚborderTopWidthzborder-top-width)ÚborderBottomWidthzborder-bottom-width)ÚborderLeftWidthzborder-left-width)ÚborderRightWidthzborder-right-width))ÚborderTopStylezborder-top-style)ÚborderBottomStylezborder-bottom-style)ÚborderLeftStylezborder-left-style)ÚborderRightStylezborder-right-stylec                 S   s   | S r#   r(   )Úxr(   r(   r)   Ú<lambda>©  s    zCSS2Frag.<locals>.<lambda>))ÚborderTopColorzborder-top-color)ÚborderBottomColorzborder-bottom-color)ÚborderLeftColorzborder-left-color)ÚborderRightColorzborder-right-color))ÚcssAttrr   ÚfragÚ	textColorÚ	backColorrC   ÚfontNameÚmaxr   ÚjoinÚfontSizeÚbaseFontSizeÚleadingÚleadingSourceÚletterSpacingÚleadingSpacer>   rƒ   r   r;   rŠ   ÚstrikerŒ   r4   Ú
whiteSpacer   Ú	alignmentÚvAlignrŽ   Ú	TypeErrorr�   ÚendswithÚfloatr‘   r   ÚbulletIndentÚ
leftIndentÚrightIndentÚlistStyleTyperB   ÚlistStyleImage)rD   ÚkwÚisBlockr·   Úvaluer‘   r(   r(   r)   ÚCSS2Frag!  sà   



ÿ





€



 þ ÿù
ÿ
ÿøø
øøêrÊ   Fc                 C   s&  d}| j tjkr|r| j}np| j tjkr~| j ¡ }|dv r~t||| jƒ}dd„ |j	 ¡  
d¡D ƒ}| dd¡ ¡ dv r~|rId|v sId	|v sId
|v r~|dkrc| jD ]} |t| |dd�7 }qP| |¡ dS |dkr~|jr~|j ¡ dkr~| d|jd |¡f ¡ | jD ]} t| ||d�}|r�||7 }q�|S )z%
    Collect all CSS definitions
    rP   )rb   Úlinkc                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r(   )r=   )Ú.0r¨   r(   r(   r)   Ú
<listcomp>Æ  s    ÿzpisaPreLoop.<locals>.<listcomp>ú,r7   )rP   ztext/cssÚallÚprintÚpdfrb   T)ÚcollectrË   Ú
stylesheetz
@import "%s" %s;)ÚnodeTyper   Ú	TEXT_NODEÚdataÚELEMENT_NODErk   r>   rO   rF   ÚmediaÚsplitr;   Ú
childNodesÚpisaPreLoopÚaddCSSÚhrefÚrelr´   )rl   ÚcontextrÒ   rÖ   r'   rh   rØ   ra   r(   r(   r)   rÛ   ¸  s:   
ÿÿ

ÿ
€rÛ   c                 K   s`  |d u rg }|sdddddœ}nt   |¡}| jtjkr#| | j¡ d S | jtjk�r�| j dd¡ 	¡ | _| jdv r;d S t   |¡| jg }t
|| j| jƒ}t| |ƒ|_t|j| |ƒ|_| |_d}d}d}d	}d	}	t	|j d
d¡ƒ}
|
dk}|�r;| ¡  d|jv rŒ| tt|jd ƒƒ¡ d|jv r¢t|jd ƒ 	¡ dkr¢| tƒ ¡ d|jv rÅt|jd ƒ 	¡ dkr¸| tƒ ¡ t|jd ƒ 	¡ dkrÅd}	d|jv �rt|jd ƒ 	¡ dkrÜ| tƒ ¡ t|jd ƒ 	¡ dkró| tƒ ¡ | tƒ ¡ t|jd ƒ 	¡ dk�r| tƒ ¡ | tƒ ¡ d|jv �r;t|jd ƒ 	¡ dk�r|}t|jd ƒ 	¡ dk�r-|}t|jd ƒ 	¡ dk�r;|}|
dk�rBd S | ¡  t|||ƒ t|jd|jtƒ d|jv �rdt|jd ƒ|j_d|jv �rq|jd |j_ d }d}d}d|jv �r’t|jd ƒ !¡  	¡ }|dv �r�|}nd}d|jv �r¢t"d #|jd ¡ƒ}d |jv �r²t"d #|jd  ¡ƒ}|d u�o»|j$d u }|�rÅt%|j&ƒ|_$t'ƒ  d!| j dd¡ (¡  d ¡}d }| d"d ¡}|j) |d ¡}|�ró|j j*d7  _*| +¡ }|d u�r|| |ƒ}| ,|¡ t   |j¡ |_-}| j.D ]}t/|||fi |¤Ž �q||_-|�r'| 0|¡ |�rV| ¡  |�rM| tƒ ¡ ||k�rB| tƒ ¡ ||k�rM| tƒ ¡ |	�rV| tƒ ¡ |�ry|j&|j$d … }|j&d |j$… |_&|j& 1t2||||d#�¡ d |_$|�r—| ¡  |D ]}|j&|_3�q‚| +|¡ |j j*d8  _*| 4¡  d S | j.D ]} t/| ||fi |¤Ž �q d S )$Nr   )r•   r—   rš   r›   ú:rP   )rb   Úscriptr.   é   é   FÚdisplayÚinlinerK   z-pdf-next-pagez-pdf-page-breakÚbeforez-pdf-frame-breakÚafterTzpage-break-beforeÚalwaysÚrightÚleftzpage-break-afterr‹   ))ÚkeepWithNextz-pdf-keep-with-next)Úoutlinez-pdf-outline)r¬   z-pdf-outline-openz-pdf-outline-levelz-pdf-word-wrapz-pdf-keep-in-frame-mode)ÚshrinkÚerrorÚoverflowÚtruncaterí   z-pdf-keep-in-frame-max-widthz-pdf-keep-in-frame-max-heightz	pisaTag%sr-   )ÚcontentÚmaxWidthÚ	maxHeightÚmode)5ÚcopyrÔ   r   rÕ   ÚaddFragrÖ   r×   rk   Úreplacer>   rO   rF   r~   r®   ri   rl   r;   ÚaddParaÚaddStoryr   r4   r   r   r   r    ÚpushFragrÊ   r   r¯   r   rA   ÚoutlineLevelÚwordWrapr=   r   r´   ÚkeepInFrameIndexÚlenÚstoryÚglobalsÚupperÚframeStaticÚinsideStaticFrameÚ	swapStoryÚstartÚ	fragBlockrÚ   ÚpisaLoopÚendÚappendr	   ÚpisaStaticStoryÚpullFrag)rl   rß   ÚpathrÇ   rh   Ú
PAGE_BREAKÚPAGE_BREAK_RIGHTÚPAGE_BREAK_LEFTÚpageBreakAfterÚframeBreakAfterrä   rÈ   ÚkeepInFrameModeÚkeepInFrameMaxWidthÚkeepInFrameMaxHeightrÉ   ÚkeepInFrameÚklassÚobjÚ	elementIdÚstaticFrameÚoldStoryr  ÚnnodeÚsubstoryÚframer(   r(   r)   r  ß  s&  ü


ÿ


ù
ÿÿÿ
ÿÿÿÿ






üÿ

ÿr  rP   c                 C   sÀ   i a |rtjt d¡d�}n	tjt d¡d�}t| tjƒr-|s!d}|  	|¡} t
| |jd�} | | ¡}|rI|r@| |j|d�¡ n	| |jdd�¡ |rP| |¡ t||ƒ | ¡  t||ƒ |S )z¼
    - Parse HTML and get miniDOM
    - Extract CSS informations, add default CSS, parse CSS
    - Handle the document DOM itself and build reportlab story
    - Return Context object
    Údom)Útreezutf-8)Úcapacity)ÚencodingÚutf8)rt   Úhtml5libÚXHTMLParserr   ÚgetTreeBuilderÚ
HTMLParserr   r5   Ú	text_typeÚencoder   r   ÚparseÚwriteÚtoprettyxmlÚaddDefaultCSSrÛ   ÚparseCSSr  )Úsrcrß   Údefault_cssÚxhtmlr!  Ú
xml_outputrX   Údocumentr(   r(   r)   Ú
pisaParser¿  s,   	
ÿ


r3  c                  O   s   d|d< t | i |¤ŽS )NTr0  )ÚHTML2PDF)ÚarÇ   r(   r(   r)   Ú	XHTML2PDF   s   r6  )Fr#   )rP   FNN)OÚ
__future__r   r   rõ   ÚloggingÚreÚxml.domr   Úxml.dom.minidomÚxmlr#  r   Úreportlab.platypus.doctemplater   r   Úreportlab.platypus.flowablesr   r	   r5   Úxhtml2pdf.defaultr
   r   r   r   r   r   r   r   r   r   r   Úxhtml2pdf.tablesÚxhtml2pdf.tagsÚxhtml2pdf.utilr   r   r   r   r   r   r   r   r   Ú$xhtml2pdf.w3c.cssDOMElementInterfaceÚw3cru   Úxhtml2pdf.xhtml2pdf_reportlabr   r    rt   Ú	getLoggerr9   ÚcompileÚMÚIÚrxhttpstripr$   r"   rO   r=   rÙ   rw   r]   rR   r  ÚminidomÚElementre   ri   rp   r~   r>   rÊ   rÛ   r  r3  r4  r6  ÚXML2PDFr(   r(   r(   r)   Ú<module>   sX   $
	N4Ì7 ÿ! 

' 
a>