o
    à’Ojß&  ã                   @   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   ú^/var/www/html/pharmsmart-cdr-gen/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   sD   z	|   ||¡ W d S  ty! } zt||ƒ W Y d }~d S d }~ww ©N)r   Ú
ValueErrorr4   )Úgsr.   r/   Úer   r   r   r      s   €ÿr   c                 C   s   t | ƒ| kr
t | ƒS t| dƒS )Né   )ÚintÚround)Únr   r   r   r   1   s   
r   N©Úfreetypec              	      sü   ddl m}m} ˆd urˆ}|dkrd‰n||v r|‰ntd|›d�ƒ‚ˆft‡fdd„|D ƒƒ ‰ˆD ];‰ˆdkrozdd l‰W n	 tyI   Y q4w dd l‰G ‡‡fd	d
„d
ƒ‰ ddtddddd f‡ fdd„	}t	|ˆ d�  S q4‡fdd„}t	||||d�S )Nr   )Ú	textPathsÚrenderPMBackendÚbackendr>   z
textPaths=z( should be one of 'backend', 'freetype')c                 3   s   � | ]	}|ˆ kr|V  qd S r5   r   )Ú.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 r5   )Úfaces)Úselfr   r   r   Ú__init__I   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)
rE   r   r6   Ú_dynamicFontÚfaceÚ	_ttf_dataÚBytesIOr,   Ú
findT1FileÚFace)rF   r.   ÚfontÚpath_or_streamrJ   ©r>   Úior   r   r   L   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©rF   ÚaÚctxr   r   r   Úmove_to_   s   $z1__makeTextPathsCode__.<locals>.FTTextPath.move_toc                 S   s$   |   d|  |j¡|  |j¡f¡ d S )NÚlineTo©rW   rX   rY   rZ   r[   r\   r   r   r   Úline_toc   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 equivalentéÿÿÿÿéþÿÿÿNÚcurveTor   é   )rV   rY   r[   rX   rZ   rW   )
rF   r]   Úbr^   Úx0Úy0Úx1Úy1Úx2Úy2r   r   r   Úconic_tof   s   (Tz2__makeTextPathsCode__.<locals>.FTTextPath.conic_toc                 S   sL   |   d|  |j¡|  |j¡|  |j¡|  |j¡|  |j¡|  |j¡f¡ d S )Nre   ra   )rF   r]   rg   Úcr^   r   r   r   Úcubic_too   s   Lz2__makeTextPathsCode__.<locals>.FTTextPath.cubic_toNc                 S   s   | j  d¡ d S )NrS   )rV   Úappend)rF   r^   r   r   r   Ú
close_pathr   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 r5   ©r   ©rY   ©Ú__dx__Úscaler   r   Ú<lambda>~   ó    zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>c                    ru   r5   rv   ©r[   ©Ú__dy__rz   r   r   r{      r|   c                    ó   ˆ| ˆ   S r5   r   rw   rx   r   r   r{   �   ó    c                    r€   r5   r   r}   r~   r   r   r{   ‚   r�   g333333ó?rs   Ú
)r_   rb   rn   rp   rS   )r   Úunits_per_EMrV   rq   rW   ÚpoprX   rZ   ÚftLFlagsÚ
isinstancer   Ú__shapeData__rJ   ÚcharToGlyphÚ	enumerateÚx_offsetÚy_offsetÚ
load_glyphÚordÚ	load_charÚglyphÚoutlineÚ	decomposer_   rb   rn   rp   Ú	x_advanceÚmetricsÚhoriAdvance)rF   ÚtextrY   r[   r.   r/   ÚkwdsrJ   rO   rt   Ú
lineHeightr…   ÚsdataÚdscaleÚfontC2GÚiro   ÚsdÚ
sdx_offsetÚ
sdy_offsetr   )ry   r   rz   r   Ú
_text2Pathu   sN   






 z4__makeTextPathsCode__.<locals>.FTTextPath._text2Pathr5   )r   r   r   ÚFT_LOAD_DEFAULTÚFT_LOAD_NO_SCALEÚFT_LOAD_NO_BITMAPr…   rG   r   r_   rb   rn   rp   rr   r   rŸ   r   rQ   r   r   Ú
FTTextPathG   s    	
r£   rs   Ú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| ƒr”z|  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 )zñfreetype text2PathDescription(text, x=0, y=0, fontName='fontname',
                                    fontSize=1000, font = 'fontName',
                                    anchor='start', truncate=1, pathReverse=0, gs=None)
                z=text2PathDescription doesn't support multi byte fonts like %rr¤   ÚendÚmiddleg       @N)rY   r[   r.   r/   rt   ÚpathReverseÚutf8r   é   z%s
%s-->%s<--%sé
   r   r   )r   Ú
_multiByterI   r6   Úextendr
   rŸ   r   ÚdecodeÚUnicodeDecodeErrorÚargsÚmaxr	   ÚsubstitutionFontsÚlenr‰   r†   ÚbytesÚencNamer.   Ú__self__)r•   rY   r[   r.   r/   Úanchorrt   r§   r7   rO   ÚP_extendÚtextLenr8   r›   ÚjÚFTÚnm1ÚfÚt)r£   r   r   r   ¢   s@   
óP€þ€z3__makeTextPathsCode__.<locals>.text2PathDescription)r   r£   c                     s   t dˆ ›�ƒ‚)Nz˜This installation of reportLab has lacks PYCAIRO extra.
It cannot create paths from text.
Could not create text2PathDescription for using backends from )ÚRuntimeError)r¯   r–   )ÚTPr   r   r2   Ç   s   þz __makeTextPathsCode__.<locals>._)r   r   r£   r   )
Úreportlab.rl_configr?   r@   r6   Útupler>   ÚImportErrorrR   r   r-   )rC   Ú_TPr?   r@   r   r2   r   )r£   r¿   r>   rR   rC   r   Ú__makeTextPathsCode__6   s4   ÿ[ÿ# �û rÄ   rs   r¤   c	                 K   s2   |	  dt¡}
t|
| ||||||||d�	fi |	¤ŽS )Nr   )rY   r[   r.   r/   r¶   rt   r§   r7   )r„   r   r   )r•   rY   r[   r.   r/   r¶   rt   r§   r7   r–   Út2pdr   r   r   r   Ï   s   
ÿÿr   )Nr=   )Ú__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     
 ÿ