o
    &zhg                     @  s  U d dl mZ d dl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mZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d d	lm Z m!Z!m"Z"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK d dlLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZT d dlUmVZV d dlWmXZXmYZY eZe[Z\i a]de^d< e_dej`ejaB ZbG dd decZddd Zedf g ZheifddZjejejkjljm_jddiZndd Zodd Zpdd Zqd d! Zrd"d# Zsd$d%d&d'Ztd0d(d)Zu	*	$	+	d1d,d-ZvevZwd.d/ ZxexZydS )2    )annotationsN)Node)treebuilders)
FrameBreakNextPageTemplate)KeepInFrame	PageBreak)BOOLBOXCOLORFILEFONTINTMUSTPOSSIZESTRINGTAGS)pisaTempFile)	TableDatapisaTagTABLE	pisaTagTD	pisaTagTH	pisaTagTR)&pisaTagpisaTagApisaTagBODY	pisaTagBRpisaTagCANVAS
pisaTagDIVpisaTagFONT	pisaTagH1	pisaTagH2	pisaTagH3	pisaTagH4	pisaTagH5	pisaTagH6	pisaTagHR
pisaTagIMGpisaTagINPUT	pisaTagLIpisaTagMETA	pisaTagOLpisaTagPpisaTagPDFBARCODEpisaTagPDFFONTpisaTagPDFFRAMEpisaTagPDFLANGUAGEpisaTagPDFNEXTFRAMEpisaTagPDFNEXTPAGEpisaTagPDFNEXTTEMPLATEpisaTagPDFPAGECOUNTpisaTagPDFPAGENUMBERpisaTagPDFSPACERpisaTagPDFTEMPLATEpisaTagPDFTOCpisaTagSTYLE
pisaTagSUB
pisaTagSUPpisaTagTEXTAREApisaTagTITLE	pisaTagUL)getAligngetBoolgetBoxgetColorgetPosgetSizetoListtransform_attrs)cssDOMElementInterface)PmlLeftPageBreakPmlRightPageBreakzdict[str, dict]CSSAttrCachezhttps?://[^/]+(.*)c                   @  s   e Zd Zdd ZdS )AttrContainerc                 C  s*   zt | |W S  ty   | |  Y S w N)dict__getattr__	Exception)selfname rS   K/var/www/html/kangema/venv/lib/python3.10/site-packages/xhtml2pdf/parser.pyrO   p   s
   zAttrContainer.__getattr__N)__name__
__module____qualname__rO   rS   rS   rS   rT   rL   o   s    rL   c                 C  sN  i }|r7|  D ].\}}z
t||t|< W q ty6 } ztjd|||dd |||< W Y d }~qd }~ww i }|tv r#t| \}}	t|	d< |	  D ]\}}d ||< t|tr|d t	krq||vrqt
| 
d| d ||< qL|||d }
|d }|d }n||d }
d }|
d ur"t|tr|
  }
|
|vrt
| 
d|t| |}
nq|tkr|
  }
|
d	d
ddt|hv }
n[|tkrzt|
}
W nP ty   t
| 
d| Y n?w |tkrt|
| j}
n3|tkrt|
| j}
n(|tkrt|
}
n|tkr	t|
}
n|tkr| |
}
n
|tkr| |
}
|
||< qLt |S )Nz%%s during string conversion for %s=%sTexc_info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strrP   logdebugr   r   
isinstancetupler   warninggetliststriplowerreprr	   r   rE   r
   rB   pageSizer   rD   r   intr   rC   r   getFiler   getFontNamerL   )ctag
attributesattrskvenattrsblockadefnvdflrS   rS   rT   pisaGetAttributesw   s   











r|   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 ty>   |j| j p5dd  }| _Y nw ||v rG|| }|dkrjt	| j
drZ| j
|||}n|tur`|S d| d}t||d urs|| j |< |S )N r   inherit
getCSSAttrz2Could not find inherited CSS attribute value for '')cssAttrsfindStyleFor
cssElementLookupErrorcssStylerP   parserparseInlinegetStyleAttrhasattr
parentNoder   NotImplemented)rQ   
cssCascadeattrNamedefaultresultstylemsgrS   rS   rT   r      s8   



