o
    hC                     @   s   d dl mZmZmZ dd ZG dd deZG dd deZdd	 ZG d
d deZ	G dd deZ
dd Zdd ZdddefddZdd Zdd ZdS )    )SimpleT2DecompilerT2WidthExtractorcalcSubrBiasc                 C   s   t t| S N)sortedset)l r	   o/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fontTools/cffLib/transforms.py
_uniq_sort   s   r   c                   @   s   e Zd ZdS )StopHintCountEventN)__name__
__module____qualname__r	   r	   r	   r
   r      s    r   c                   @   sJ   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_DesubroutinizingT2Decompiler)op_hintmaskop_cntrmask
op_rmoveto
op_hmoveto
op_vmovetoNc                 C   s   t | ||| d S r   )r   __init__)self
localSubrsglobalSubrsprivater	   r	   r
   r      s   z&_DesubroutinizingT2Decompiler.__init__c                 C   s>  d| _ | jD ]	}t| || j qt|dr5| j r3| jr3z	t| | W d S  ty2   | jd= Y d S w d S g |_	t| | |j
d d  }t|j	D ]:\}}|dksTJ ||d  dv sdJ ||d  t||d  tkspJ |d dkr||d d }|||d |< qJ| jjsd|v r|d |dd  }||_|`	d S )	NT_desubroutinized      )callsubr	callgsubrreturnendchar)need_hintcountstop_hintcount_opssetattrstop_hint_counthasattrcallingStackr   executer   _patchesprogramreversedtypeintr   in_cff2indexr   )r   
charStringop_namedesubroutinizedidx	expansionr	   r	   r
   r)      s@   



z%_DesubroutinizingT2Decompiler.executec                 C   2   | j | jd | j  }t| | | || d S Nr   )r   operandStack	localBiasr   op_callsubrprocessSubrr   r0   subrr	   r	   r
   r:   D      z)_DesubroutinizingT2Decompiler.op_callsubrc                 C   r6   r7   )r   r8   
globalBiasr   op_callgsubrr;   r<   r	   r	   r
   r@   I   r>   z*_DesubroutinizingT2Decompiler.op_callgsubrc                 G   s<   d| _ | jD ]}t| |d  q| jd }t|drt d S )NFr   r   )r#   r$   r%   r(   r'   r   )r   argsr2   csr	   r	   r
   r&   N   s   


z-_DesubroutinizingT2Decompiler.stop_hint_countc                 C   s"   t | | | jr|   d S d S r   )r   r   r#   r&   r   r0   r	   r	   r
   r   V   s   z)_DesubroutinizingT2Decompiler.op_hintmaskc                 C   s.   | j d }t|ds|j||jf d S d S )Nr   r   )r(   r'   r*   appendr   )r   r0   r=   rB   r	   r	   r
   r;   [   s   

z)_DesubroutinizingT2Decompiler.processSubrr   )r   r   r   r$   r   r)   r:   r@   r&   r   r;   r	   r	   r	   r
   r      s    
(r   c           	      C   s   | j D ]`}| | }|j}| D ] }|  t|jdg }t||j|j}|| |j	|_
|`	qt|drP|jD ]}|j}t|drE|`d|jv rN|jd= q9q|j}t|drZ|`d|jv rc|jd= q| j  d S )NSubrsFDArray)	fontNamesCharStringsvalues	decompilegetattrr   r   r   r)   r   r+   r'   rF   PrivaterE   rawDictGlobalSubrsclear)	cfffontNamefontrB   csubrs
decompilerfdpdr	   r	   r
   desubroutinizea   s4   







rX   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_MarkingT2Decompilerc                 C   s8   t | ||| ||fD ]}|rt|dst |_qd S )N_used)r   r   r'   r   rZ   )r   r   r   r   rT   r	   r	   r
   r      s   z_MarkingT2Decompiler.__init__c                 C   *   | j j| jd | j  t| | d S r7   )r   rZ   addr8   r9   r   r:   rC   r	   r	   r
   r:         z _MarkingT2Decompiler.op_callsubrc                 C   r[   r7   )r   rZ   r\   r8   r?   r   r@   rC   r	   r	   r
   r@      r]   z!_MarkingT2Decompiler.op_callgsubrN)r   r   r   r   r:   r@   r	   r	   r	   r
   rY   ~   s    rY   c                   @   s   e Zd ZG dd deZ	d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d Zdd Zdd ZdS )_DehintingT2Decompilerc                   @   s   e Zd Zdd ZdS )z_DehintingT2Decompiler.Hintsc                 C   s(   d| _ d| _d| _d| _d| _g | _d S )NFr   )has_hint	last_hintlast_checkedstatushas_hintmask	deletions)r   r	   r	   r
   r      s   
z%_DehintingT2Decompiler.Hints.__init__N)r   r   r   r   r	   r	   r	   r
   Hints   s    re   Nc                 C   s"   || _ t| |||| || _d S r   )_cssr   r   r   )r   cssr   r   nominalWidthXdefaultWidthXr   r	   r	   r
   r      s
   

z_DehintingT2Decompiler.__init__c                 C   s   t |dr|jnd }|  |_t| | |j}|js|jr$| j| |j	dkrMt
|jt|jd D ]}t|j| trCd|_	 nd|_	q4t|j|_|rW|j|jksYJ d S d S )N_hintsr   r   )r'   rj   re   r   r)   r_   rc   rf   r\   rb   rangera   lenr+   
isinstancestr__dict__)r   r1   	old_hintshintsir	   r	   r
   r)      s"   

z_DehintingT2Decompiler.executec                 C   r6   r7   )r   r8   r9   r   r:   r;   r<   r	   r	   r
   r:      r>   z"_DehintingT2Decompiler.op_callsubrc                 C   r6   r7   )r   r8   r?   r   r@   r;   r<   r	   r	   r
   r@      r>   z#_DehintingT2Decompiler.op_callgsubrc                 C      t | | | | d S r   )r   op_hstemprocessHintrC   r	   r	   r
   rt         z_DehintingT2Decompiler.op_hstemc                 C   rs   r   )r   op_vstemru   rC   r	   r	   r
   rw      rv   z_DehintingT2Decompiler.op_vstemc                 C   rs   r   )r   
op_hstemhmru   rC   r	   r	   r
   rx      rv   z!_DehintingT2Decompiler.op_hstemhmc                 C   rs   r   )r   
op_vstemhmru   rC   r	   r	   r
   ry      rv   z!_DehintingT2Decompiler.op_vstemhmc                 C      t | |}| | |S r   )r   r   processHintmaskr   r0   rvr	   r	   r
   r         
z"_DehintingT2Decompiler.op_hintmaskc                 C   rz   r   )r   r   r{   r|   r	   r	   r
   r      r~   z"_DehintingT2Decompiler.op_cntrmaskc                 C   st   | j d }|j}d|_|jdkr3t|j|d D ]}t|j| tr'd|_ nqd|_	|d |_
d|_|d |_d S )Nr   Tr   r   r   )r(   rj   rc   rb   rk   ra   rm   r+   rn   r_   r`   )r   r0   rB   rq   rr   r	   r	   r
   r{      s   


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nr   T)r(   rj   r_   r`   ra   )r   r0   rB   rq   r	   r	   r
   ru      s
   

z"_DehintingT2Decompiler.processHintc                 C   s   | j d }|j}|j}|jdkr+t|j|d D ]}t|j| tr'd|_ nq||_|jdkrE|jrDd|_|jdkr?||_	n|d |_	n|jdkrP|j
| t|j|j|_d S )Nr   r   r   Tr   )r(   rj   rb   rk   ra   rm   r+   rn   r_   r`   rd   rD   max)r   r0   r=   rB   rq   
subr_hintsrr   r	   r	   r
   r;     s(   





z"_DehintingT2Decompiler.processSubrr   )r   r   r   objectre   r   r)   r:   r@   rt   rw   rx   ry   r   r   r{   ru   r;   r	   r	   r	   r
   r^      s     
	r^   c                 C   s   | j }tdt|D ]M}|| dkr2t||d  tsJ |j||d  |j |j ||d < q
