o
    &zhC                     @  s8  d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ zd dlmZ W n eym   d dlmZ Y nw d dl m!Z!m"Z"m#Z# d dl$m%Z%m&Z& d dl'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@ erd dlAmBZB d dl;mCZC d e_DeEeFZGdZHdZIdZJdZKd0ddZLeLe!_Ld0ddZMd1d!d"ZNG d#d$ d$e:jOZPG d%d& d&e:jQZRG d'd( d(ZSG d)d* d*ZTd2d,d-ZUG d.d/ d/ZVdS )3    )annotationsN)Path)TYPE_CHECKINGCallable)rl_settings)TA_LEFT)
addMapping)A4)ParagraphStyle)
pdfmetrics)TTFont)Frame)ShowBoundaryValue)ParaFragps2tttt2ps)defaultparser)B64InlineURIgetFilepisaFileObject)	TableData)arabic_format
copy_attrsfrag_text_language_checkget_default_asian_fontgetColor	getCoordsgetFloatgetFrameDimensionsgetSizeset_asian_fonts	set_value)css)PmlPageCountPmlPageTemplatePmlParagraphPmlParagraphAndImagePmlTableOfContents)Flowable)PmlImage   g?    returnr   c                 K  s<   t di | j}|r|j}|| d|v r|d= d |_|S )NcbDefn )r   __dict__update
bulletText)selfkwargsndr/   r/   L/var/www/html/kangema/venv/lib/python3.10/site-packages/xhtml2pdf/context.pycloneP   s   
r8   c                 C  s   t  }t|dd t|dd  t|dd d|_d|_t| j\|_|_|_| j|_| j|_d|_	d	|_
t|_d
|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_|j|_d|_d|_d|_|S )N)subsuperrise	underlinestrikegreekleadingleadingSpacespaceBefore
spaceAfter
leftIndentrightIndentfirstLineIndentborderPaddingpaddingLeftpaddingRight
paddingToppaddingBottombulletIndentinsideStaticFrameoutlineLevelr   )	backColorvAlignlinkborderStyleborderColorlistStyleTypelistStyleImagewordWrapheightwidthr2   )
pageNumber	pageCountoutlineoutlineOpenkeepWithNextrtlF zTimes-Romannormalz150%   	Helveticag      ?)r   r"   textfontNamer   bolditalicfontSize	textColorletterSpacingleadingSourcer   	alignmentborderWidthborderLeftWidthrR   borderLeftColorrQ   borderLeftStyleborderRightWidthborderRightColorborderRightStyleborderTopWidthborderTopColorborderTopStyleborderBottomWidthborderBottomColorborderBottomStyle
whiteSpacebulletFontNamezoom)stylefragr/   r/   r7   getParaFrag_   sR   r}   strc                 C  s&   t  | }|jr
| S tt| j S N)urlparseschemer~   r   parentresolve)pathpartsr/   r/   r7   
getDirName   s   
r   c                   @  sf   e Zd ZU ded< d#ddZddd	d
d$ddZed%d&ddZed'ddZd(dd Z	d)d!d"Z
dS )*pisaCSSBuilderpisaContextcr-   tuple[dict, dict]c                 C  s  |  | dg|}tt|d  }d|vri i fS |d }t|dd }|dv }|s>|dkr>t	| j
	d| t|d	d
 dv }t|d tr[dd |d D }n|d g}|D ]}	| j
j|	| j
jjd}
|
r|
 s| j