r   bgcolorbackground-colorc                 C  s2   t D ]}||v rt | | vr|| | t | < q| S rM   )nonStandardAttrNames)rp   _nodeattrListattrrS   rS   rT   mapNonStandardAttrs'  s
   r   c              	   C  st   d } }}| j  D ]\}}|dkr|}q|dkr|}q|dkr#|}qt| j d| j  d| d| d| 	S )Nr}   classrZ   r   #)rr   r`   rZ   r   tagNamerj   )node_cl_id_strt   ru   rS   rS   rT   getCSSAttrCacheKey.  s   ,r   c                 C  s   |j r_t| }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yY } ztjd||dd W Y d }~q1d }~ww | jt|< | jS )Nr   htmlz%r during CSS attr '%s'TrX   )cssr   r   r   r   rj   rK   rg   r   rH   CSSDOMElementInterfacer   	attrNamesr   r   rP   rb   rc   )r   rp   keyCachedCSSAttr
cssAttrMapcssAttrNamerv   rS   rS   rT   
CSSCollect:  s*   

r   c                 C  s   t | tr	|  S | d  S )Nr   )rd   ra   rj   )sequencerS   rS   rT   rj   Z  s   
rj   c                 C  s  d| j v rt| j d d| j_d| j v rt| j d d| j_d| j v r-| | j d | j_d| j v rFttd	| j d | jj
| jd| j_
d	| j v rad	| j d	 }t|| jj
| j_|| j_nt| jj| jj
| j_d
| j v rx| j d
 | j_d| j v rtd	| j d | j_d| j v rt| j d }|dv rd| j_nd| j_t| j ddD ]}d|v rd| j_d|v rd| j_d|v rd| j_d| j_qd| j v rt| j d }|dv rd| j_nd| j_d| j v rt| j d  | j_d| j v rt| j d | j_d| j v r| j d | j_d| j v rGzd	t| j d | j_W n ty;   d	t| j d d | j_Y nw | jjdv rGd | j_d| j v rzd	t| j d | j_W n tys   d	t| j d d | j_Y nw | jjdv rd | j_d| j v rd	t| j d }|drt |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! |rJt"| jd'| j t| jj
