a
    —ÆàgC/  ã                   @   sZ  d dl mZmZmZmZmZ d dl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mZmZmZmZ d dlZd dlmZ d dlmZ d dlZe e¡ZdZ e !ed	ed
gƒ¡Z"eded
gƒZ#e !e#¡Z$e !d¡Z%dZ&d 'e& (¡ ¡Z&e !e&¡Z)e !ededgƒ¡Z*G dd„ de+ƒZ,G dd„ de+ƒZ-G dd„ de.ƒZ/G dd„ de	ƒZ0dd„ Z1ddd„Z2dS )é    )ÚbytechrÚbyteordÚ	bytesjoinÚtobytesÚtostr)Úeexecé   )ÚPSOperatorsÚps_StandardEncodingÚps_arrayÚ
ps_booleanÚps_dictÚ
ps_integerÚ
ps_literalÚps_markÚps_nameÚps_operatorÚps_procedureÚps_procmarkÚps_realÚ	ps_stringN)ÚCallable)Ú
whitespaces	   ()<>[]{}%ó   [s   ]*s   [^][(){}<>/%s   %[^
]*sf   
	\(
		(
			(
				[^()]*   \   [()]
			)
			|
			(
				[^()]*  \(   [^()]*  \)
			)
		)*
		[^()]*
	\)
ó    s   <[s   0-9A-Fa-f]*>c                   @   s   e Zd ZdS )ÚPSTokenErrorN©Ú__name__Ú
__module__Ú__qualname__© r    r    úM/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/misc/psLib.pyr   7   s   r   c                   @   s   e Zd ZdS )ÚPSErrorNr   r    r    r    r!   r"   ;   s   r"   c                   @   sd   e Zd Zddd„Zddd„Zdd	„ Zeeej	e
j	ej	ej	fd
d„Zej	fdd„Zdd„ Zdd„ ZdS )ÚPSTokenizerr   Úasciic                 C   s.   t |ƒ}|| _t|ƒ| _d| _d| _|| _d S )Nr   F)r   ÚbufÚlenÚposÚclosedÚencoding)Úselfr%   r)   r    r    r!   Ú__init__@   s    
zPSTokenizer.__init__éÿÿÿÿc                 C   sR   | j rtdƒ‚|du s|dk r&| j}nt| j| | jƒ}| j| j|… }|| _|S )z¼Read at most 'n' bytes from the buffer, or less if the read
        hits EOF before obtaining 'n' bytes.
        If 'n' is negative or omitted, read all data until EOF is reached.
        zI/O operation on closed fileNr   )r(   Ú
ValueErrorr&   Úminr'   r%   )r*   ÚnZnewposÚrr    r    r!   ÚreadI   s    zPSTokenizer.readc                 C   s   | j sd| _ | `| `d S )NT)r(   r%   r'   ©r*   r    r    r!   ÚcloseX   s    zPSTokenizer.closec                 C   s’  |   ¡  | j| jkrdS | j}| j}tt|| ƒƒ}	|	|v �r|	dv rPd}
|	}nÂ|	dkr|d}
|||ƒ ¡ \}}|||… }n–|	dkrÀd}
|||ƒ}|d u r¦td| ƒ‚| ¡ \}}|||… }nR|	d	k�rd
}
|||ƒ}|d u rìtd| ƒ‚| ¡ \}}|||… }ntd| ƒ‚nZ|	dk�r2d}
|||d ƒ}nd}
|||ƒ}|d u �rVtd| ƒ‚| ¡ \}}|||… }|||ƒ | _t|| j	d�}|
|fS )N)NNs   {}[]Ú
do_specialó   %Ú
do_commentó   (Ú	do_stringzbad string at character %dó   <Údo_hexstringzbad hexstring at character %dzbad token at character %dó   /Ú
do_literalr   Ú ©r)   )
Ú	skipwhiter'   r&   r%   r   r   Úspanr   r   r)   )r*   r&   Ú
ps_specialZstringmatchZhexstringmatchZcommentmatchÚendmatchr'   r%   ÚcharÚ	tokentypeÚtokenÚ_ÚnextposÚmr    r    r!   Úgetnexttoken]   sR    







