a
    ZXhC                     @   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edddZdd Zdd ZdS )    )SimpleT2DecompilerT2WidthExtractorcalcSubrBiasc                 C   s   t t| S N)sortedset)l r	   `/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/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_cntrmaskZ
op_rmovetoZ
op_hmovetoZ
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rf| j rb| jrbzt| | W n ty`   | jd= Y n0 d S g |_	t| | |j
d d  }t|j	D ]t\}}|dksJ ||d  dv sJ ||d  t||d  tksJ |d dkr|d d }|||d |< q| jjs0d|v r0|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   Zin_cff2indexr   )r   
charStringop_nameZdesubroutinizedidxZ	expansionr	   r	   r
   r&      s:    




z%_DesubroutinizingT2Decompiler.executec                 C   s2   | j | jd | j  }t| | | || d S Nr   )r   operandStack	localBiasr   op_callsubrprocessSubrr   r,   subrr	   r	   r
   r3   D   s    z)_DesubroutinizingT2Decompiler.op_callsubrc                 C   s2   | j | jd | j  }t| | | || d S r0   )r   r1   
globalBiasr   op_callgsubrr4   r5   r	   r	   r
   r8   I   s    z*_DesubroutinizingT2Decompiler.op_callgsubrc                 G   s<   d| _ | jD ]}t| |d  q| jd }t|dr8t d S )NFr   r   )r    r!   r"   r%   r$   r   )r   argsr.   csr	   r	   r
   r#   N   s    


z-_DesubroutinizingT2Decompiler.stop_hint_countc                 C   s   t | | | jr|   d S r   )r   r   r    r#   r   r,   r	   r	   r
   r   V   s    z)_DesubroutinizingT2Decompiler.op_hintmaskc                 C   s*   | j d }t|ds&|j||jf d S )Nr   r   )r%   r$   r'   appendr   )r   r,   r6   r:   r	   r	   r
   r4   [   s    

z)_DesubroutinizingT2Decompiler.processSubr)N)r   r   r   r!   r   r&   r3   r8   r#   r   r4   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r|jD ]*}|j}t|dr|`d|jv rr|jd= qrq|j}t|dr|`d|jv r|jd= q| j  d S )NSubrsFDArray)Z	fontNamesCharStringsvalues	decompilegetattrr   r   r   r&   r   r(   r$   r>   Privater=   rawDictGlobalSubrsclear)	cffZfontNamefontr:   csubrs
decompilerfdpdr	   r	   r
   desubroutinizea   s.    








rN   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   rP   )r   r   r   r   rJ   r	   r	   r
   r      s    z_MarkingT2Decompiler.__init__c                 C   s*   | j j| jd | j  t| | d S r0   )r   rP   addr1   r2   r   r3   r;   r	   r	   r
   r3      s    z _MarkingT2Decompiler.op_callsubrc                 C   s*   | j j| jd | j  t| | d S r0   )r   rP   rQ   r1   r7   r   r8   r;   r	   r	   r
   r8      s    z!_MarkingT2Decompiler.op_callgsubrN)r   r   r   r   r3   r8   r	   r	   r	   r
   rO   ~   s   rO   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   rY   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rH| j| |j	dkrt
|jt|jd D ]&}t|j| trd|_	 qqhd|_	qht|j|_|r|j|jksJ d S )N_hintsr   r   )r$   r^   rY   r   r&   rS   rW   rZ   rQ   rV   rangerU   lenr(   
isinstancestr__dict__)r   r-   Z	old_hintshintsir	   r	   r
   r&      s    

z_DehintingT2Decompiler.executec                 C   s2   | j | jd | j  }t| | | || d S r0   )r   r1   r2   r   r3   r4   r5   r	   r	   r
   r3      s    z"_DehintingT2Decompiler.op_callsubrc                 C   s2   | j | jd | j  }t| | | || d S r0   )r   r1   r7   r   r8   r4   r5   r	   r	   r
   r8      s    z#_DehintingT2Decompiler.op_callgsubrc                 C   s   t | | | | d S r   )r   op_hstemprocessHintr;   r	   r	   r
   rf      s    z_DehintingT2Decompiler.op_hstemc                 C   s   t | | | | d S r   )r   op_vstemrg   r;   r	   r	   r
   rh      s    z_DehintingT2Decompiler.op_vstemc                 C   s   t | | | | d S r   )r   
op_hstemhmrg   r;   r	   r	   r
   ri      s    z!_DehintingT2Decompiler.op_hstemhmc                 C   s   t | | | | d S r   )r   
op_vstemhmrg   r;   r	   r	   r
   rj      s    z!_DehintingT2Decompiler.op_vstemhmc                 C   s   t | |}| | |S r   )r   r   processHintmaskr   r,   rvr	   r	   r
   r      s    
z"_DehintingT2Decompiler.op_hintmaskc                 C   s   t | |}| | |S r   )r   r   rk   rl   r	   r	   r
   r      s    
