
    e@d                     6   d dl 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	 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 d dlmZmZmZ d dlZd dl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+ d dl,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z6 e7Z8e9Z:d e_;         ej<        d          Z=dZ>dZ?dZ@dZAd ZBeBe_B        d ZCd ZD G d de-jE                  ZF G d de-jG                  ZH G d d          ZI G d d          ZJd ZK G d  d!eL          ZMdS )"    N)Path)rl_settings)TA_LEFT)
addMapping)A4)ParagraphStyle)
pdfmetrics)TTFont)FrameShowBoundaryValue)ParaFragps2tttt2ps)getFilepisaFileObject)
arabic_format
copy_attrsfrag_text_language_checkgetColor	getCoordsgetFrameDimensionsgetSizeset_asian_fonts	set_valuegetFloat)css)PmlPageCountPmlPageTemplatePmlParagraphPmlParagraphAndImagePmlTableOfContents	xhtml2pdf   g?    c                     t          di | j        }|r#|j        }|                    |           d|v r|d= d |_        |S )NcbDefn )r   __dict__update
bulletText)selfkwargsnds       /./xhtml2pdf/context.pycloner0   9   sT    !!4=!!A J	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widthr*   )
pageNumber	pageCountoutlineoutlineOpenkeepWithNextrtlF zTimes-Romannormalz150%   	Helveticag      ?)r   r   textfontNamer   bolditalicfontSize	textColorletterSpacingleadingSourcer   	alignmentborderWidthborderLeftWidthrL   borderLeftColorrK   borderLeftStyleborderRightWidthborderRightColorborderRightStyleborderTopWidthborderTopColorborderTopStyleborderBottomWidthborderBottomColorborderBottomStyle
whiteSpacebulletFontNamezoom)stylefrags     r/   getParaFragrw   H   se   ::Dd    d    d5  
 DI!DM,1%.,A,A)DM49dkNDM_DN "DDDND+D+D+D ,D ,D ,D*D*D*D!-D!-D!-DDO%DDIKr1   c                     t          j         |           }|j        r| S t          t          |           j                                                  S N)urlparseschemestrr   parentresolve)pathpartss     r/   
getDirNamer      sD    d##E| 04::$,,..///r1   c                   6    e Zd Zd Zd
dZddZd Zd Zd	 ZdS )pisaCSSBuilderc                    |                      |                     d          g|          }t          |d                                                   d         }d|vri i fS |d         }t	          |                    dd                                                    }|dv }|s9|dk    r3t                              | j	                            d|                     t	          |                    d	d
                                                    dv }|d         }g }	t          |d         t                    r0|D ],}
