a
    w=ic%                     @   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    e/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/misc/psLib.pyr   6   r   r   c                   @   s   e Zd ZdS )PSErrorNr   r    r    r    r!   r"   7   r   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 )zRead 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!   readE   s    zPSTokenizer.readc                 C   s   | j sd| _ | `| `d S )NT)r(   r%   r'   r*   r    r    r!   closeT   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rd}
|||}|d u rtd| | \}}||| }nR|	d	krd
}
|||}|d u rt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!   getnexttokenY   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   
	

6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rt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rt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   )  s"    
zPSInterpreter.do_specialc                 C   s   | j | d S rJ   )rY   r   r   r    r    r!   r~   >  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   A  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   L  s    
zPSInterpreter.do_makearrayc                 C   s   | ` | `dS )zRemove circular references.N)rY   rX   r2   r    r    r!   r3   V  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rd gt| j }tt| jD ]}t| j| ||< q^| j dkrt|}n| j}|S )Nry   )	r{   r}   dictitemsunpack_itemlistr&   r   tuple)r   tpnewitemkeyr}   r   r    r    r!   r   \  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!   suckfontl  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 <