o
    vh06                     @   s   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlmZmZmZmZ ddlmZ G dd	 d	eZd
d Zdd Zdd ZdddZe e  ddedddddfddZdS ))setFontpathNumTruncprocessGlyphtext2PathDescription	text2PathRenderPMError    )getFont
unicode2T1stringWidth)	ShapedStr)open_and_readisBytesrl_exec   )_baseGFontName_PATH_OP_ARG_COUNT_PATH_OP_NAMES
definePath)exc_infoc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   V/var/www/html/hyperkenya/venv/lib/python3.10/site-packages/reportlab/graphics/utils.pyr      s    r   c                 C   s   t ttt d d \}}ddlm} |jdkrFdd l}|j	|j
|jd}td|||f  dD ]}td|tt||f  q6dt| t|||f }|d	7 }t|ttd
 d S )N   r   )	rl_configfontsz!!!!! %s: %s)T1SearchPathTTFSearchPathz!!!!! rl_config.%s = %szWraise RenderPMError("Error in setFont(%s,%s) missing the T1 files?\nOriginally %s: %s")z
 from None)r   )listmapstrr   	reportlabr   verboseospathjoindirname__file__printlistdirreprgetattrr   dictr   )fontNamefontSizes1s2r   r$   _coder   r   r   
_errorDump   s   
r4   c              
   C   s   z	|  || W d S  tyQ } z<|jd dst|| ddlm} zt|}|||j	 |j
jt W n	   t|| Y |  || W Y d }~d S d }~ww )Nr   zCan't find font!)
makeT1Font)r   
ValueErrorargsendswithr4   _rl_renderPMr5   r   face
findT1Fileencodingvectorr   )gsr.   r/   er5   fr   r   r   r      s   
r   c                 C   s   t | | kr
t | S t| dS )N   )intround)nr   r   r   r   .   s   
r   Nfreetype	_renderPMc              	      sj  ddl m}m} d ur}|dkr|dkrdndn||v r"|ntd|dftfd	d
|D  D ]ldkruzdd lW n	 tyO   Y q:w dd lG fddd ddtddddd f fdd	}t	| d  S dkrzdd l
}W n	 ty   Y q:w dddddtddddd ffdd	}t	|td  S q:fdd}t	||||dS )Nr   )	textPathsrenderPMBackendbackend	rlPyCairorF   rG   z
textPaths=z7 should be one of 'backend', 'freetype' or '_renderPM')c                 3   s    | ]	}| kr|V  qd S Nr   ).0r2   )tpr   r   	<genexpr><   s    z(__makeTextPathsCode__.<locals>.<genexpr>c                       sp   e Zd Z j jB  jB Zdd Z fddZdd Z	dd Z
d	d
 Zdd ZdddZddedfddZdS )z)__makeTextPathsCode__.<locals>.FTTextPathc                 S   s
   i | _ d S rL   )faces)selfr   r   r   __init__F   s   
z2__makeTextPathsCode__.<locals>.FTTextPath.__init__c                    s~   || j vr:t|}|std|d|jr |jj}|}nt|jdd }|s.|j } 	|}||f| j |< | j | S )Nzfont z has not been registeredpfbFileName)
rP   r   r6   _dynamicFontr:   	_ttf_dataBytesIOr,   r;   Face)rQ   r.   fontpath_or_streamr:   rF   ior   r   r   I   s   



z1__makeTextPathsCode__.<locals>.FTTextPath.setFontc                 S   s4   | j r| d | d| |j| |jf d S )N	closePathmoveTo)PP_appendxptxyptyrQ   actxr   r   r   move_to\   s   $z1__makeTextPathsCode__.<locals>.FTTextPath.move_toc                 S   s$   |  d| |j| |jf d S )NlineTor`   ra   rb   rc   rd   re   r   r   r   line_to`   s   $z1__makeTextPathsCode__.<locals>.FTTextPath.line_toc           
   	   S   s   | j r| j d dd n|j|jf\}}| |j}| |j}| |j}| |j}	| d||| d d  ||| d d  ||| d  ||	| d  ||	f dS )zusing the cubic equivalentNcurveTor      )r_   rb   rd   ra   rc   r`   )
rQ   rf   brg   x0y0x1y1x2y2r   r   r   conic_toc   s   (Tz2__makeTextPathsCode__.<locals>.FTTextPath.conic_toc                 S   sL   |  d| |j| |j| |j| |j| |j| |jf d S )Nrn   rj   )rQ   rf   rp   crg   r   r   r   cubic_tol   s   Lz2__makeTextPathsCode__.<locals>.FTTextPath.cubic_toNc                 S   s   | j d d S )Nr\   )r_   append)rQ   rg   r   r   r   
close_patho   s   z4__makeTextPathsCode__.<locals>.FTTextPath.close_pathr     c                    s  |  |\}}||j |  | g | _| jj| _|dd}	|	r5 fdd| _fdd| _n fdd| _fdd| _|d  }
| j}t	|t
r`|j}|jd	 }|jj}nd }t|D ]`\}}|d
krud |
8 qf|r|| }|j| }|j| } |7  |7 ||t| | n||| |jjj| | j| j| j| jd |r |8  |8  |r|j| n|jjj7  qf| jr| d | jS )Ntruncater   c                       t |    S rL   r   rb   __dx__scaler   r   <lambda>{       zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>c                    r~   rL   r   rd   __dy__r   r   r   r   |   r   c                       |    S rL   r   r   r   r   r   r   ~       c                    r   rL   r   r   r   r   r   r      r   g333333?r|   
)rh   rk   rw   ry   r\   )r   units_per_EMr_   rz   r`   popra   rc   ftLFlags
isinstancer   __shapeData__r:   charToGlyph	enumeratex_offsety_offset
load_glyphord	load_charglyphoutline	decomposerh   rk   rw   ry   	x_advancemetricshoriAdvance)rQ   textrb   rd   r.   r/   kwdsr:   rX   r}   
lineHeightr   sdatadscalefontC2Girx   sd
sdx_offset
sdy_offsetr   )r   r   r   r   
_text2Pathr   sN   






 z4__makeTextPathsCode__.<locals>.FTTextPath._text2PathrL   )r   r   r   FT_LOAD_DEFAULTFT_LOAD_NO_SCALEFT_LOAD_NO_BITMAPr   rR   r   rh   rk   rw   ry   r{   r   r   r   rZ   r   r   
FTTextPathD   s    	
r   r|   startr   c	                    s  t |}	|	jr|	jstd| g j}
|dks0t| ||}|dkr&|| }n
|dkr0||d  }|du r7  }|	jrK|
|j| ||||||d |
jS t| rz| d} W n= t	y } z1|j
d	d
 \}}t	|j