t          |
t                    r|	                    |
           -n|	                    |           |	D ]_}| j	                            || j	        j        j                  }|                                s| j	                            ||||           `i i fS )z
        Embed fonts
        *r   srczfont-familyzfont-weightrY   )r^   bolder500600700800900z)@fontface, unknown value font-weight '%s'z
font-stylerX   )r_   obliquerelative)r^   r_   )rulesetselectorlistvaluesr|   getlowerlogwarningc
isinstanceappendr   	cssParserrootPathnotFoundloadFont)r+   declarationsresultdatanamesfweightr^   r_   urifontspartfontr   s                r/   
atFontFacezpisaCSSBuilder.atFontFace   s    t}}S112LAAF1I$$&&''*r6M]# dhh}h7788>>@@OO 	V8++KKJGTTV V V HH\2&&( ((-3HI
 5kd5k4(( 	 ' 'dC(( 'LL&&&' LL 	: 	:D&..0@0I.JJC<<>> :s%)&   : : :2vr1   FNr   r   c                 v   | j         }|sd|                                z  }|                    dd          r|d         |d         f}t          ||d         |d                   \  }}}	}
|r|d |                    d|          |||	|
|fS ||                    dd           |                    d|          |||	|
|fS )Nz-pdf-frame-%dis_landscapeFrZ   r   z-pdf-frame-borderz-pdf-frame-content)r   UIDr   r   )r+   namer   firstbordersizer   xywhs              r/   _pisaAddFramezpisaCSSBuilder._pisaAddFrame   s    F 	-"QUUWW,D88NE** 	&GT!W%D'd1gtAw??
1a  	Wtxx(;VDDaAqRVVVdhh3T::,f55q!Q4I 	Ir1   c                     |sd }t          |          t          t          fv r!|D ]}||v r |||                   c S |c S d S ||v r |||                   S |S )Nc                     | S ry   r'   )r   s    r/   funcz)pisaCSSBuilder._getFromData.<locals>.func   s    r1   )typer   tuple)r+   r   attrdefaultr   as         r/   _getFromDatazpisaCSSBuilder._getFromData   s     	"!!!::$&&  994Q==((( 
 t||tDJ'''Nr1   c                    i }|                     dd           }|                     dd           }|                     dd           }|                     dd           }t          |                     dd                    |d<   |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-opacityzbackground-page-steprZ   stepr   object_positionrP   rQ   opacity)r   r   r   )r+   r   devr   rP   rQ   r   s          r/   get_background_contextz%pisaCSSBuilder.get_background_context   s    ((#?FFxx+T22hh)400-t44TXX&<a@@AAF 	`&-oa.@&A&A7?[\K]C^C^%_C!" 	,#FOOCM 	*"5>>CL 	/%g..C	N
r1   c                 	   | j         }|pd}||j        v r3t                              | j                             d|                     |                     |ddt
                    }|                     |ddt
                    }|                     |ddt
                    }	|                     |ddt
                    }
|                     |dd t                    }|                     |d	dt
                    }d
D ]?}||v r9|j                            | 	                    ||d||j
                              n@g }g }|j        D ]\  }}}}}}}}|                     |d|t
                    }|                     |d|t
                    }|                     |d|	t
                    }|                     |d|
t
                    }|                     |d|t                    }|                     |d	|t
                    }|s|rt          t          |                    }nt          ||          }|r,t          ||j
        d         |j
        d                   \  }}}}t          |||||j
                  \  }}}}|dk    s|dk    r2t                              | j                             d                     t          ||||||||||
  
        }|rEg |_        |g|j                            |g           z   |j        |<   |                    |           |                    |           |                    dd           } |                     |          }!| r+| j                             | | j         j        j                  } |st                              |                    d                     | 	                    ||d||j
                  \  }}}}}}}}t          |||||j
                  \  }}}}|dk    s|dk    r-t                              |                    d                     |s|rt                      }nt          ||          }|                    t          |||||||	|
||
  
                   t/          |||j
                  }"||"_        | |"_        |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bottomrQ   rP   T)r   r   r   )rQ   )colorrQ   rZ   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   	frameListr   r   pageSizer   intr   r   r   pisaStaticStoryframeStaticr   r   r   r   r   r   pisaStaticListpisaBackgroundpisaBackgroundListbackgroundContext	LANDSCAPEpageorientationtemplateframeStaticList)#r+   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#                                      r/   atPagezpisaCSSBuilder.atPage   s   F~v1>!!KKGNNP P P ''mQHH((~q'JJ))$GLL**41A1gNN(( 0[\`bjl l(( 0[\]_fh hJ 	 	Dt||""&&tTjWXWa&bbd d d  	