|| dkrWt||d  tsCJ |j||d  |j |j ||d < q
d S )Nr   r   r    )	r+   rk   rl   rm   r.   rZ   r0   	_old_bias	_new_bias)
charstringrT   gsubrsprr   r	   r	   r
   _cs_subset_subroutines$  s   *
r   c                 C   s.  | j }|jr| j}t|jD ]	}||d |= q|jr\|jr(|j|jd ks(J | j|jd  | _| js:| jd t| dr\| j| j	j
kr\| j	j
d usPJ d| jd| j| j	j  |jrd}| j}|t|k r|| dv r|d t|kszJ |||d = qd|d7 }|t|k sjt| jsJ | ` d S )Nr   r   r"   widthz5CFF2 CharStrings must not have an initial width value)hintmaskcntrmaskr   )rj   rd   r+   r,   r_   r`   rD   r'   r   r   ri   insertrh   rc   rl   )r   rq   r   r4   rr   r	   r	   r
   _cs_drop_hints1  s<   
r   T)removeUnusedSubrsr   c             	   C   s   |   D ]n}| | }|j}t }| D ]%}|  t|jdg }t|||j|jj	|jj
|j}|| |j|_q|D ]}	t|	 q<~g }
t|drW|
dd |jD  n|
|j |
D ]}dD ]}t||rpt||d  qcq_q|r{t|  d S d S )NrE   rF   c                 s   s    | ]}|j V  qd S r   )rL   .0rV   r	   r	   r
   	<genexpr>  s    zremove_hints.<locals>.<genexpr>)
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	BlueScale	BlueShiftBlueFuzz	StemSnapH	StemSnapVStdHWStdVW	ForceBoldLanguageGroupExpansionFactor)keysrH   r   rI   rJ   rK   r   r^   r   rh   ri   r)   r   r   r'   extendrF   rD   rL   r%   remove_unused_subroutines)rP   r   fontnamerR   rB   rg   rS   rT   rU   r   	all_privsprivkr	   r	   r
   remove_hintsY  sD   