j||
||d qbi i fS )zEmbed fonts.*r   srczfont-familyzfont-weightr_   >   500600700800900rd   bolderz)@fontface, unknown value font-weight '%s'z
font-styler^   >   re   obliquec                 S  s   g | ]	}t |tr|qS r/   )
isinstancer~   ).0partr/   r/   r7   
<listcomp>   s    z-pisaCSSBuilder.atFontFace.<locals>.<listcomp>relative)rd   re   )rulesetselectornextitervaluesr~   getlowerlogwarningr   r   listr   	cssParserrootPathnotFoundloadFont)r3   declarationsresultdatanamesfweightrd   re   fontsfontr   r/   r/   r7   
atFontFace   s*   
zpisaCSSBuilder.atFontFaceFN)r   r   firstbordersizenamer~   r   dictr   boolr   tuple[float, float]Dtuple[str, str | None, str | None, float, float, float, float, dict]c                C  s   | j }|sd|  }|ddr|d |d f}t||d |d \}}}	}
|r7|d |d||||	|
|fS ||dd |d||||	|
|fS )Nz-pdf-frame-%dis_landscapeFr`   r   z-pdf-frame-borderz-pdf-frame-content)r   UIDr   r   )r3   r   r   r   r   r   r   xywhr/   r/   r7   _pisaAddFrame   s"   	

zpisaCSSBuilder._pisaAddFramefuncCallable | Nonec                 C  s^   |sdd }t |ttfr#|D ]}|| v r|| |   S |  S d S || v r-|| | S |S )Nc                 S  s   | S r   r/   )r   r/   r/   r7   r     s   z)pisaCSSBuilder._getFromData.<locals>.func)r   r   tuple)r   attrr   r   ar/   r/   r7   _getFromData   s    zpisaCSSBuilder._getFromDatac                 C  s   |  d}|  d}|  d}|  d}dt|  ddi}|r.t|d t|d g|d	< |r6t||d
< |r>t||d< |rFt||d< |S )Nzbackground-object-positionzbackground-heightzbackground-widthzbackground-opacitystepzbackground-page-stepr`   r   object_positionrV   rW   opacity)r   r   r    )r   r   rV   rW   r   devr/   r/   r7   get_background_context  s    





z%pisaCSSBuilder.get_background_context
pseudopage
str | NoneisLandscapec          #      C  sj  | j }|pd}||jv rt| j d| | |ddt}| |ddt}| |ddt}	| |ddt}
| |dd t}| |d	dt}d
D ]}||v r_|j| j	||d||j
d  nqHg }g }|jD ]\}}}}}}}}| |d|t}| |d|t}| |d|	t}| |d|
t}| |d|t}| |d	|t}|s|rtt|d}nt||d}|rt||j
d |j
d \}}}}t|||||j
\}}}}|dks|dkrt| j d t||||||||||d
}|r
g |_|g|j|g |j|< || qg|| qg|dd } | |}!| r)| j j| | j jjd} |st|d | j	||d||j
d\}}}}}}}}t|||||j
\}}}}|dks^|dkrft|d |sl|rpt }nt||d}|t|||||||	|
||d
 t|||j
d}"||"_| |"_|j|"_|!|"_|r|"j|"_|"|j|< d |_g |_g |_i i fS )Nbodyz&template '%s' has already been definedzpadding-topr   zpadding-leftzpadding-rightzpadding-bottom)zborder-top-colorzborder-bottom-colorzborder-left-colorzborder-right-color)zborder-top-widthzborder-bottom-widthzborder-left-widthzborder-right-width)

margin-topmargin-leftmargin-rightmargin-bottomtopleftrightbottomrW   rV   Tr   )rW   )colorrW   r`   z<Negative width or height of frame. Check @frame definitions.)idleftPaddingrightPaddingbottomPadding
topPaddingshowBoundaryzbackground-imager   zCmissing explicit frame definition for content or just static framesz;Negative width or height of frame. Check @page definitions.)r   framespagesize) r   templateListr   r   r   r    r   	frameListappendr   pageSizer   intr   r   r   pisaStaticStoryframeStaticr   r   r   r   r   r%   pisaStaticListpisaBackgroundpisaBackgroundListbackgroundContext	LANDSCAPEpageorientationtemplateframeStaticList)#r3   r   r   r   r   
pageBorderr   padding_toppadding_leftpadding_rightpadding_bottomborder_colorborder_widthpropr   
staticListfnamestaticr   r   r   r   r   fdatafpadding_topfpadding_leftfpadding_rightfpadding_bottomfborder_colorfborder_widthframe_borderframe
backgroundbackground_contextptr/   r/   r7   atPage!  s  	
	 

zpisaCSSBuilder.atPagec                 C  sz   |r9|  | dg|}|d }|r9z| d }W n ty)   | d }Y nw | jj| j||| jj	d i i fS )Nr   r   r`   )r   )
r   r   r   	Exceptionpopitemr   r   r   r   r   )r3   r   r   r   r   r/   r/   r7   atFrame  s   zpisaCSSBuilder.atFrame)r-   r   )
r   r~   r   r   r   r   r   r   r-   r   )NN)r   r   )r   r   r-   r   )
r   r~   r   r   r   r   r   r   r-   r   )r   r~   r-   r   )__name__
__module____qualname____annotations__r   r   staticmethodr   r   r  r	  r/   r/   r/   r7   r      s   
 