89 -	( -	(4E661aAu,,}k7< <L --~|W> >M!..w@ @N"//'B BO --e 6abnpxz zM --e 6abnpwy yM  > >0s6{{CCC  1'} >  >  >  9/1:a=!*Q-9 9
1a"1aAqz::JAq!QAvvaFNN#abbd d d 1a)+-')+ + +E  ((*%).!-2C2CFB2O2O(Of%!!%((((  ''''XX0$77
!88>> 	@TV%5%> ( @ @J  	,KK		_``b b b6:6H6Ht[_hrNOj 7I 7Z 7Z3E661aAt"1aAqz::JAq!QAvvaII[\\^ ^ ^  < <0220&l <  <  < U1a(*,&)+ + + , , , Z
 
 

 '& ! 41 	.!#B!t
2vr1   c                    |r|                      |                     d          g|          }|d         }|r	 |                                d         }n*# t          $ r |                                d         }Y nw xY w| j        j                            |                     ||| j        j	                             i i fS )Nr   r   rZ   )r   )
r   r   r   	Exceptionpopitemr   r   r   r   r   )r+   r   r   r   r   s        r/   atFramezpisaCSSBuilder.atFramea  s     	J\\4==#5#5"6EEF !9D J-;;==+DD  - - -<<>>!,DDD- ''&&tT&HHJ J J 2vs   A $A:9A:)FNr   )NN)	__name__
__module____qualname__r   r   r   r   r   r  r'   r1   r/   r   r      s        ' ' 'RI I I I      "| | ||    r1   r   c                       e Zd Zd ZdS )pisaCSSParserc                    d }| j         }| j                            || j                   }|sd S | j         r>t          j        | j                   j        r t          j        | j         |          | _         nt          |j                  | _         	 |                     |	                                          }|| _         n&# t          $ r}t          |           Y d }~nd }~ww xY w|S )Nr   )r   r   r   rz   r{   urljoinr   r   parsegetDatar  print)r+   cssResourceNamer   oldRootPathcssFilees         r/   parseExternalzpisaCSSParser.parseExternalt  s    m&..4=.II 	4= 	4X.t}==D 	4$,T]OLLDMM&w{33DM	ZZ 1 122F'DMM 	 	 	!HHHHHHHH	s   .B= =
C CC N)r  r  r  r  r'   r1   r/   r  r  r  s#            r1   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )PageNumberTextc                     d| _         d S NrX   r   r+   argsr,   s      r/   __init__zPageNumberText.__init__      			r1   c                 Z    | j         j        t          | j         j                  | _        dS NF)flowablepager|   r   r+   keys     r/   __contains__zPageNumberText.__contains__  s&    =)DM.//DIur1   c                     | j         gS ry   r  r+   r\   s     r/   splitzPageNumberText.split      	{r1   c                 8    | j         s| j         S | j         |         S ry   r  r+   indexs     r/   __getitem__zPageNumberText.__getitem__  !    y 	9yr1   c                     || _         d S ry   r  r+   r  s     r/   setFlowablezPageNumberText.setFlowable  s    r1   c                     | j         S ry   r  r+   s    r/   __str__zPageNumberText.__str__  
    yr1   N)	r  r  r  r  r"  r%  r*  r/  r2  r'   r1   r/   r  r    sn            
       
      r1   r  c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )PageCountTextc                     d| _         d S r  r  r  s      r/   r  zPageCountText.__init__  r  r1   c                     | j         S ry   r  r1  s    r/   r2  zPageCountText.__str__  r3  r1   c                 Z    | j         j        t          | j         j                  | _        dS r  )r  	pagecountr|   r   r   s     r/   r"  zPageCountText.__contains__  s&    =".DM344DIur1   c                     | j         gS ry   r  r$  s     r/   r%  zPageCountText.split  r&  r1   c                 8    | j         s| j         S | j         |         S ry   r  r(  s     r/   r*  zPageCountText.__getitem__  r+  r1   c                     || _         d S ry   r-  r.  s     r/   r/  zPageCountText.setFlowable  s     r1   N)	r  r  r  r  r2  r"  r%  r*  r/  r'   r1   r/   r5  r5    sn              
       
! ! ! ! !r1   r5  c                     t          |                               d          }d                    t          |                    }|d d d         }|S )N )r|   r%  joinreversed)sentencewordsreverse_sentences      r/   rD  rD    sJ    MM$$Exx00'"-r1   c                       e Zd ZdZd)dZd Zd Zd Zd Zd	 Z	d
 Z