r   c                 C   s2   t | dr| jsd| jv r| jd= | `d S d S d S )NrE   )r'   rE   rM   )private_dictr	   r	   r
   _pd_delete_empty_subrs  s
   
r   c           
         s  |   D ]}| | }|j}| D ]}t|jdg  t |j|j}|| q|jg}t	|dr>|
dd |jD  nt	|jdrO|jjrO||jj t  |D ] t	 ds`t  _t j _t  _t j _qU| D ]}t|jdd  t| |j qv|D ]_  |jkrt	|dst	|jdr|jj}n"t	|drt|jdkrt	|jd jdr|jd jj}nd }n } fdd	 jD  _t	 d
rԈ `t	 drۈ ` jD ]	}t|||j qqt	|dr|jD ]}	t|	j qnt|j |D ]	  ` ` `qqd S )NrE   rF   c                 s   s,    | ]}t |jd r|jjr|jjV  qdS )rE   N)r'   rL   rE   r   r	   r	   r
   r     s    

z,remove_unused_subroutines.<locals>.<genexpr>rZ   r   r   c                    s   g | ]} j | qS r	   )items)r   rr   rT   r	   r
   
<listcomp>  s    z-remove_unused_subroutines.<locals>.<listcomp>fileoffsets)r   rH   rI   rK   r   rY   r   r)   rN   r'   r   rF   rL   rE   rD   r   rZ   r   r   r   r   r   rl   r   r   r   r   )
rP   r   rR   rB   rS   rU   	all_subrslocal_subrsr=   rV   r	   r   r
   r     sj   












r   N)fontTools.misc.psCharStringsr   r   r   r   	Exceptionr   r   rX   rY   r^   r   r   boolr   r   r   r	   r	   r	   r
   <module>   s    Q (B