& 
 Ir   c                   @  s   e Zd Zdd ZdS )pisaCSSParserc                 C  s   d }| j }| jj|| j d}|sd S | j r%t| j jr%t| j || _ nt|j| _ z| |	 }|| _ W |S  t
yG   td Y |S w )Nr   zError while parsing CSS file)r   r   r   r   r   urljoinr   uriparsegetDatar  r   	exception)r3   cssResourceNamer   oldRootPathcssFiler/   r/   r7   parseExternal  s    zpisaCSSParser.parseExternalN)r
  r  r  r  r/   r/   r/   r7   r    s    r  c                   @  sH   e Zd ZdddZdddZdddZdddZdddZdddZdS )PageNumberTextr-   Nonec                 O  
   d| _ d S Nr^   r   r3   argsr4   r/   r/   r7   __init__     
zPageNumberText.__init__r   c                 C     | j jd urt| j j| _dS NF)flowablepager~   r   r3   keyr/   r/   r7   __contains__     zPageNumberText.__contains__rb   r~   	list[str]c                 C     | j gS r   r  r3   rb   r/   r/   r7   split     zPageNumberText.splitindexr   c                 C  s   | j r| j | S | j S r   r  r3   r/  r/   r/   r7   __getitem__     zPageNumberText.__getitem__r$  r)   c                 C  
   || _ d S r   r$  r3   r$  r/   r/   r7   setFlowable  r!  zPageNumberText.setFlowablec                 C     | j S r   r  r3   r/   r/   r7   __str__      zPageNumberText.__str__Nr-   r  r-   r   rb   r~   r-   r*  r/  r   r-   r~   r$  r)   r-   r  r-   r~   )	r
  r  r  r   r(  r-  r1  r6  r9  r/   r/   r/   r7   r    s    




r  c                   @  sH   e Zd ZdddZdddZdd	d
ZdddZdddZdddZdS )PageCountTextr-   r  c                 O  r  r  r  r  r/   r/   r7   r   %  r!  zPageCountText.__init__r~   c                 C  r7  r   r  r8  r/   r/   r7   r9  (  r:  zPageCountText.__str__r   c                 C  r"  r#  )r$  	pagecountr~   r   r&  r/   r/   r7   r(  +  r)  zPageCountText.__contains__rb   r*  c                 C  r+  r   r  r,  r/   r/   r7   r-  0  r.  zPageCountText.splitr/  r   c                 C  s   | j s| j S | j | S r   r  r0  r/   r/   r7   r1  3  r2  zPageCountText.__getitem__r$  r)   c                 C  r3  r   r4  r5  r/   r/   r7   r6  6  r!  zPageCountText.setFlowableNr;  r@  r<  r=  r>  r?  )	r
  r  r  r   r9  r(  r-  r1  r6  r/   r/   r/   r7   rA  $  s    




rA  sentencec                 C  s&   |  d}dt|}|d d d S )N )r-  joinreversed)rC  wordsreverse_sentencer/   r/   r7   rI  :  s   
rI  c                   @  sH  e Zd ZdZdXdYddZdd Zdd Zdd Zdd Zdd Z	dd Z
dZddZd[ddZd\d d!Zd\d"d#Zed]d'd(Zed)d* Zed+d, Zd-d.d^d1d2Zd\d3d4Zd5d6 Zd7d8 Zd\d9d:Zd_d;d<Zd\d=d>Zd\d?d@Zd`dBdCZedadDdEZdbdGdHZdIdJ ZdKdL ZdZdcdNdOZ dddQdRZ!dZdSdTZ"dedVdWZ#dS )fr   zZ
    Helper class for creation of reportlab story and container for
    various data.
    r^   r   rE  r   r~   debugr   capacityr-   r  c                 C  s  t  tj| _t  t | _g | _g | _g | _g | _	g | _
g | _g | _g | _g | _g | _g | _g | _g | _d | _d | _d | _d | _d | _t | _d| _d| _d| _d| _d| _d| _d| _ d| _!d| _"i | _#i | _$i | _%|| _&t' | _(d| _)t*| _+t,d| _-t.t/d| 0  | _1| j1| _2d| _3d| _4d| _5d | _6|pd	| _7t88| j7}|j9st:t;| j7< = | _7t>| j7| _?ddddt*d
| _@d S )Nr   g        r^   F12ptr   Tltr	__dummy__)authortitlesubjectkeywordsr   )Acopyr   DEFAULT_FONTfontListr   asianFontList
anchorFrag
anchorName
fragAnchorfragList	fragStackr   r   frameStatioundListr   r   r   select_optionsstoryimageindexing_storykeepInFrameIndexnoder   r   	tableDataerrrf   listCounteruidctrwarncssDefaultTextcssTextlanguagerb   r   	imageDatar   rK  r(   toc
multiBuildr	   r   r    baseFontSizer}   r
   r   r|   	fragBlock	fragStripforcedirpathCallbackpathDocumentr   r   r~   r   absoluter   r   pathDirectorymeta)r3   r   rJ  rK  r   r/   r/   r7   r   F  sn   