d*dZd Zd Zd Zd Zd Zd Zd+dZd Zd Zd Zd Zd,dZd Zd Zd-dZd Zd  Zd! Zd" Zd*d#Zd.d%Z d*d&Z!d/d(Z"dS )0pisaContextzZ
    Helper class for creation of reportlab story and container for
    various data.
    r   r?  c                    t          j         t          j        j                  | _        t          j         t          j                                                  | _        t          | dg d           t          | dd            t          | dd           t          | dd           t          | d	i d           || _	        t                      | _        d
| _        t          | _        t          d          | _        t#          t%          d|                                 z                      x| _        | _        d| _        d
| _        d| _        d | _        |pd| _        t7          j        | j                  }|j        sJt;          t=          | j                                                                                             | _        tC          | j                  | _"        tG          ddddt                    | _$        d S )N)r   storyr\   r   r   r   r   
anchorFrag
anchorNamefragList
fragAnchor	fragStackT)_copy)nodeindexing_storyr   keepInFrameIndex	tableDataimage)errwarnuidctrlistCounterr   )r\   cssTextcssDefaultTextrX   )r   r   	imageDataF12pt	default%dltr	__dummy__)authortitlesubjectkeywordsr   )%copyr"   r   DEFAULT_FONTfontListutilget_default_asian_fontasianFontListr   capacityr!   toc
multiBuildr   r   r   baseFontSizerw   r   r   rv   	fragBlock	fragStripforcedirpathCallbackpathDocumentrz   r{   r|   r   absoluter~   r   pathDirectorydictmeta)r+   r   debugri  r   s        r/   r  zpisaContext.__init__  s   	)"3"@AA!Yy~'L'L'N'NOO$ 		' 	' 	' 	' 	$ / 	 	 	 	$@!DDD$=rBBB$DD	" 	" 	" 	" %''#FOO%0;344&6 &6 	6	DN
 ! !/K!$"344| 	R #D):$;$;$D$D$F$F$N$N$P$P Q QD'(9::
 
 
			r1   c                 8    |dk    rd| j         _        || _        d S )NrW   T)rv   rW   rp  )r+   rp  s     r/   setDirzpisaContext.setDir  s    %<<DIMr1   c                 0    | xj         dz  c_         | j         S )NrZ   )rV  r1  s    r/   r   zpisaContext.UID  s    q{r1   c                     |                                 }|                    d          r
|dd         }|                    d          r
|dd         }| xj        |                                 dz   z  c_        d S Nz	<![CDATA[	   z<!--   
)strip
startswithrX  r+   values     r/   addCSSzpisaContext.addCSS  sv    K(( 	"!S&MEF## 	"!S&ME,,r1   c                     |                                 }|                    d          r
|dd         }|                    d          r
|dd         }| xj        |                                 dz   z  c_        d S r|  )r  r  rY  r  s     r/   addDefaultCSSzpisaContext.addDefaultCSS  s|    K(( 	"!S&MEF## 	"!S&MEu{{}}t33r1   c                 p   dd l }t          g d          | _        |                    |           | j        _        t          d           t          _        t          | j                  | _        | j	        | j        _
        |                    |           | j        _        t          d           t          _        | j                            | j                  | _        | j                            | j                  | _        t          j        | j        | j                  | _        | j        | j        _        d S )Nr   )allr  pdf)	mediumSetc                 *    |                                  S ry   _cr1  s    r/   <lambda>z&pisaContext.parseCSS.<locals>.<lambda>  s     r1   c                 *    |                                  S ry   r  r1  s    r/   r  z&pisaContext.parseCSS.<locals>.<lambda>  s    		 r1   )	userAgentuser)weakrefr   
