
    DsiC                       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 	 d dlmZ 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rd dlAmBZB d dl;mCZC d e_D         ej                  eF      ZGdZHdZIdZJdZKd(dZLeLe!_L        d(dZMd)dZN G d de:j                        ZP G d d e:j                        ZR G d! d"      ZS G d# d$      ZTd*d%ZU G d& d'      ZVy# e$ r	 d dlmZ Y w xY w)+    )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?    c                    t        di | j                  }|r$|j                  }|j                  |       d|v r|d= d |_        |S )NcbDefn )r   __dict__update
bulletText)selfkwargsnds       ]/var/www/python-projects/worksol/worksolenv/lib/python3.12/site-packages/xhtml2pdf/context.pycloner9   P   sE    !4==!AJJ	q=(ALH    c                   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widthr3   )
pageNumber	pageCountoutlineoutlineOpenkeepWithNextrtlF zTimes-Romannormalz150%   	Helveticag      ?)r   r#   textfontNamer   bolditalicfontSize	textColorletterSpacingleadingSourcer   	alignmentborderWidthborderLeftWidthrU   borderLeftColorrT   borderLeftStyleborderRightWidthborderRightColorborderRightStyleborderTopWidthborderTopColorborderTopStyleborderBottomWidthborderBottomColorborderBottomStyle
whiteSpacebulletFontNamezoom)stylefrags     r8   getParaFragr   _   sm   ZD	
. 	
38 	
 	" T DI!DM,1%..,A)DM49dkNNDM__DN "DDDND++D++D++D ,,D ,,D ,,D**D**D**D!--D!--D!--DDO%DDIKr:   c                    t        j                   |       }|j                  r| S t        t        |       j                  j                               S N)urlparseschemestrr   parentresolve)pathpartss     r8   
getDirNamer      s<    d#E||tDz  ((*++r:   c                      e Zd ZU ded<   ddZdddd	 	 	 	 	 	 	 	 	 ddZeddd	       Zedd
       Z	 	 	 	 	 	 	 	 	 	 ddZ	ddZ
y)pisaCSSBuilderpisaContextcc                <   | j                  | j                  d      g|      }t        t        |d   j	                                     }d|vri i fS |d   }t        |j                  dd            j                         }|dv }|s4|dk7  r/t        j                  | j                  j                  d|             t        |j                  d	d
            j                         dv }t        |d   t              r$|d   D cg c]  }t        |t
              s| }	}n|d   g}	|	D ]p  }
| j                  j                  |
| j                  j                  j                        }|sA|j!                         rR| j                  j#                  ||||       r i i fS c c}w )zEmbed fonts.*r   srczfont-familyzfont-weightrb   >   500600700800900rg   bolderz)@fontface, unknown value font-weight '%s'z
font-stylera   >   rh   obliquerelative)rg   rh   )rulesetselectornextitervaluesr   getlowerlogwarningr   
isinstancelistr   	cssParserrootPathnotFoundloadFont)r4   declarationsresultdatanamesfweightrg   rh   partfontsfontr   s               r8   
atFontFacezpisaCSSBuilder.atFontFace   su   t}}S12LAD))+,-r6M]# dhh}h78>>@OO8+KKJGT
 TXXlB/0668<QQ d5k4(&*5kKdZc5JTKEK%[ME 	FD&&..0@0@0I0I.JC3<<>sfE	F 2v Ls   =FFFN)r   r   firstbordersizec               8   | j                   }|sd|j                         z  }|j                  dd      r
