o
    hC/                     @   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                   @      e Zd ZdS )PSTokenErrorN__name__
__module____qualname__ r!   r!   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/misc/psLib.pyr   7       r   c                   @   r   )PSErrorNr   r!   r!   r!   r"   r$   ;   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,   nnewposrr!   r!   r"   readI   s   zPSTokenizer.readc                 C   s   | j sd| _ | `| `d S 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 r'd}
|	}n|	dkr=d}
||| \}}||| }nu|	dkr_d}
|||}|d u rRtd| | \}}||| }nS|	d	krd
}
|||}|d u rttd| | \}}||| }n1td| |	dkrd}
|||d }nd}
|||}|d u rt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_specialstringmatchhexstringmatchcommentmatchendmatchr)   r'   char	tokentypetoken_nextposmr!   r!   r"   getnexttoken]   sR   



zPSTokenizer.getnexttokenc                 C   s    || j | j \}}|| _d S N)r'   r)   rC   )r,   
whitematchrL   rM   r!   r!   r"   rB      s   
zPSTokenizer.skipwhitec                 C   sH   | j d | _ | j| j d  | _t| jd\| _}t| j| _d| _ d S )Nr   iq     )r)   r'   dirtybufr   decryptr(   )r,   Rr!   r!   r"   
starteexec   s
   
zPSTokenizer.starteexecc                 C   s   t | dsd S | j| _| `d S )NrS   )hasattrrS   r'   r5   r!   r!   r"   	stopeexec   s   
zPSTokenizer.stopeexecN)r   r&   )r.   )r   r   r    r-   r4   r6   r(   rD   stringREmatchhexstringRE	commentREendofthingRErO   skipwhiteRErB   rV   rX   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+   
systemdict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falseStandardEncodingFontDirectory)r`   r   rh   r   do_makearrayr   r   r
   r   suckoperators	__class__)r,   re   r!   r!   r"   rd      s   
zPSInterpreter.fillsystemdictc                 C   sh   t |D ]!}t| |}t|tr%|d d dkr%|dd  }t||||< q|jD ]}| || q)d S )N   ps_)dirgetattr
isinstancer   r   	__bases__ro   )r,   re   klassnameattr	baseclassr!   r!   r"   ro      s   

zPSInterpreter.suckoperatorsc                 C   s   t || j }| _|j}| j}| j}z,	 | \}}|sn|r(|| |}	|	|}
n||}
|
d ur4||
 q|  d | _W d S    | jd urftd| jj	| jj
d | jj
 | jj	| jj
| jj
d    )Nr   z/ps error:
- - - - - - -
%s
>>>
%s
- - - - - - -2   )r%   r+   	tokenizerrO   do_tokenhandle_objectr6   logdebugr'   r)   )r,   datart   r|   rO   r}   r~   rJ   rK   handlerobjectr!   r!   r"   	interpret   s4   




zPSInterpreter.interpretc                 C   sr   | j s2|js2|jdks2|jdkr| |j}|jr | | d S |jdkr,| | d S |  d S | | d S )Nproceduretypeoperatortype)rb   literaltyperesolve_namevaluepushcall_procedurefunctionr,   r   r!   r!   r"   r~      s   

zPSInterpreter.handle_objectc                 C   s   | j }|jD ]}|| qd S rP   )r~   r   )r,   procr~   itemr!   r!   r"   r      s   

zPSInterpreter.call_procedurec                 C   sL   | j }tt|d ddD ]}||| v r|| |   S qtdt| )Nr   r.   zname error: )r`   ranger(   r$   str)r,   rx   r`   ir!   r!   r"   r      s   zPSInterpreter.resolve_namec           
      C   s   z	||}W ||S  t tfyj   z||}W nK t tfyc   d|v r[|d}z||d | }	|||d d  |	}W n t tfyR   || Y  Y  Y S w || Y  Y S || Y  Y S w || Y S w )N#r   )r/   OverflowErrorfind)
r,   rK   intfloatr   r   r   numhashposbaser!   r!   r"   r}      s(   	

zPSInterpreter.do_tokenc                 C   s   d S rP   r!   r,   rK   r!   r!   r"   r9     s   zPSInterpreter.do_commentc                 C   s   t |dd  S )Nr   )r   r   r!   r!   r"   r?   !     zPSInterpreter.do_literalc                 C   s   t |dd S )Nr   r.   )r   r   r!   r!   r"   r;   $  r   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,   rK   hexStrcleanstrr   r!   r!   r"   r=   '  s   "
zPSInterpreter.do_hexstringc                 C   s   |dkr| j d | _ | jS |dkr2g }	 |  }|| jkrn|| q| j d | _ |  t|S |dkr9| jS |dkrAtdS td)N{r   }rg   ri   zhuh?)	rb   rc   popr   reverser   rh   r   r   )r,   rK   r   	topobjectr!   r!   r"   r7   1  s&   

zPSInterpreter.do_specialc                 C   s   | j | d S rP   )ra   r   r   r!   r!   r"   r   F  r   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)ra   r$   r   repr)r,   typesra   r   r!   r!   r"   r   I  s   
zPSInterpreter.popc                 C   s@   g }	 |   }|| jkrn|| q|  | t| d S rP   )r   rh   r   r   r   r   )r,   arrayr   r!   r!   r"   rn   V  s   

zPSInterpreter.do_makearrayc                 C   s   | ` | `dS )zRemove circular references.N)ra   r`   r5   r!   r!   r"   r6   `  s   zPSInterpreter.closeNr&   )r   r   r    r-   rd   ro   rt   r   r~   r   r   r   r   r   r   r   r}   r9   r?   r;   r=   r7   r   r   rn   r6   r!   r!   r!   r"   r_      s.    


	!



r_   c                 C   s   t | j}|tkri }| j D ]
\}}t|||< q|S |tkrGd gt| j }tt| jD ]}t| j| ||< q0| j dkrEt|}|S | j}|S )Nr   )	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 r4|| }nt|	 }t
|dkrE|d |  ||d  }|  t|S )Ns    /FontName\s+/([^ \t\n\r]+)\s+defr   rA   sC   /Helvetica 4 dict dup /Encoding StandardEncoding put definefont popr   rm   	Helvetica)researchgroupdecoder_   r   r`   r   r   keysr(   removesortr6   r   )r   r+   rN   fontNameinterpreterfontdirrawfont	fontNamesr!   r!   r"   suckfontw  s(   





r   r   )3fontTools.misc.textToolsr   r   r   r   r   fontTools.miscr   psOperatorsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   collections.abcr   stringr   logging	getLoggerr   r   rD   compiler^   endofthingPatr]   r\   	stringPatr   r   rY   r[   	Exceptionr   r$   r   r%   r_   r   r   r!   r!   r!   r"   <module>   s0    @



g A