zpisaContext.__init__c                 C  s   |dkrd| j _|| _d S )Nr]   T)r|   r]   rr  )r3   	directionr/   r/   r7   setDir  s   
zpisaContext.setDirc                 C  s   |  j d7  _ | j S )Nr`   )rf  r8  r/   r/   r7   r     s   zpisaContext.UIDc                 C  N   |  }|dr|dd }|dr|dd }|  j|  d 7  _d S Nz	<![CDATA[	   z<!--   
)strip
startswithri  r3   valuer/   r/   r7   addCSS     

zpisaContext.addCSSc                 C  rz  r{  )r  r  rh  r  r/   r/   r7   addDefaultCSS  r  zpisaContext.addDefaultCSSc                 C  s   dd l }tg dd| _|| | j_tdd t_t| j| _| j	| j_
|| | j_tdd t_| j| j| _| j| j| _tj| j| jd| _| j| j_d S )Nr   )allprintpdf)	mediumSetc                 S     |   S r   _cr8  r/   r/   r7   <lambda>      z&pisaContext.parseCSS.<locals>.<lambda>c                 S  r  r   r  r8  r/   r/   r7   r    r  )	userAgentuser)weakrefr   
cssBuilderrefr  propertyr   r  r   rv  r   r  ri  r#   rh  
cssDefaultCSSCascadeStrategy
cssCascader   )r3   r  r/   r/   r7   parseCSS  s   
zpisaContext.parseCSSc                 C  s   | j | d S r   )r^  r   )r3   r   r/   r/   r7   addStory     zpisaContext.addStoryNc                 C  s.   |d ur|ng }t  |t  | j| _}|S r   )rS  r^  )r3   r^  r/   r/   r7   	swapStory  s   zpisaContext.swapStoryr
   c                 C  s   t d|   |jd}t||d t|j|j |jd |_|jp#|j	|_|j|_
|jd u r5|jr5|j|_|jd u rA|jrA|j|_|jd u rM|jrM|j|_|jd u rY|jrY|j|_t|j	|j|j|_	|S )Nz	default%d)r\   )rc   rf   rh   rN   rA   rB   rC   rD   rE   rg   rj   rK   rU   rt   rr   rs   rw   ru   rv   rn   rl   rm   rq   ro   rp   rI   rJ   rG   rH   rF   g      ?)r
   r   r\   r   maxr?   r@   rf   ry   rc   bulletFontSizers   rr   rg   rv   ru   rm   rl   rp   ro   r   rd   re   )r3   r   r{   r/   r/   r7   toParagraphStyle  s*   %	zpisaContext.toParagraphStylec                 C  s   | j sd S g }tdD ]*}d| | j jd< t| j | | _tj| ddddddd | | j}|	| q|| j
_| | j
 d | _d S )N   zpdftoclevel%dclassr   )r   r   r   r   T)isBlock)rb  range
attributesr   
CSSCollectcssAttrCSS2Fragr  r|   r   rl  levelStylesr  r`  )r3   stylesipstyler/   r/   r7   addTOC  s(   

zpisaContext.addTOCc                 C  s   | j st | _d| _ d S d S )NT)rm  r$   r`  r8  r/   r/   r7   addPageCount  s   
zpisaContext.addPageCountflowr)   rA  c                 C     t  }||  |S r   )rA  r6  )r  pcr/   r/   r7   getPageCount"     
zpisaContext.getPageCountc                 C  r  r   )r  r6  )r  pgnumberr/   r/   r7   addPageNumber(  r  zpisaContext.addPageNumberc                 C  s   d S r   r/   )_frags_styler/   r/   r7   dumpPara.     zpisaContext.dumpParaF)rq  rq  r   c                C  s  |p| j }d| _ t| j d}| jD ]}t|j|j|j }t||j|j |}||_q|s6| j	
 r| jr| j}| |}|jrE||_nt|j|j|j |_t|j}d |_|set| j| j dkr| jrx| j| jd jdddd n| j }d|_d|_	| j| | | j| j | t| dr| d}	t| j	|	}
|
d ur|
| _	t| j	|| j| j || jd}|j|_|j|_|j|_|j|_d	|_| j rt!|| j | j"#d
dd}| $| g | _d |_d | _ i | _"| %  d S )NFr   rE  r^   )rb   rX   rY   ra   rj  )fragsr2   rr  r  alignr   )side)&rq  rG  rZ  r    ri   rf   r@   r  r?   rb   r  ro  r  rS  r2   lenrY  r   r8   r|   rc   r  hasattr__getattribute__r   r&   rr  rZ   rM   r[   r\   autoLeadingr_  r'   rk  r   r  	clearFrag)r3   rq  
maxLeadingr|   r?   r   r{   r2   blankrj  detect_language_resultparar/   r/   r7   addPara2  sp   









zpisaContext.addParac                 C  s   g | _ d| _d| _d S )NTr^   )rZ  rp  rb   r8  r/   r/   r7   r    s   
zpisaContext.clearFragc                 K  s   | j jdi |S Nr/   r|   r8   r3   kwr/   r/   r7   copyFrag  s   zpisaContext.copyFragc                 K  s   | j jdi || _ | j S r  r  r  r/   r/   r7   newFrag  s   zpisaContext.newFragc                 C  s<   |j r|j dr| j||j dd  f | j| d S )N#r`   )rP   r  rW  r   rZ  )r3   r|   r/   r/   r7   _appendFrag  s   zpisaContext._appendFragc                 C  s8  | j   }}|jdkr|jdkrd|_d|_|jr+|j t |_t|jt d|_n|jr=|jt	 |_t|jt d|_t
|j|j|j |_|_t|ttfr[||_| | d S |dddtdt}|jdkrtd	|D ]B}|  j|7  _d
|v sd|v r| }d|_d|_| | qt|dd}td|D ]}| }|dkrt}||_| | qqtd S tdt d |D ]V}| }|tkrd| _t|_|  j|7  _| | qdd| d  dd |_t| |j}|r||_| jr|j |_|jrd| _|  j|j7  _| | qd S )Nr`   r         ­r^   u   Â r,   prez(\r\n|\n|\r)r  	z        z(\ )rD  ()Tr   rE  F)r|   r8   r9   r:   rf   subFractionr;   r  	sizeDeltasuperFractionr   rc   rd   re   ry   r   r  rA  rb   r  replaceNBSPrx   rer-  	lineBreakrq  rF  r   rp  lstrip)r3   rb   r|   baseFraglanguage_checkr/   r/   r7   addFrag  sj   

 zpisaContext.addFragc                 C  s   | j | j |   d S r   )r[  r   r|   r  r8  r/   r/   r7   pushFrag  s   zpisaContext.pushFragc                 C  s   | j  | _d S r   )r[  popr|   r8  r/   r/   r7   pullFrag  r  zpisaContext.pullFragr  c                 C  s8   zt d| j  d | W S  ty   Y dS w )NrD  r^   )reprrF  rb  toxmlr-  r  )r3   liner/   r/   r7   _getFragment  s
   "zpisaContext._getFragmentc                   C  s   dS )Nr   r/   r/   r/   r/   r7   _getLineNumber  r  zpisaContext._getLineNumbermsgc                 C  s   |d|  d S )Nr  2   )r  )r3   r  r/   r/   r7   context  s   zpisaContext.contextc                 G  `   |  j d7  _ | jtj|  t|| df z| || W S  t	y/   | | Y S w Nr`   r  )
rg  r   r   r   PML_WARNINGr  r~   r  r  r  r3   r  r  r/   r/   r7   r     s   zpisaContext.warningc                 G  r  r  )
rd  r   r   r   	PML_ERRORr  r~   r  r  r  r  r/   r/   r7   error  s   zpisaContext.errorpisaFileObject | Nonec                 C  s"   |du rdS t ||p| j| jdS )zReturns a file name or None.N)callback)r   rv  rs  )r3   r   r   r/   r/   r7   r     s   zpisaContext.getFile	helveticac                 C  s   t |tst|}| d}|D ],}t|}|  }|| jv r/| j|d}t| n| j	|d}|dur>|  S q| j	|dS )zName of a font.,N)
r   r   r~   r  r-  r   rV  r   r!   rU  )r3   r   r   r   r   r/   r/   r7   getFontName  s   


zpisaContext.getFontNamec                 C  sF   |d ur|ng }t || jt | < |D ]}t || jt |< qd S r   )r~   rU  r   )r3   fontnamealiasr   r/   r/   r7   registerFont(  s
   zpisaContext.registerFontWinAnsiEncodingc                 C  s  |rV|rX|}|j }td| t|tr |dr |d}t|tr(|}n
dd |dD }dd |D }|d }d }	t|j	t
rN| d	krMd
}	n$|d}
d|
d d |
d }}| }|dv rld
}	n|dv rr|}	|	d
krd|||f }|| jv rt| d| d S | }t||}t| dD ]}dD ]}d|||f | jvrt|||| qq| |g || d S |	dv rL|	dkr| }t|d |jd}| }n| }t|d |jd}| }d|||f }|| jv rt| d| d S t||}|j}t| t|||}t| dD ]}dD ]}d|||f | jvr:t|||| q&q"| |g ||| d S t| d d S d S d S )NzLoad font %rr  c                 s  s     | ]}|r|   V  qd S r   )r   r  r   r   r/   r/   r7   	<genexpr>;  s    z'pisaContext.loadFont.<locals>.<genexpr>r  c                 S  s   g | ]}t |qS r/   )r~   r  r/   r/   r7   r   >  s    z(pisaContext.loadFont.<locals>.<listcomp>r   zfont/ttfttf.rE  )r  ttc)afmpfbz%s_%d%dz+Repeated font embed for %s, skip new embed )r   r`   )r  r^   r  z.pfb)basepathz.afmz*Repeated font embed for %s, skip new embedzwrong attributes for <pdf:font>)r  r   rJ  r   r~   r  r  r   r-  instancer   getMimeTyperF  r   rU  r   getNamedFiler   r   r  r   r   r  EmbeddedType1Facer   registerTypeFaceFont)r3   r   r   encodingrd   re   file	fontAliasrc   	font_typer   baseNamesuffixfullFontNamefilenamer  tfiler   facefontNameOriginaljustFontr/   r/   r7   r   /  s   