|d   |d   f}t        ||d   |d         \  }}}	}
|r|d |j                  d|      |||	|
|fS ||j                  dd       |j                  d|      |||	|
|fS )Nz-pdf-frame-%dis_landscapeFrc   r   z-pdf-frame-borderz-pdf-frame-content)r   UIDr   r    )r4   namer   r   r   r   r   xywhs              r8   _pisaAddFramezpisaCSSBuilder._pisaAddFrame   s     FF"QUUW,D88NE*GT!W%D'd1gtAw?
1a txx(;VDaAqRVVV HH)40HH(&1	
 		
r:   c                    |sd }t        |t        t        f      r|D ]  }|| v r || |         c S |c S  y || v r || |         S |S )Nc                    | S r   r0   )r   s    r8   funcz)pisaCSSBuilder._getFromData.<locals>.func  s    r:   )r   r   tuple)r   attrr   r   as        r8   _getFromDatazpisaCSSBuilder._getFromData   s_     dT5M* ?()T	tDG}>w>?#'4<tDJ<W<r:   c                j   | j                  d      }| j                  d      }| j                  d      }| j                  d      }dt        | j                  dd            i}|rt        |d         t        |d         g|d	<   |rt        |      |d
<   |rt        |      |d<   |rt        |      |d<   |S )Nzbackground-object-positionzbackground-heightzbackground-widthzbackground-opacitystepzbackground-page-steprc   r   object_positionrY   rZ   opacity)r   r   r!   )r   r   rY   rZ   r   devs         r8   get_background_contextz%pisaCSSBuilder.get_background_context  s    ((#?@-.+,((/0Xdhh/Eq&IJK*+*+&C!" #FOCM"5>CL%g.C	N
r:   c               F	   | j                   }|xs d}||j                  v r/t        j                  | j                   j                  d|             | j	                  |ddt
              }| j	                  |ddt
              }| j	                  |ddt
              }	| j	                  |ddt
              }
| j	                  |dd t              }| j	                  |d	dt
              }d
D ]A  }||v s|j                  j                  | j                  ||d||j                                n g }g }|j                  D ]  \  }}}}}}}}| j	                  |d|t
              }| j	                  |d|t
              }| j	                  |d|	t
              }| j	                  |d|
t
              }| j	                  |d|t              }| j	                  |d	|t
              }|s|rt        t        |            }nt        ||      }|r,t        ||j                  d   |j                  d         \  }}}}t        |||||j                        \  }}}}|dk  s|dk  r.t        j                  | j                   j                  d             t        ||||||||||
      }|rFg |_        |g|j"                  j%                  |g       |j"                  |<   |j                  |       |j                  |        |j%                  dd       } | j'                  |      }!| r;| j                   j)                  | | j                   j*                  j,                        } |st        j                  |j                  d             | j                  ||d||j                        \  }}}}}}}}t        |||||j                        \  }}}}|dk  s|dk  r$t        j                  |j                  d             |s|rt               }nt        ||      }|j                  t        |||||||	|
||
             t/        |||j                        }"||"_        | |"_        |j4                  |"_        |!|"_        |r|"j8                  |"_        |"|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bottomrZ   rY   Tr   )rZ   )colorrZ   rc   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)#r4   r   
pseudopager   isLandscape
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pts#                                      r8   atPagezpisaCSSBuilder.atPage!  s    FF~v1>>!KK'OQUVW''mQH((~q'J))$GL**41A1gN(( 

 (( 


 	D t|""&&d$z

 ' 
 %	* 	
89 I	(4E661aAu,,UM;PWXL --~|WM "..wN #//'O !-- 
M !-- 
M 0f+ 
  1'} 
 /qzz!}ajjQRmT
1a"1aAqzz:JAq!QAvaFFNNV )+-')E (*%).(O1B1B621N(Of%!!%(  'SI	(V XX0$7
!88>
TVV=M=M=V=VWJKK		 7;6H6Hd$z

 7I 73E661aAt #1aAqzz:JAq!QAvaIIU 020|<X ,!."0*!- YL&& ! 4 41!#B!t
2vr:   c                b   |r| j                  | j                  d      g|      }|d   }|r_	 |j                         d   }| j
                  j                  j                  | j                  ||| j
                  j                               i i fS # t        $ r |j	                         d   }Y mw xY w)Nr   r   rc   )r   )
r   r   r   	Exceptionpopitemr   r   r   r   r   )r4   r   r   r   r   s        r8   atFramezpisaCSSBuilder.atFrame  s    \\4==#5"6EF !9D-;;=+D   ''&&tT&H 2v ! -<<>!,D-s   B B.-B.)returntuple[dict, dict])
r   r   r   dictr   boolr   ztuple[float, float]r  zDtuple[str, str | None, str | None, float, float, float, float, dict])NN)r   zCallable | None)r   r  r  r  )
r   r   r   z
str | Noner   r  r   r  r  r  )r   r   r  r  )__name__
__module____qualname____annotations__r   r   staticmethodr   r   r  r  r0   r:   r8   r   r      s    NL $*

 

 
 "
 