cssBuilderrefr  propertyr   r  r   rt  r   r  rX  r   rY  
cssDefaultCSSCascadeStrategy
cssCascadeparser)r+   r  s     r/   parseCSSzpisaContext.parseCSS	  s    
 	(3J3J3JKKK$[[..#$:$:;;&t77"&"4#KK--"#9#9::>''55...t/BCC0oDH6 6 6!%r1   c                 :    | j                             |           d S ry   )rH  r   )r+   r   s     r/   addStoryzpisaContext.addStory"  s    
$r1   Nc                 x    ||ng }t          j         |          t          j         | j                  c| _        }|S ry   )rc  rH  )r+   rH  s     r/   	swapStoryzpisaContext.swapStory%  s9    * Ie,,di
.C.C
Er1   c                 *   t          d|                                 z  |j                  }t          ||d           t	          |j        |j        z   |j        dz            |_        |j        p|j	        |_        |j        |_
        |j        |j        r|j        |_        |j        |j        r|j        |_        |j        |j        r|j        |_        |j        |j        r|j        |_        t)          |j	        |j        |j                  |_	        |S )Nr\  )rV   )r]   r`   rb   rH   r;   r<   r=   r>   r?   ra   rd   rE   rO   rn   rl   rm   rq   ro   rp   rh   rf   rg   rk   ri   rj   rC   rD   rA   rB   r@   g      ?)r   r   rV   r   maxr9   r:   r`   rs   r]   bulletFontSizerm   rl   ra   rp   ro   rg   rf   rj   ri   r   r^   r_   )r+   r   ru   s      r/   toParagraphStylezpisaContext.toParagraphStyle*  s   $((**$53EG G G 	5%	 	 	 ME..0EG G$3Eu~$~  (e.B(#(?E #+1H+&+oE#!)u/D)$)OE!"*0F*%*_E"u~uz5<HHr1   c           	         g }t          d          D ]}d|z  | j        j        d<   t          j                            | j        |           | _        t          j                            | dddddd           |                     | j	                  }|
                    |           || j        _        |                     | j                   d | _        d S )N   zpdftoclevel%dclassr   )r   r   r   r   T)rangerO  
attributesr"   r  
CSSCollectcssAttrCSS2Fragr  rv   r   rj  levelStylesr  rP  )r+   stylesipstyles       r/   addTOCzpisaContext.addTOCV  s    r 
	" 
	"A,;a,?DI )$+66ty$GGDL%%d!"  !	- -
    **4955FMM&!!!!%dh"r1   c                 L    | j         st                      | _        d| _         d S d S )NT)rk  r   rP  r1  s    r/   addPageCountzpisaContext.addPageCounth  s-     	#"...D"DOOO	# 	#r1   c                 L    t                      }|                    |           |S ry   )r5  r/  )r+   flowpcs      r/   getPageCountzpisaContext.getPageCountm  s"    ??
t	r1   c                 L    t                      }|                    |           |S ry   )r  r/  )r+   r  pgnumbers      r/   addPageNumberzpisaContext.addPageNumberr  s&    !##T"""r1   c                     d S ry   r'   )r+   fragsru   s      r/   dumpParazpisaContext.dumpParaw  s    r1   Fc                    |p| j         }d| _         t          | j                  }d}| j        D ]I}t          |j        |j                  |j        z   }t          ||j        |j        z   |          }||_        J|s"| j	        
                                rE| j        r=| j        }|                     |          }|j        r||_        n't          |j        |j                  |j        z   |_        t          j        |j                  }d |_        |s!t          | j        | j        z             dk    r| j        r:| j                            | j        d                             d                     nA| j                                        }	d|	_        d|	_	        | j                            |	           |                     | j        | j        z   |           t-          | d          r7|                     d          }
t1          | j	        |
          }|d k    r|| _	        t3          | j	        || j        | j        z   || j                  }|j        |_        |j        |_        |j        |_        |j        |_        d	|_        | j         r0tC          || j         | j"        #                    d
