o
    e1                     @   s   d 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
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   )
makeT1Font    )getFont
unicode2T1)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   HD:\Projects\ConvertPro\env\Lib\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_configZfontsz!!!!! %s: %s)ZT1SearchPathZ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   Z	reportlabr   verboseospathjoindirname__file__printlistdirreprgetattrr   dictr   )fontNamefontSizes1s2r   r   _coder   r   r   
_errorDump   s   
r/   c              
   C   s   z	|  || W d S  tyK } z6|jd dst|| zt|}t||j |j	j
t W n	   t|| Y |  || W Y d }~d S d }~ww )Nr	   zCan't find font!)r   
ValueErrorargsendswithr/   r
   r   face
findT1FileencodingZvectorr   )gsr)   r*   e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              	      s^  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 ]m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
m} W n	 ty   Y q:w dddddtddddd ffdd	}t	|d  S q:td|)Nr	   )	textPathsrenderPMBackendbackendr?   r>   z
textPaths=z7 should be one of 'backend', 'freetype' or '_renderPM')c                 3   s    | ]	}| kr|V  qd S Nr   ).0r-   )tpr   r   	<genexpr>;   s    z(__makeTextPathsCode__.<locals>.<genexpr>c                       sF   e Zd Z j jB  jB Zdd Z fddZdde	dfddZ
d	S )
z)__makeTextPathsCode__.<locals>.FTTextPathc                 S   s
   i | _ d S rC   )faces)selfr   r   r   __init__E   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 registeredZpfbFileName)
rG   r
   r0   _dynamicFontr3   Z	_ttf_dataBytesIOr'   r4   ZFace)rH   r)   fontZpath_or_streamr3   r>   ior   r   r   H   s   



z1__makeTextPathsCode__.<locals>.FTTextPath.setFontr	     c                    s8  |  |\}}||j | | g  g }	 j|dd}
|
r2fddfddnfddfdd fdd	}fd
d} fdd}fdd}|d  }| j}|D ]&}|dkrzd|8 qm||| |jjj| ||||d |jj	j
 qm rd  S )Ntruncater	   c                       t |    S rC   r   x__dx__scaler   r   <lambda>e       zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.<lambda>c                    rQ   rC   rR   y__dy__rW   r   r   rX   f   rY   c                       |    S rC   r   rS   rU   r   r   rX   h       c                    r^   rC   r   rZ   r\   r   r   rX   i   r_   c                    s*    rd d| j | jf d S )N	closePathmoveTorT   r[   actxPP_appendxptyptr   r   move_tok   s   zE__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.move_toc                    s    d| j | jf d S )NlineTorc   rd   ri   rj   rk   r   r   line_too   s   zE__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.line_toc           	         s    r
 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      rc   )	re   brf   Zx0Zy0x1y1Zx2y2rg   r   r   conic_tor   s   $



RzF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.conic_toc              	      s>    d| j | j|j |j|j |jf d S )Nrr   rc   )re   rt   crf   rn   r   r   cubic_to{   s   >zF__makeTextPathsCode__.<locals>.FTTextPath._text2Path.<locals>.cubic_tog333333?
)rl   ro   rx   rz   r`   )r   Zunits_per_EMappendpopftLFlagsZ	load_charZglyphoutlineZ	decomposeZmetricsZhoriAdvance)rH   textrT   r[   r)   r*   kwdsr3   rL   SrP   rl   ro   rx   rz   Z
lineHeightr~   ry   r   )rh   ri   rV   r]   rW   rj   rk   r   
_text2Path[   s:   
	z4__makeTextPathsCode__.<locals>.FTTextPath._text2PathN)r   r   r   ZFT_LOAD_DEFAULTZFT_LOAD_NO_SCALEZFT_LOAD_NO_BITMAPr~   rI   r   r   r   r   rM   r   r   
FTTextPathC   s
    r   rO   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)rT   r[   r)   r*   rP   pathReverseutf8r      %s
%s-->%s<--%s
   r	   r   )r
   
_multiByterJ   r0   extendstringWidthr   r   decodeUnicodeDecodeErrorr1   maxr   substitutionFontslen	enumerate
isinstancebytesencNamer)   __self__)r   rT   r[   r)   r*   anchorrP   r   r6   rL   P_extendtextLenr7   ijFTnm1r8   t)r   r   r   r      s@   
Pz3__makeTextPathsCode__.<locals>.text2PathDescription)r   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	   rm   )moveToClosedr   ))r   )rb   r   r   r   r   rb   ra   )r|   r   reverseinsertr   r   r   r   r   indextupler   r   )GrP   r   Orh   Z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   )gstate)rP   r   r   r   r   r   r   r	   )r
   r   rJ   r0   r   r   r?   r   r   Z_stringPathr   r   r   r1   r   r   r   r   r   r)   r   r   )r   rT   r[   r)   r*   r   rP   r   r6   rL   r   r   r   r   r7   r   r   Zfcr   r   r8   r   )r   r   r   r      sN   

P)r   r   z>Could not create text2PathDescription for using backends from )r   r	   )Zreportlab.rl_configr@   rA   r0   r   r>   ImportErrorrN   r   r(    r?   )rE   Z_TPr@   rA   ZTPr   r?   r   )r   r>   rN   r   rE   r   __makeTextPathsCode__2   sD   H#
*Mr   rO   r   c	                 K   s2   |	 dt}
t|
| ||||||||d	fi |	S )Nr   )rT   r[   r)   r*   r   rP   r   r6   )r}   r   r   )r   rT   r[   r)   r*   r   rP   r   r6   r   Zt2pdr   r   r   r      s   
r   )Nr=   )__all__r?   r   Zreportlab.pdfbase.pdfmetricsr
   r   Zreportlab.lib.utilsr   r   r   Zshapesr   r   r   r   sysr   	Exceptionr   r/   r   r   r   globalsupdater   r   r   r   r   <module>   s     
 M