o
    ta                     @   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ddedddddfddZ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   :/usr/lib/python3/dist-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   ZfaceZ
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   c                 C   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	   ZlineTo)moveToClosedr   ))end)moveTor;   r<   r;   r   r=   Z	closePath)appendlenreverseinsertr   r   r   r   r   indextupleextend__self__)GtruncatepathReverseOPZR_appendgopiojr   r   r   r   1   s6    2

r   i  startNc	                 C   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 ]}|
t
|||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 ]}|
t
|||d q||kr||||j|7 }q|
jS )Nz=text2PathDescription doesn't support multi byte fonts like %rrP   r<   Zmiddleg       @r   )gstate)rG   rH   utf8r      z%s
%s-->%s<--%s
   r	   )r
   Z
_multiByteZ_dynamicFontr0   rD   ZstringWidth	_renderPMrQ   r   Z_stringPathr   r   decodeUnicodeDecodeErrorr1   maxr   ZsubstitutionFontsr?   	enumerater)   ZencNamerE   )textxyr)   r*   anchorrG   rH   r4   ZfontZP_extendZtextLenrQ   rK   r5   rM   rO   ZfcZFTZnm1r6   tr   r   r   r   N   sN   

Pr   c	           
      K   s&   t t| ||||||||d	fi |	S )N)r[   r\   r)   r*   r]   rG   rH   r4   )r   r   )
rZ   r[   r\   r)   r*   r]   rG   rH   r4   kwdsr   r   r   r   u   s
   
r   )r   r	   )__all__rU   r   Zreportlab.pdfbase.pdfmetricsr
   r   Zreportlab.lib.utilsr   r   r   Zshapesr   r   r   r   sysr   	Exceptionr   r/   r   r   r   r   r   r   r   r   r   <module>   s"    

'