d                    }| $                    |           g | _        d |_        d | _         i | _"        | %                                 d S )NFr   r?  rX   )r\   r[   language)r  r*   rp  r  alignr   )side)&ro  rA  rK  r   rc   r`   r:   r  r9   r\   r  rm  r  rc  r*   lenrL  r   r0   rv   r]   r  hasattr__getattribute__r   r   rp  rT   rG   rU   rV   autoLeadingrS  r    rZ  r   r  	clearFrag)r+   ro  	rfragList
maxLeadingrv   r9   r   ru   r*   blankr  detect_language_resultparas                r/   addParazpisaContext.addParaz  s   $$*
 T]++	 
M 	# 	#D"DM3 3595FGG)::JH HJ"DLL 9	$TY__&& 9	$4= 9	$NE))%00E! N * ''!9 !9;@;M!N 5#344J#E  '$DOdm;<<q@@ = 0M((s);)A)Ar)A)J)JKKKK IOO--E%0EN!#EJM((///do=uEEE4,, ;#44Z@@H-:49h-O-O*-55$:	#I/DM9)    %}$)$6!#(#4 $)$6!#( : B/
!^//@@B B BD
 d### DO#E 
r1   c                 0    g | _         d| _        d| _        d S )NTrX   )rK  rn  r\   r1  s    r/   r  zpisaContext.clearFrag  s    			r1   c                 &     | j         j        di |S Nr'   rv   r0   r+   kws     r/   copyFragzpisaContext.copyFrag  s    ty$$$$$r1   c                 >     | j         j        di || _         | j         S r  r  r  s     r/   newFragzpisaContext.newFrag  s%    #DIO))b))	yr1   c                     |j         rC|j                             d          r)| j                            ||j         dd          f           | j                            |           d S )N#rZ   )rJ   r  rI  r   rK  )r+   rv   s     r/   _appendFragzpisaContext._appendFrag  sd    9 	:--c22 	:O""D$)ABB-#8999T"""""r1   rX   c                    | j                                         x}}|j        dk    r|j        dk    rd|_        d|_        |j        r8|j         t
          z  |_        t          |j        t          z
  d          |_        n=|j        r6|j        t          z  |_        t          |j        t          z
  d          |_        t          |j        |j        |j                  x|_        |_        t          |t           t"          f          r||_        |                     |           d S |                    dd                              dt*                                        dt*                    }|j        dk    rt/          j        d	|          D ]}| xj        |z  c_        d