N
@ 
= 
=  &FF F 	F F 
FPr:   r   c                      e Zd Zd Zy)pisaCSSParserc                   d }| j                   }| j                  j                  || j                         }|sy | j                   rOt        j                  | j                         j                  r&t        j
                  | j                   |      | _         nt        |j                        | _         	 | j                  |j                               }|| _         |S # t        $ r t        j                  d       Y |S w xY w)Nr   zError while parsing CSS file)r   r   r   r   r   urljoinr   uriparsegetDatar
  r   	exception)r4   cssResourceNamer   oldRootPathcssFiles        r8   parseExternalzpisaCSSParser.parseExternal  s    mm&&..4==.I==X..t}}=DD$,,T]]OLDM&w{{3DM	:ZZ 12F'DM   	:MM89	:s   /&C C98C9N)r  r  r  r!  r0   r:   r8   r  r    s    r:   r  c                  <    e Zd ZddZd	dZd
dZddZddZddZy)PageNumberTextc                    d| _         y Nra   r   r4   argsr5   s      r8   __init__zPageNumberText.__init__  	    	r:   c                x    | j                   j                  $t        | j                   j                        | _        yNF)flowablepager   r   r4   keys     r8   __contains__zPageNumberText.__contains__  s+    ==)DMM../DIr:   c                    | j                   gS r   r&  r4   re   s     r8   splitzPageNumberText.split      		{r:   c                P    | j                   r| j                   |   S | j                   S r   r&  r4   indexs     r8   __getitem__zPageNumberText.__getitem__  s     #'99tyy;$));r:   c                    || _         y r   r-  r4   r-  s     r8   setFlowablezPageNumberText.setFlowable  	     r:   c                    | j                   S r   r&  r4   s    r8   __str__zPageNumberText.__str__       yyr:   Nr  Noner  r  re   r   r  z	list[str]r8  r   r  r   r-  r*   r  rD  r  r   )	r  r  r  r)  r1  r4  r9  r=  rA  r0   r:   r8   r#  r#    s     
<!r:   r#  c                  <    e Zd ZddZd	dZd
dZddZddZddZy)PageCountTextc                    d| _         y r%  r&  r'  s      r8   r)  zPageCountText.__init__%  r*  r:   c                    | j                   S r   r&  r@  s    r8   rA  zPageCountText.__str__(  rB  r:   c                x    | j                   j                  $t        | j                   j                        | _        yr,  )r-  	pagecountr   r   r/  s     r8   r1  zPageCountText.__contains__+  s+    =="".DMM334DIr:   c                    | j                   gS r   r&  r3  s     r8   r4  zPageCountText.split0  r5  r:   c                P    | j                   s| j                   S | j                   |   S r   r&  r7  s     r8   r9  zPageCountText.__getitem__3  s      $		tyy?tyy/??r:   c                    || _         y r   r;  r<  s     r8   r=  zPageCountText.setFlowable6  r>  r:   NrC  rI  rE  rF  rG  rH  )	r  r  r  r)  rA  r1  r4  r9  r=  r0   r:   r8   rK  rK  $  s!    
@!r:   rK  c                h    | j                  d      }dj                  t        |            }|d d d   S )N )r4  joinreversed)sentencewordsreverse_sentences      r8   rZ  rZ  :  s2    NN3Exx0DbD!!r:   c                  "   e Zd ZdZd$d%dZd Zd Zd Zd Zd Z	d Z
d&d
Zd'dZd(dZd(dZed)d       Zed        Zed        Zddd*dZd(dZd Zd Zd(dZd+dZd(dZd(dZd,dZed-d       Zd.dZd Zd Zd&d/d Z d0d!Z!d&d"Z"d1d#Z#y	)2r   zZ
    Helper class for creation of reportlab story and container for
    various data.
    c                   t        j                   t        j                        | _        t        j                   t	                     | _        g | _        g | _        g | _        g | _	        g | _
        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        d | _        d | _        d | _        d | _        d | _        t1               | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _         d| _!        d| _"        i | _#        i | _$        i | _%        || _&        tO               | _(        d| _)        tT        | _+        tY        d      | _-        t]        t_        d| ja                                      | _1        | jb                  | _2        d| _3        d| _4        d| _5        d | _6        |xs d	| _7        tq        jp                  | jn                        }|jr                  s?tu        tw        | jn                        jy                         j{                               | _7        t}        | jn                        | _?        ddddtT        d
