a
    —ÆàgÛC  ã                   @   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	   úT/var/www/sistema_ama/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s¤J ‚||d  dv sÄJ ||d  ƒ‚t||d  ƒtksÜJ ‚|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rœt
|jt|jƒd ƒD ]&}t|j| tƒrˆd|_	 q�qhd|_	qht|jƒ|_|r°|j|jks°J ‚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r d|_|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ƒs†J ‚|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s J dƒ‚| j d| j| j	j ¡ |j�rd}| j}|t|ƒk �r|| dv �r
|d t|ƒksúJ ‚|||d …= qÊ|d7 }qÊt| 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||ƒrÆt||d ƒ qÆq¾q|ròt| ƒ 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ƒsÀtƒ ˆ _tˆ jƒˆ _tˆ ƒˆ _tˆ jƒˆ _qª| ¡ D ] }t|jdd ƒ‰ t|ˆ |jƒ qì|D ]Ò‰ ˆ |jk�rŒt	|dƒ�sFt	|jdƒ�rF|jj}nDt	|dƒ�r†t|jƒdk�r†t	|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ƒ �qøn
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