|v sd|v r8|                                }d|_        d|_        |                     |           R|                    dd          }t/          j        d|          D ]?}|                                }|dk    rt*          }||_        |                     |           @d S t/          j        dt*          z   dz   |          D ]}|                                }|t*          k    r9d| _        t*          |_        | xj        |z  c_        |                     |           [d                    d|z   dz                                             dd         |_        t9          | |j                  }|r||_        | j        r,|j                                        |_        |j        rd| _        | xj        |j        z  c_        |                     |           d S )NrZ   r         ­rX   u   Â r$   prez(\r\n|\n|\r)r  	z        z(\ )r>  ()Tr   r?  F)rv   r0   r3   r4   r`   subFractionr5   r  	sizeDeltasuperFractionr   r]   r^   r_   rs   r   r  r5  r\   r  replaceNBSPrr   rer%  	lineBreakro  r@  r   rn  lstrip)r+   r\   rv   baseFraglanguage_checks        r/   addFragzpisaContext.addFrag  s_   )//+++x 8q==TZ1__DHDJ 8 	>-+5DI	 91==DMMZ 	>5DI	 91==DM /4M49dk/3 /3 	3+d^];<< 	DIT"""F #&&d++$'' 	
 ?e## $77 / /		T!		DLLddll#>>++D "DI%&DN$$T****  <<x88D !#$ 7 7 / /'~~//3;;#'D$(	((....// /, t!3T:: + +~~''4<<!%DJ $DIII%II$$T**** ##*s*:)A)A)C)C D DQV LDI%=dDI%N%NN% 3$2	~ 3$(I$4$4$6$6	9 3-2DNII*II$$T****#+ +r1   c                 l    | j                             | j                   |                                  d S ry   )rM  r   rv   r  r1  s    r/   pushFragzpisaContext.pushFrag.  s+    di(((r1   c                 B    | j                                         | _        d S ry   )rM  poprv   r1  s    r/   pullFragzpisaContext.pullFrag2  s    N&&((			r1   r  c                     	 t          d                    | j                                                                        d |                             S #  Y dS xY w)Nr>  rX   )reprr@  rO  toxmlr%  )r+   ls     r/   _getFragmentzpisaContext._getFragment6  sR    	!2!2!8!8!:!:2A2!>??@@@	22s   AA Ac                     dS )Nr   r'   r1  s    r/   _getLineNumberzpisaContext._getLineNumber<  s    qr1   c                 P    t          |          d|                     d          S )Nr  2   )r|   r  )r+   msgs     r/   contextzpisaContext.context?  s-    HHHHb!!!# 	#r1   c                 J   | xj         dz  c_         | j                            t          j        j        |                                 t          |          |                     d          f           	 | 	                    ||z            S #  | 	                    |          cY S xY wNrZ   r  )
rU  r   r   r"   r   PML_WARNINGr  r|   r  r  r+   r  r  s      r/   r   zpisaContext.warningD  s    		Q		*68K8K8M8MsP P##B'') 	* 	* 	*	%<<d
+++	%<<$$$$$   1B	 	B"c                 J   | xj         dz  c_         | j                            t          j        j        |                                 t          |          |                     d          f           	 | 	                    ||z            S #  | 	                    |          cY S xY wr  )
rT  r   r   r"   r   	PML_ERRORr  r|   r  r  r  s      r/   errorzpisaContext.errorM  s    A*4d6I6I6K6KSN N##B'') 	* 	* 	*	%<<d
+++	%<<$$$$$r  c                 F    |dS t          ||p| j        | j                  S )z-
        Returns a file name or None
        N)callback)r   rt  rq  )r+   r   r   s      r/   r   zpisaContext.getFileV  s.     <FtX;);dFWXXXXr1   	helveticac                    t          |          t          ur6t          |          }|                                                    d          }|D ]}t          |          }|                                                                }|| j        v r+| j                            |d          }t          |           n| j	                            |d          }||c S | j	                            |d          S )z 
        Name of a font
        ,N)
r   ListTyper|   r  r%  r   rh  r   r   re  )r+   r   r   r   r   s        r/   getFontNamezpisaContext.getFontName^  s    
 ;;h&&JJEKKMM'',,E 		 		Dt99D::<<%%''Dt))))--dD99%%%%}((d33  }  $///r1   c                     ||ng }t          |          | j        t          |                                          <   |D ]&}t          |          | j        t          |          <   'd S ry   )r|   re  r   )r+   fontnamealiasr   s       r/   registerFontzpisaContext.registerFontr  sh    */28}}c(mm))++, 	2 	2A$'MMDM#a&&!!	2 	2r1   WinAnsiEncodingc                    |rf|re|}|j         }t                              d|           t          |t                    r*|                    d          r|                    d          }t          |          t          u r|}nd |	                    d          D             }d |D             }|}|d         }	|	                    d          }
d
                    |
d d                   |
d         }}|                                }|d	v rd
|	||fz  }|| j        v r0t                              |                     d|                     d S |                                }t          ||          }t!          j        |           dD ](}dD ]#}d
|	||fz  | j        vrt%          |	|||           $)|                     |	||gz              d S |dv rl|dk    rB|                                }t'          |dz   |j                  }|                                }nA|                                }t'          |dz   |j                  }|                                }d
|	||fz  }|| j        v r0t                              |                     d|	                     d S t!          j        ||          }|j        }t!          j        |           t!          j        |||          }t!          j        |           dD ](}dD ]#}d
|	||fz  | j        vrt%          |	|||           $)|                     |	|||gz              d S t                              |                     d                     d S d S d S )NzLoad font %rr  c              3   f   K   | ],}||                                                                 V  -d S ry   )r   r  .0r   s     r/   	<genexpr>z'pisaContext.loadFont.<locals>.<genexpr>  s9      NN1ANQWWYY__..NNNNNNr1   r  c                 ,    g | ]}t          |          S r'   )r|   r  s     r/   
<listcomp>z(pisaContext.loadFont.<locals>.<listcomp>  s    333AQ333r1   r   .r?  )ttcttfz%s_%d%dz+Repeated font embed for %s, skip new embed )r   rZ   )afmpfbr  z.pfb)basepathz.afmz*Repeated font embed for %s, skip new embedzwrong attributes for <pdf:font>)r   r   rw  r   r|   r  r  r   r  r%  r@  r   re  r   getNamedFiler
   r	   r  r   r   r  EmbeddedType1Facer   registerTypeFaceFont)r+   r   r   encodingr^   r_   file	fontAliasffnamer]   r   baseNamesuffixfullFontNamefilenamer  tfiler  facefontNameOriginaljustFonts                        r/   r   zpisaContext.loadFonty  sB    X	MS X	MD(CIInc***%%% )%*:*:3*?*? )C((E{{h&&!		NNC8H8HNNN	 43333IF |HIIcNNE"xxee55uSzfH\\^^F''  )HdF+CC  4=00KK%RT`aac c c c c
  $0022H!,99D+D111 !' J J&, J JF )XtV,D DT]ZZ *$,dFL!J !J !JJ %%h	\N0JKKKKK>))U??++--C*8f+<t}UUUE,,..CC++--C*8f+<t}UUUE,,..C  )HdF+CC  4=00KK%QS[\\^ ^ ^ ^ ^
 &7SAAD'+y$/555)$&6 B  BH+H555 !' N N&, N NF )XtV,D DT]ZZ *$,dF<L!N !N !NN %% )|=M.N"NP P P P P DLL)JKKLLLLLqX	M X	M X	M X	Mr1   )r   r?  ry   )F)rX   N)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'   r1   r/   rF  rF    s8        