| _@        y )Nr   g        ra   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errri   listCounteruidctrwarncssDefaultTextcssTextlanguagere   r   	imageDatar   capacityr)   toc
multiBuildr
   r   r!   baseFontSizer   r   r   r   	fragBlock	fragStripforcedirpathCallbackpathDocumentr   r   r   r   absoluter   r   pathDirectorymeta)r4   r   debugr}  r   s        r8   r)  zpisaContext.__init__F  s   (,		'2F2F(G-1YY7M7O-P " " " !!%'(*	(*)+
&*
37 $	$-K" !	#%	!#!"$%'9'; %-/#*6?).7488:,9O*PQ	#'99# 
 ! "&!4!!$"3"34|| #D):):$;$D$D$F$N$N$P QD",T->->"? ;
	r:   c                >    |dk(  rd| j                   _        || _        y )Nr`   T)r   r`   r  )r4   	directions     r8   setDirzpisaContext.setDir  s     DIIMr:   c                D    | xj                   dz  c_         | j                   S )Nrc   )rw  r@  s    r8   r   zpisaContext.UID  s    q{{r:   c                    |j                         }|j                  d      r|dd }|j                  d      r|dd }| xj                  |j                         dz   z  c_        y Nz	<![CDATA[	   z<!--   
)strip
startswithrz  r4   values     r8   addCSSzpisaContext.addCSS  sX    K(!BKEF#!BKE,,r:   c                    |j                         }|j                  d      r|dd }|j                  d      r|dd }| xj                  |j                         dz   z  c_        y r  )r  r  ry  r  s     r8   addDefaultCSSzpisaContext.addDefaultCSS  s[    K(!BKEF#!BKEu{{}t33r:   c                   dd l }t        g d      | _        |j                  |       | j                  _        t        d       t        _        t        | j                        | _        | j                  | j                  _
        |j                  |       | j                  _        t        d       t        _        | j                  j                  | j                        | _        | j                  j                  | j                        | _        t        j                   | j                  | j                        | _        | j                  | j"                  _        y )Nr   )allprintpdf)	mediumSetc                "    | j                         S r   _cr@  s    r8   <lambda>z&pisaContext.parseCSS.<locals>.<lambda>  s     r:   c                "    | j                         S r   r  r@  s    r8   r  z&pisaContext.parseCSS.<locals>.<lambda>  s    	 r:   )	userAgentuser)weakrefr   
cssBuilderrefr  propertyr   r  r   r  r   r  rz  r$   ry  
cssDefaultCSSCascadeStrategy
cssCascader   )r4   r  s     r8   parseCSSzpisaContext.parseCSS  s    
 	(3JK$[[.#$:;&t7"&"4"4#KK-"#9:>>''5....t/B/BC00ooDHH
 "&r:   c                :    | j                   j                  |       y r   )ro  r   )r4   r   s     r8   addStoryzpisaContext.addStory  s    

$r:   Nc                    ||ng }t        j                   |      t        j                   | j                        c| _        }|S r   )rd  ro  )r4   ro  s     r8   	swapStoryzpisaContext.swapStory  s7    * IIe,dii

.C
Er:   c                   t        d| j                         z  |j                        }t        ||d       t	        |j
                  |j                  z   |j                  dz        |_        |j                  xs |j                  |_        |j                  |_
        |j                  |j                  r|j                  |_        |j                  |j                  r|j                  |_        |j                   |j"                  r|j                  |_        |j$                  |j&                  r|j                  |_        t)        |j                  |j*                  |j,                        |_	        |S )Nz	default%d)r_   )rf   ri   rk   rQ   rD   rE   rF   rG   rH   rj   rm   rN   rX   rw   ru   rv   rz   rx   ry   rq   ro   rp   rt   rr   rs   rL   rM   rJ   rK   rI   g      ?)r   r   r_   r   maxrB   rC   ri   r|   rf   bulletFontSizerv   ru   rj   ry   rx   rp   ro   rs   rr   r   rg   rh   )r4   r   r~   s      r8   toParagraphStylezpisaContext.toParagraphStyle  s'   $((*$53E3E
 	#	