dd
 d|j
d
 | t|d d| | || | ||d  f f  d}~ww t| |	g|	j }t|d }t|D ],\}\}}t|tr||j}|
|j||||j|||d ||kr||||7 }q|
jS )zfreetype text2PathDescription(text, x=0, y=0, fontName='fontname',
                                    fontSize=1000, font = 'fontName',
                                    anchor='start', truncate=1, pathReverse=0, gs=None)
                =text2PathDescription doesn't support multi byte fonts like %rr   endmiddle       @N)rb   rd   r.   r/   r}   pathReverseutf8r      %s
%s-->%s<--%s
   r   r   )r   
_multiByterT   r6   extendr
   r   r   decodeUnicodeDecodeErrorr7   maxr	   substitutionFontslenr   r   bytesencNamer.   __self__)r   rb   rd   r.   r/   anchorr}   r   r>   rX   P_extendtextLenr?   r   jFTnm1r@   t)r   r   r   r      s@   
Pz3__makeTextPathsCode__.<locals>.text2PathDescription)r   r   c                 S   sV  g }g }g j }| r$t| dkr$| d d dkr$d| d dd   f|  } | p'dd D ]}}|d }|r|dv r|d dkrm|d= |rb|dd d	 |dd d	 |dd d	< |dd d	< |  |  |dd
 | d d}|rxttt|}|D ]}	|tt	|	  }
||	ft
|||
   |
}qzg }g }| | ||dd   q*|jS )Nr   r   ri   )moveToClosedr   ))r   )r^   r   r   r   r   r^   r]   )rz   r   reverseinsertr   r    r   r   r   indextupler   r   )Gr}   r   Or_   R_appendgopr   or   r   r   r   r      s6    2

z+__makeTextPathsCode__.<locals>.processGlyphc	                    s  t |}	|	jr|	jstd| g j}
|dks0t| ||}|dkr&|| }n
|dkr0||d  }|du r?ddlm} |d	d	}t||| |	jr^|	| ||D ]}|
 |||d
 qO|
jS t
| rz| d} W n= ty } z1|jdd \}}t|jdd d|jd | t|d d| | || | ||d  f f  d}~ww |	}t| |	g|	j }t|d	 }t|D ]6\}\}}||krt||j| |}|	|||D ]}|
 |||d
 q||kr||||j|7 }q|
jS )z_renderPM text2PathDescription(text, x=0, y=0, fontName='fontname',
                                    fontSize=1000, font = 'fontName',
                                    anchor='start', truncate=1, pathReverse=0, gs=None)
                r   r   r   r   r   Nr   )gstater   )r}   r   r   r   r   r   r   )r   r   rT   r6   r   r
   r9   r   r   _stringPathr   r   r   r7   r   r	   r   r   r   r.   r   r   )r   rb   rd   r.   r/   r   r}   r   r>   rX   r   r   r   r   r?   r   r   fcr   r   r@   r   )r   r   r   r      sN   

P)r   r   r   c                     s   t d )NzThis installation of reportLab has neither PYCAIRO or RENDERPM extras installed.
It cannot create paths from text.
Could not create text2PathDescription for using backends from )RuntimeError)r7   r   )TPr   r   r2     s   z __makeTextPathsCode__.<locals>._)r   r   r   r   )r   r   )reportlab.rl_configrH   rI   r6   r   rF   ImportErrorr[   r   r-   r9   r   )rN   _TPrH   rI   r   r9   r2   r   )r   r   rF   r[   r   rN   r   __makeTextPathsCode__3   sF   [#
*Or   r|   r   c	                 K   s2   |	 dt}
t|
| ||||||||d	fi |	S )Nr   )rb   rd   r.   r/   r   r}   r   r>   )r   r   r   )r   rb   rd   r.   r/   r   r}   r   r>   r   t2pdr   r   r   r     s   
r   )NrE   )__all__reportlab.pdfbase.pdfmetricsr   r	   r
   reportlab.pdfbase.ttfontsr   reportlab.lib.utilsr   r   r   shapesr   r   r   r   sysr   	Exceptionr   r4   r   r   r   globalsupdater   r   r   r   r   <module>   s     
 f