,
 ,
 ,
 ,
\  
  
- - -4 4 40 0 02        
* * *X# # #$# # #
  
  
  R R R Rj  
% % %  # # #K+ K+ K+ K+Z  ) ) )     # # #
% % %% % %Y Y Y Y0 0 0 0(2 2 2 2ZM ZM ZM ZM ZM ZMr1   rF  )Nrc  loggingosr  pathlibr   	reportlabr   reportlab.lib.enumsr   reportlab.lib.fontsr   reportlab.lib.pagesizesr   reportlab.lib.stylesr   reportlab.pdfbaser	   reportlab.pdfbase.ttfontsr
   reportlab.platypus.framesr   r   reportlab.platypus.paraparserr   r   r   xhtml2pdf.defaultr"   xhtml2pdf.parserxhtml2pdf.filesr   r   xhtml2pdf.utilr   r   r   r   r   r   r   r   r   r   xhtml2pdf.w3cr   xhtml2pdf.xhtml2pdf_reportlabr   r   r   r    r!   urllib.parser  rz   r   	TupleTyper   r  warnOnMissingFontGlyphs	getLoggerr   r  r  r  r  r0   rw   r   
CSSBuilderr   	CSSParserr  r  r5  rD  objectrF  r'   r1   r/   <module>rF     s  "   				 				       ! ! ! ! ! ! ' ' ' ' ' ' * * * * * * & & & & & & / / / / / / ( ( ( ( ( ( , , , , , , > > > > > > > > @ @ @ @ @ @ @ @ @ @         4 4 4 4 4 4 4 4_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _      U U U U U U U U U U U U U U      	 '( #g$$		 	 	 6 6 6r0 0 0f f f f fS^ f f fR    CM   (       .! ! ! ! ! ! ! !.  YM YM YM YM YM& YM YM YM YM YMr1   