J EMME,>,>>QU@UV$33Eu~~$~~   (e.B.B#(??E ##+1H1H&+ooE#!!)u/D/D$)OOE!""*0F0F%*__E"u~~uzz5<<Hr:   c           	        | j                   sy g }t        d      D ]  }d|z  | j                   j                  d<   t        j                  | j                   |       | _        t        j                  | dddddd       | j                  | j                        }|j                  |        || j                  _        | j                  | j                         d | _        y )N   zpdftoclevel%dclassr   )r   r   r   r   T)isBlock)rs  range
attributesr   
CSSCollectcssAttrCSS2Fragr  r   r   r~  levelStylesr  rq  )r4   stylesipstyles       r8   addTOCzpisaContext.addTOC  s    yyr 	"A,;a,?DII  )!,,TYY=DLOO"#%&#$$%	 	 **4995FMM&!	"   &dhh"r:   c                J    | j                   st               | _        d| _         y y )NT)r  r%   rq  r@  s    r8   addPageCountzpisaContext.addPageCount  s    "..D"DO r:   c                <    t               }|j                  |        |S r   )rK  r=  )flowpcs     r8   getPageCountzpisaContext.getPageCount"  s    _
t	r:   c                <    t               }|j                  |        |S r   )r#  r=  )r  pgnumbers     r8   addPageNumberzpisaContext.addPageNumber(  s    !#T"r:   c                     y r   r0   )_frags_styles     r8   dumpParazpisaContext.dumpPara.  s    r:   F)r  c                  |xs | j                   }d| _         t        | j                         d}| j                  D ]Z  }t        |j                  |j
                        |j                  z   }t        ||j
                  |j                  z   |      }||_        \ |s(| j                  j                         r| j                  r| j                  }| j                  |      }|j                  r||_        n2t        |j                  |j
                        |j                  z   |_        t        j                  |j                        }d |_        |s&t        | j                   | j                  z         dkD  r| j                  r;| j                  j#                  | j                  d   j%                  ddd             nC| j&                  j%                         }d|_        d|_	        | j                  j#                  |       | j+                  | j                   | j                  z   |       t-        | d      r0| j/                  d      }	t1        | j                  |	      }
|
|
| _	        t3        | j                  || j                   | j                  z   || j4                        }|j6                  |_        |j8                  |_        |j:                  |_        |j<                  |_        d	|_        | j@                  r2tC        || j@                  | jD                  jG                  d
d            }| jI                  |       g | _        d |_        d | _         i | _"        | jK                          y )NFr   rU  ra   )re   r[   r\   rd   r{  )fragsr3   r  r  alignr   )side)&r  rW  rk  r!   rl   ri   rC   r  rB   re   r  r  r  rd  r3   lenrj  r   r9   r   rf   r  hasattr__getattribute__r   r'   r  r]   rP   r^   r_   autoLeadingrp  r(   r|  r   r  	clearFrag)r4   r  
maxLeadingr   rB   r   r~   r3   blankr{  detect_language_resultparas               r8   addParazpisaContext.addPara2  s   #
 	 
MM 	#Dd00$--@4CTCTTGWdmmd6G6G&GTJ"DL	#
 TYY__&4==NNE))%0E!! * E//@5CUCUU  5#3#34J#E DOOdmm;<q@ ==MM((b)//!# 0  !IIOO-E%0EN!#EJMM((/doo=uE4,#44Z@H-:499h-O*-9$:	#II//DMM9)  %}}$)$6$6!#(#4#4 $)$6$6!#( ::/djjt~~/A/A'6/RD d# DO#E 
r:   c                .    g | _         d| _        d| _        y )NTra   )rk  r  re   r@  s    r8   r  zpisaContext.clearFrag  s    	r:   c                :     | j                   j                  di |S Nr0   r   r9   r4   kws     r8   copyFragzpisaContext.copyFrag  s    tyy$$$r:   c                \     | j                   j                  di || _         | j                   S r  r  r  s     r8   newFragzpisaContext.newFrag  s%    #DIIOO)b)	yyr:   c                    |j                   rE|j                   j                  d      r*| j                  j                  ||j                   dd  f       | j                  j                  |       y )N#rc   )rS   r  rh  r   rk  )r4   r   s     r8   _appendFragzpisaContext._appendFrag  sM    99--c2OO""D$))AB-#89T"r:   c                   | j                   j                         x}}|j                  dk(  r|j                  dk(  rd|_        d|_        |j                  r<|j                   t
        z  |_        t        |j                  t        z
  d      |_        nF|j                  r:|j                  t        z  |_        t        |j                  t        z
  d      |_        t        |j                  |j                  |j                        x|_        |_        t        |t         t"        f      r||_        | j'                  |       y |j)                  dd      j)                  dt*              j)                  dt*              }|j,                  dk(  rt/        j0                  d	|      D ]  }| xj$                  |z  c_        d