z"_DehintingT2Decompiler.op_cntrmaskc                 C   st   | j d }|j}d|_|jdkrft|j|d D ]}t|j| tr0d|_ qfq0d|_	|d |_
d|_|d |_d S )Nr   Tr   r   r   )r%   r^   rW   rV   r_   rU   ra   r(   rb   rS   rT   )r   r,   r:   rd   re   r	   r	   r
   rk      s    


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nr   T)r%   r^   rS   rT   rU   )r   r,   r:   rd   r	   r	   r
   rg      s
    
z"_DehintingT2Decompiler.processHintc                 C   s   | j d }|j}|j}|jdkrVt|j|d D ]}t|j| tr0d|_ qPq0||_|jdkr|jrd|_|jdkr~||_	q|d |_	n|jdkr|j
| t|j|j|_d S )Nr   r   r   Tr   )r%   r^   rV   r_   rU   ra   r(   rb   rS   rT   rX   r<   max)r   r,   r6   r:   rd   Z
subr_hintsre   r	   r	   r
   r4     s$    




z"_DehintingT2Decompiler.processSubr)N)r   r   r   objectrY   r   r&   r3   r8   rf   rh   ri   rj   r   r   rk   rg   r4   r	   r	   r	   r
   rR      s    
	rR   c                 C   s   | j }tdt|D ]}|| dkrdt||d  ts:J |j||d  |j |j ||d < q|| dkrt||d  tsJ |j||d  |j |j ||d < qd S )Nr   r   r   )	r(   r_   r`   ra   r+   rP   r,   	_old_bias	_new_bias)
charstringrJ   Zgsubrspre   r	   r	   r
   _cs_subset_subroutines$  s    *rt   c                 C   s,  | j }|jr0| j}t|jD ]}||d |= q|jr|jrP|j|jd ksPJ | j|jd  | _| jst| jd t| dr| j| j	j
kr| j	j
d usJ d| jd| j| j	j  |jrd}| j}|t|k r|| dv r
|d t|ksJ |||d = q|d7 }qt| js$J | ` d S )Nr   r   r   widthz5CFF2 CharStrings must not have an initial width value)ZhintmaskZcntrmaskr   )r^   rX   r(   r)   rS   rT   r<   r$   ru   r   r]   insertr\   rW   r`   )rr   rd   rs   r/   re   r	   r	   r
   _cs_drop_hints1  s<    


rw   T)removeUnusedSubrsc             	   C   s   |   D ]}| | }|j}t }| D ]J}|  t|jdg }t|||j|jj	|jj
|j}|| |j|_q(|D ]}	t|	 qx~g }
t|dr|
dd |jD  n|
|j |
D ]$}dD ]}t||rt||d  qqq|rt|  d S )Nr=   r>   c                 s   s   | ]}|j V  qd S r   )rC   .0rL   r	   r	   r
   	<genexpr>      zremove_hints.<locals>.<genexpr>)Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZ	StemSnapHZ	StemSnapVZStdHWZStdVWZ	ForceBoldZLanguageGroupZExpansionFactor)keysr?   r   r@   rA   rB   r   rR   r   r\   r]   r&   ru   rw   r$   extendr>   r<   rC   r"   remove_unused_subroutines)rG   rx   fontnamerH   r:   r[   rI   rJ   rK   rr   Z	all_privsZprivkr	   r	   r
   remove_hintsY  s<    




r   c                 C   s*   t | dr&| js&d| jv r"| jd= | `d S )Nr=   )r$   r=   rD   )Zprivate_dictr	   r	   r
   _pd_delete_empty_subrs  s    
r   c           
         s4  |   D ]$}| | }|j}| D ],}t|jdg  t |j|j}|| q$|jg}t	|dr||
dd |jD  n"t	|jdr|jjr||jj t  |D ]8 t	 dst  _t j _t  _t j _q| D ] }t|jdd  t| |j q|D ]҉  |jkrt	|dsFt	|jdrF|jj}nDt	|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 q̐qt	|dr|jD ]}	t|	j qn
t|j |D ]  ` ` `qqd S )Nr=   r>   c                 s   s*   | ]"}t |jd r|jjr|jjV  qdS )r=   N)r$   rC   r=   ry   r	   r	   r
   r{     s   z,remove_unused_subroutines.<locals>.<genexpr>rP   r   r   c                    s   g | ]} j | qS r	   )items)rz   re   rJ   r	   r
   
<listcomp>  r|   z-remove_unused_subroutines.<locals>.<listcomp>fileoffsets)r}   r?   r@   rB   r   rO   r   r&   rE   r$   r~   r>   rC   r=   r<   r   rP   r   r   rp   rq   rt   r`   r   r   r   r   )
rG   r   rH   r:   rI   rK   Z	all_subrsZlocal_subrsr6   rL   r	   r   r
   r     sd    








r   N)ZfontTools.misc.psCharStringsr   r   r   r   	Exceptionr   r   rN   rO   rR   rt   rw   boolr   r   r   r	   r	   r	   r
   <module>   s   Q (B