zpisaContext.loadFont)r^   r   rE  )r   r~   rJ  r   rK  r   r-   r  r   )r-   r
   r;  )r  r)   r-   rA  )rq  r   r-   r  )r^   N)r  )r-   r   )r  r~   r-   r~   )r-   r  )r  )r  r   r   )$r
  r  r  __doc__r   ry  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r  r  r   r/   r/   r/   r7   r   @  sJ    ?	


B



V


H





r   )r-   r   r@  )rC  r~   r-   r~   )W
__future__r   rS  loggingr  urllib.parser  r   pathlibr   typingr   r   	reportlabr   reportlab.lib.enumsr   reportlab.lib.fontsr   reportlab.lib.pagesizesr	   reportlab.lib.stylesr
   reportlab.pdfbaser   reportlab.pdfbase.ttfontsr   reportlab.platypus.framesr   reportlab.pdfgen.canvasr   ImportErrorreportlab.platypus.paraparserr   r   r   	xhtml2pdfr   r   xhtml2pdf.filesr   r   r   xhtml2pdf.tablesr   xhtml2pdf.utilr   r   r   r   r   r   r   r   r    r!   r"   xhtml2pdf.w3cr#   xhtml2pdf.xhtml2pdf_reportlabr$   r%   r&   r'   r(   reportlab.platypus.flowablesr)   r*   warnOnMissingFontGlyphs	getLoggerr
  r   r  r  r  r  r8   r}   r   
CSSBuilderr   	CSSParserr  r  rA  rI  r   r/   r/   r/   r7   <module>   s`   4



V  A