d! t"| jd(| j d)d*  t"| jd+| j t d S d S ),Ncolorz#000000r   z#ffffffzfont-familyz	font-sizer}   g      ?zline-heightzletter-spacingz-pdf-line-spacingzfont-weight>   500600700800900boldbolderr[   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 rM   rS   )xrS   rS   rT   <lambda>  s    zCSS2Frag.<locals>.<lambda>))borderTopColorzborder-top-color)borderBottomColorzborder-bottom-color)borderLeftColorzborder-left-color)borderRightColorzborder-right-color))cssAttrrC   frag	textColor	backColorro   fontNamemaxrE   joinfontSizebaseFontSizeleadingleadingSourceletterSpacingleadingSpacerj   r   rF   rg   r   striker   ra   
whiteSpacer@   	alignmentvAlignr   	TypeErrorr   endswithfloatr   rG   bulletIndent
leftIndentrightIndentlistStyleTypern   listStyleImage)rp   kwisBlockr   valuer   rS   rS   rT   CSS2Frag`  s   












    r   Fcollectc                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| | jD ]} t| ||d}|r||7 }q|S )zCollect all CSS definitions.r}   >   linkr   c                 S  s   g | ]
}|  r|  qS rS   )ri   ).0r   rS   rS   rT   
<listcomp>
  s    zpisaPreLoop.<locals>.<listcomp>,type>   text/cssr}   allprintpdfr   Tr   r   
stylesheetz
@import "{}" {};)nodeTyper   	TEXT_NODEdataELEMENT_NODEr   rj   r|   rr   mediasplitrg   
childNodespisaPreLoopaddCSShrefrelformatr   )r   contextr   r  rR   r   r  r   rS   rS   rT   r    s6   



r  c                 K  sd  |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 g t  || j}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 rt|jd 	 dkr|t  d|jv rt|jd 	 dkr|t  t|jd 	 dkrd}	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rCd S |  t|||d t|jd|jt d|jv rft|jd |j_d|jv rs|jd |j_ d }d}d}d|jv rt|jd ! 	 }|dv r|}nd}d |jv rt"d#|jd  }d!|jv rt"d#|jd! }|d uo|j$d u }|rt%|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| |rX|  |rO|t  ||krD|t  ||krO|t  |	rX|t  |r{|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 | qd S )%Nr   )r   r   r   r   :r}   >   r   scriptr[         Fdisplayinlinerx   z-pdf-next-pagez-pdf-page-breakbeforez-pdf-frame-breakafterTzpage-break-beforealwaysrightleftzpage-break-afterr   )r   ))keepWithNextz-pdf-keep-with-next)outlinez-pdf-outlinez-pdf-outline-levelz-pdf-word-wrapz-pdf-keep-in-frame-mode>   errorshrinkoverflowtruncater  z-pdf-keep-in-frame-max-widthz-pdf-keep-in-frame-max-heightz	pisaTag%srZ   )contentmaxWidth	maxHeightmode)5copyr   r   r  addFragr  r  r   replacerj   r|   rr   r   r   r   r   rg   addParaaddStoryr   ra   r   r   rJ   rI   pushFragr   rG   r   rA   rm   outlineLevelwordWrapri   rE   r   keepInFrameIndexlenstoryglobalsupperframeStaticinsideStaticFrame	swapStorystart	fragBlockr  pisaLoopendappendr   pisaStaticStorypullFrag)r   r  pathr   r   
PAGE_BREAKPAGE_BREAK_RIGHTPAGE_BREAK_LEFTpageBreakAfterframeBreakAfterr  r   keepInFrameModekeepInFrameMaxWidthkeepInFrameMaxHeightr   keepInFrameklassobj	elementIdstaticFrameoldStoryr3  nnodesubstoryframerS   rS   rT   r4  #  s  






 









r4  r}   utf8c           	      C  s   i a |rtd tjtdd}n	tjtdd}i }t| t	r7|s'd}| 
|} t| |jd} ||d< |j| fi |}|rK||j|d |rR|| t|| |  t|| |S )z
    - Parse HTML and get miniDOM
    - Extract CSS information, add default CSS, parse CSS
    - Handle the document DOM itself and build reportlab story
    - Return Context object.
    z5xhtml parameter will be removed on next release 0.2.8dom)treezutf-8)capacitytransport_encoding)encoding)rK   rb   rf   html5libXHTMLParserr   getTreeBuilder
HTMLParserrd   ra   encoder   rN  parsewritetoprettyxmladdDefaultCSSr  parseCSSr4  )	srcr  default_cssxhtmlrP  
xml_outputr   parser_kwargsdocumentrS   rS   rT   
pisaParser  s*   





ra  c                  O  s   d|d< t | i |S )NTr]  )HTML2PDF)ar   rS   rS   rT   	XHTML2PDFA  s   rd  rM   )r}   FrK  N)z
__future__r   r"  loggingrexml.dom.minidomxmlxml.domr   rQ  r   reportlab.platypus.doctemplater   r   reportlab.platypus.flowablesr   r   xhtml2pdf.defaultr	   r
   r   r   r   r   r   r   r   r   r   xhtml2pdf.filesr   xhtml2pdf.tablesr   r   r   r   r   xhtml2pdf.tagsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   xhtml2pdf.utilr@   rA   rB   rC   rD   rE   rF   rG   xhtml2pdf.w3crH   xhtml2pdf.xhtml2pdf_reportlabrI   rJ   	getLoggerrU   rb   rK   __annotations__compileMIrxhttpstriprN   rL   r|   ri   r  r   r   r   rL  minidomElementr   r   r   r   rj   r   r  r4  ra  rb  rd  XML2PDFrS   rS   rS   rT   <module>   sZ   4((

Q47!   
$ b
=