zPSTokenizer.getnexttokenc                 C   s    || j | jƒ ¡ \}}|| _d S ©N)r%   r'   r@   )r*   Z
whitematchrF   rG   r    r    r!   r?   ”   s    zPSTokenizer.skipwhitec                 C   sH   | j d | _ | j| j d … | _t | jd¡\| _}t| jƒ| _d| _ d S )Nr   iqÙ  é   )r'   r%   Údirtybufr   Zdecryptr&   )r*   ÚRr    r    r!   Ú
starteexec˜   s
    zPSTokenizer.starteexecc                 C   s   t | dƒsd S | j| _| `d S )NrL   )ÚhasattrrL   r%   r2   r    r    r!   Ú	stopeexecŸ   s    
zPSTokenizer.stopeexecN)r   r$   )r,   )r   r   r   r+   r1   r3   r&   rA   ÚstringREÚmatchÚhexstringREÚ	commentREÚendofthingRErI   ÚskipwhiteREr?   rN   rP   r    r    r    r!   r#   ?   s   
	
ø
7r#   c                   @   s¦   e Zd Zd%dd„Zdd„ Zdd„ Zefdd	„Zd
d„ Zdd„ Z	dd„ Z
eeeeefdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )&ÚPSInterpreterr$   c                 C   s8   i }i }|| _ ||g| _g | _d| _tƒ | _|  ¡  d S )Nr   )r)   Ú	dictstackÚstackÚ	proclevelr   ÚprocmarkÚfillsystemdict)r*   r)   Ú
systemdictZuserdictr    r    r!   r+   §   s    
zPSInterpreter.__init__c                 C   st   | j d }tƒ  |d<  |d< | _td| jƒ|d< tdƒ|d< tdƒ|d< ttƒ|d< ti ƒ|d	< |  	|| j
¡ d S )
Nr   ú[Úmarkú]r   ÚtrueÚfalseZStandardEncodingÚFontDirectory)rX   r   r_   r   Údo_makearrayr   r   r
   r   ÚsuckoperatorsÚ	__class__)r*   r]   r    r    r!   r\   ±   s    
zPSInterpreter.fillsystemdictc                 C   sh   t |ƒD ]B}t| |ƒ}t|tƒr|d d… dkr|dd … }t||ƒ||< q|jD ]}|  ||¡ qRd S )Né   Zps_)ÚdirÚgetattrÚ
isinstancer   r   Ú	__bases__re   )r*   r]   ÚklassÚnameÚattrZ	baseclassr    r    r!   re   »   s    

zPSInterpreter.suckoperatorsc                 C   sÔ   t || jƒ }| _|j}| j}| j}zT|ƒ \}}|s6qh|rN|| |ƒ}	|	|ƒ}
n||ƒ}
|
d ur&||
ƒ q&| ¡  d | _W nV   | jd urÈt d| jj	| jj
d | jj
… | jj	| jj
| jj
d … ¡ ‚ Y n0 d S )Nz/ps error:
- - - - - - -
%s
>>>
%s
- - - - - - -é2   )r#   r)   Ú	tokenizerrI   Údo_tokenÚhandle_objectr3   ÚlogÚdebugr%   r'   )r*   Údatari   rp   rI   rq   rr   rD   rE   ÚhandlerÚobjectr    r    r!   Ú	interpretÄ   s0    





ø
zPSInterpreter.interpretc                 C   sl   | j s^|js^|jdks^|jdkr,|  |j¡}|jr>|  |¡ qh|jdkrT|  |¡ qh| ¡  n
|  |¡ d S )NÚproceduretypeZoperatortype)rZ   ÚliteralÚtypeÚresolve_nameÚvalueÚpushÚcall_procedureÚfunction©r*   rw   r    r    r!   rr   å   s    


zPSInterpreter.handle_objectc                 C   s   | j }|jD ]}||ƒ qd S rJ   )rr   r}   )r*   Úprocrr   Úitemr    r    r!   r   ó   s    
zPSInterpreter.call_procedurec                 C   sP   | j }tt|ƒd ddƒD ] }||| v r|| |   S qtdt|ƒ ƒ‚d S )Nr   r,   zname error: )rX   Úranger&   r"   Ústr)r*   rm   rX   Úir    r    r!   r|   ø   s
    zPSInterpreter.resolve_namec           
      C   sæ   z||ƒ}W nÌ t tfyØ   z||ƒ}W nœ t tfyÆ   d|v r²| d¡}z*||d |… ƒ}	|||d d … |	ƒ}W n& t tfyž   ||ƒ Y  Y  Y S 0 ||ƒ Y  Y S n||ƒ Y  Y S Y n0 ||ƒ Y S Y n
0 ||ƒS d S )Nú#r   )r-   ÚOverflowErrorÚfind)
r*   rE   ÚintÚfloatr   r   r   ÚnumZhashposÚbaser    r    r!   rq   ÿ   s"    	
zPSInterpreter.do_tokenc                 C   s   d S rJ   r    ©r*   rE   r    r    r!   r6     s    zPSInterpreter.do_commentc                 C   s   t |dd … ƒS )Nr   )r   rŽ   r    r    r!   r<   !  s    zPSInterpreter.do_literalc                 C   s   t |dd… ƒS )Nr   r,   )r   rŽ   r    r    r!   r8   $  s    zPSInterpreter.do_stringc              	   C   sv   d  |dd…  ¡ ¡}t|ƒd r*|d }g }tdt|ƒdƒD ]$}| tt|||d … dƒƒ¡ q>d  |¡}t|ƒS )Nr=   r   r,   é   Ú0r   é   )ÚjoinÚsplitr&   r„   ÚappendÚchrrŠ   r   )r*   rE   ZhexStrZcleanstrr†   r    r    r!   r:   '  s    "
zPSInterpreter.do_hexstringc                 C   sŒ   |dkr| j d | _ | jS |dkrbg }|  ¡ }|| jkr:qF| |¡ q&| j d | _ | ¡  t|ƒS |dkrp| jS |dkr€tdƒS tdƒ‚d S )NÚ{r   Ú}r^   r`   zhuh?)	rZ   r[   Úpopr”   Úreverser   r_   r   r   )r*   rE   r‚   Ú	topobjectr    r    r!   r4   1  s"    
zPSInterpreter.do_specialc                 C   s   | j  |¡ d S rJ   )rY   r”   r�   r    r    r!   r~   F  s    zPSInterpreter.pushc                 G   sH   | j }|stdƒ‚|d }|r>|j|vr>tdt|ƒ|jf ƒ‚|d= |S )Nzstack underflowr,   z typecheck, expected %s, found %s)rY   r"   r{   Úrepr)r*   ÚtypesrY   rw   r    r    r!   r˜   I  s    
ÿzPSInterpreter.popc                 C   s>   g }|   ¡ }|| jkrq$| |¡ q| ¡  |  t|ƒ¡ d S rJ   )r˜   r_   r”   r™   r~   r   )r*   Úarrayrš   r    r    r!   rd   V  s    
zPSInterpreter.do_makearrayc                 C   s   | ` | `dS )zRemove circular references.N)rY   rX   r2   r    r    r!   r3   `  s    zPSInterpreter.closeN)r$   )r   r   r   r+   r\   re   ri   rx   rr   r   r|   rŠ   r‹   r   r   r   rq   r6   r<   r8   r:   r4   r~   r˜   rd   r3   r    r    r    r!   rW   ¦   s,   


	!
ù


rW   c                 C   s”   t | jƒ}|tkr8i }| j ¡ D ]\}}t|ƒ||< q nX|tkrŠd gt| jƒ }tt| jƒƒD ]}t| j| ƒ||< q^| j dkr�t|ƒ}n| j}|S )Nry   )	r{   r}   ÚdictÚitemsÚunpack_itemÚlistr&   r„   Útuple)rƒ   ÚtpÚnewitemÚkeyr}   r†   r    r    r!   r    f  s    


r    r$   c                 C   s®   t  d| ¡}|r$| d¡}| ¡ }nd }t|d�}| d¡ | | ¡ |jd d j}||v rh|| }n6t| 	¡ ƒ}t
|ƒdkrŠ| d¡ | ¡  ||d  }| ¡  t|ƒS )Ns    /FontName\s+/([^ \t\n\r]+)\s+defr   r>   sC   /Helvetica 4 dict dup /Encoding StandardEncoding put definefont popr   rc   Z	Helvetica)ÚreÚsearchÚgroupÚdecoderW   rx   rX   r}   r¡   Úkeysr&   ÚremoveÚsortr3   r    )ru   r)   rH   ZfontNameÚinterpreterZfontdirZrawfontZ	fontNamesr    r    r!   Úsuckfontw  s(    


ÿ


r®   )r$   )3ZfontTools.misc.textToolsr   r   r   r   r   ZfontTools.miscr   ZpsOperatorsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r¦   Úcollections.abcr   Ústringr   ÚloggingÚ	getLoggerr   rs   rA   ÚcompilerV   ZendofthingPatrU   rT   Z	stringPatr’   r“   rQ   rS   Ú	Exceptionr   r"   rw   r#   rW   r    r®   r    r    r    r!   Ú<module>   s.   @



g A