|v sd|v r0|j                         }d|_        d|_        | j'                  |       P|j)                  dd      }t/        j0                  d|      D ]5  }|j                         }|dk(  rt*        }||_        | j'                  |       7  y t/        j0                  dt*        z   dz   |      D ]  }|j                         }|t*        k(  r9d| _        t*        |_        | xj$                  |z  c_        | j'                  |       Vdj7                  d|z   dz   j1                               dd |_        t9        | |j$                        }|r||_        | j:                  r2|j$                  j=                         |_        |j$                  rd| _        | xj$                  |j$                  z  c_        | j'                  |        y )Nrc   r         ­ra   u   Â r-   prez(\r\n|\n|\r)r  	z        z(\ )rT  ()Tr   rU  F)r   r9   r<   r=   ri   subFractionr>   r  	sizeDeltasuperFractionr   rf   rg   rh   r|   r   r#  rK  re   r  replaceNBSPr{   rer4  	lineBreakr  rV  r   r  lstrip)r4   re   r   baseFraglanguage_checks        r8   addFragzpisaContext.addFrag  s   ))//++x 88q=TZZ1_DHDJ 884DI	 91=DMZZ5DI	 91=DM /4MM499dkk/
 	
+ d^];<DIT" ||FB'//
DAII&RVW??e#$7 /		T!	DLddl#>>+D "DI%&DN$$T*  <<g6D !#$ 7 /'~~/3;#'D$(	((.//* tc!148 +~~'4<!%DJ $DIII%I$$T* ##*s*:)A)A)C DQr JDI%=dDII%NN%$2	~~$(II$4$4$6	99-2DNII*I$$T*#+r:   c                n    | j                   j                  | j                         | j                          y r   )rl  r   r   r  r@  s    r8   pushFragzpisaContext.pushFrag  s!    dii(r:   c                B    | j                   j                         | _        y r   )rl  popr   r@  s    r8   pullFragzpisaContext.pullFrag  s    NN&&(	r:   c                    	 t        dj                  | j                  j                         j	                         d |             S # t
        $ r Y yw xY w)NrT  ra   )reprrV  rs  toxmlr4  r
  )r4   lines     r8   _getFragmentzpisaContext._getFragment  sH    	!2!8!8!:5D!ABCC 		s   AA 	AAc                      y)Nr   r0   r0   r:   r8   _getLineNumberzpisaContext._getLineNumber  s    r:   c                .    |d| j                  d       S )Nr  2   )r	  )r4   msgs     r8   contextzpisaContext.context  s    4,,R0122r:   c                <   | xj                   dz  c_         | j                  j                  t        j                  | j                         t        |      | j                  d      f       	 | j                  ||z        S # t        $ r | j                  |      cY S w xY wNrc   r  )
rx  r   r   r   PML_WARNINGr  r   r	  r  r
  r4   r  r(  s      r8   r   zpisaContext.warning  s    		Q	####%C!!"%		
	%<<d
++ 	%<<$$	%   *A> >BBc                <   | xj                   dz  c_         | j                  j                  t        j                  | j                         t        |      | j                  d      f       	 | j                  ||z        S # t        $ r | j                  |      cY S w xY wr  )
ru  r   r   r   	PML_ERRORr  r   r	  r  r
  r  s      r8   errorzpisaContext.error  s    A 3 3 5s3xARARSUAVW	
	%<<d
++ 	%<<$$	%r  c                T    |yt        ||xs | j                  | j                        S )zReturns a file name or None.N)callback)r   r  r  )r4   r   r   s      r8   r   zpisaContext.getFile  s*    <tX;););dFWFWXXr:   c                   t        |t              s*t        |      }|j                         j	                  d      }|D ]  }t        |      }|j                         j                         }|| j                  v r(| j                  j                  |d      }t        |       n| j                  j                  |d      }||c S  | j                  j                  |d      S )zName of a font.,N)
r   r   r   r  r4  r   rg  r   r"   rf  )r4   r   r   r   r   s        r8   getFontNamezpisaContext.getFontName  s     %&JEKKM'',E 		Dt9D::<%%'Dt)))))--dD9%}}((t4		 }}  $//r:   c                    ||ng }t        |      | j                  t        |      j                         <   |D ]#  }t        |      | j                  t        |      <   % y r   )r   rf  r   )r4   fontnamealiasr   s       r8   registerFontzpisaContext.registerFont(  sR    */28}c(m))+, 	2A$'MDMM#a&!	2r:   c                   |rb|r^|}|j                   }t        j                  d|       t        |t              r"|j                  d      r|j                  d      }t        |t              r|}nd |j                  d      D        }|D cg c]  }t	        |       }}|d   }	d }
t        |j                  t              r|j                         dk(  rJd}
nG|j                  d      }dj                  |d d	       |d	   }}|j                         }|d
v rd}
n|dv r|}
|
dk(  rd|	||fz  }|| j                  v r&t        j                  | j                  d|             y |j!                         }t#        ||      }t%        j&                  |       dD ],  }dD ]%  }d|	||fz  | j                  vst)        |	|||       ' . | j'                  |	g ||       y |
dv rc|
dk(  r;|j!                         }t+        dz   |j,                        }|j!                         }n:|j!                         }t+        dz   |j,                        }|j!                         }d|	||fz  }|| j                  v r&t        j                  | j                  d|	             y t%        j.                  ||      }|j0                  }t%        j2                  |       t%        j4                  |||      }t%        j&                  |       dD ],  }dD ]%  }d|	||fz  | j                  vst)        |	|||       ' . | j'                  |	g |||       y t        j                  | j                  d             y y y c c}w )NzLoad font %rr  c              3  ^   K   | ]%  }|s|j                         j                          ' y wr   )r   r  ).0r   s     r8   	<genexpr>z'pisaContext.loadFont.<locals>.<genexpr>;  s     N1AQWWY__.Ns   -#-r  r   zfont/ttfttf.rU  )r%  ttc)afmpfbz%s_%d%dz+Repeated font embed for %s, skip new embed )r   rc   )r(  ra   r(  z.pfb)basepathz.afmz*Repeated font embed for %s, skip new embedzwrong attributes for <pdf:font>)r  r   r  r   r   r  r  r   r4  instancer   getMimeTyperV  r   rf  r   getNamedFiler   r   r   r	   r   r*  EmbeddedType1Facer   registerTypeFaceFont)r4   r   r   encodingrg   rh   file	fontAliasr   rf   	font_typer   baseNamesuffixfullFontNamefilenamer(  tfiler)  facefontNameOriginaljustFonts                         r8   r   zpisaContext.loadFont/  su   SD((CIInc*%%%*:*:3*?C(%&!	NC8HN	 *33AQ3I3 |HI$--6##%3 %I		##&88E#2J#7r&^+ %I~- &IE!(HdF+CC  4==0KKI<  $002H!,9D++D1 !' Q&, QF )XtV,D D%)]] 3 !+8T6< P	QQ %%h0J)0J\0JKk)%++-C*8f+<t}}UE,,.C++-C*8f+<t}}UE,,.C  )HdF+CC  4==0KKH( &77SAD'+yy$//5)|=MxXH++H5 !' U&, UF )XtV,D D%)]] 3 !+8T6CS T	UU %% "NI"N|"N=M"N DLL)JKLG 5 4s   M')ra   r   rU  )r   r   r  r   r}  r   r  rD  r   )r  r   rC  )r  r*   r  rK  )r  r  r  rD  )ra   N)r  )r  r   )r  r   r  r   )r  zpisaFileObject | None)	helvetica)WinAnsiEncodingr   r   )$r  r  r  __doc__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   r0   r:   r8   r   r   @  s    
=
~

-404 
@D#2#
  
  
   (- Sl
%#F+P)  3%%Y0$2eMr:   r   )r  r   rI  )rX  r   r  r   )W
__future__r   rd  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  r9   r   r   
CSSBuilderr   	CSSParserr  r#  rK  rZ  r   r0   r:   r8   <module>r[     s(   #   	   * ! ' * & / ( , +<9 A @ % A A &      56 '( #g!		 Sl,|S^^ |~	CMM & ,! !,"T	M T	M}  <;<s   D= =E
E