U
    Q»{jÛ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	   úZ/var/www/html/bwave/python/venv/lib/python3.8/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ƒrh| j rd| jrdzt | |¡ W n tk
rb   | jd= Y nX d S g |_	t | |¡ |j
d d … }t|j	ƒD ]t\}}|dks¦t‚||d  dksÆt||d  ƒ‚t||d  ƒtksÞt‚|d dkrö|d d… }|||d |…< q’| jj�s2d|k�r2|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ÚAssertionErrorÚ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
   r4   D   s    z)_DesubroutinizingT2Decompiler.op_callsubrc                 C   s2   | j | jd | j  }t | |¡ |  ||¡ d S r1   )r   r2   Ú
globalBiasr   Úop_callgsubrr5   r6   r	   r	   r
   r9   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-   r7   r;   r	   r	   r
   r5   [   s    

z)_DesubroutinizingT2Decompiler.processSubr)N)r   r   r   r!   r   r&   r4   r9   r#   r   r5   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krr|jd= qrq|j}t|dƒr´|`d|jk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.    








rO   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   rQ   )r   r   r   r   rK   r	   r	   r
   r      s    z_MarkingT2Decompiler.__init__c                 C   s*   | j j | jd | j ¡ t | |¡ d S r1   )r   rQ   Úaddr2   r3   r   r4   r<   r	   r	   r
   r4   …   s    z _MarkingT2Decompiler.op_callsubrc                 C   s*   | j j | jd | j ¡ t | |¡ d S r1   )r   rQ   rR   r2   r8   r   r9   r<   r	   r	   r
   r9   ‰   s    z!_MarkingT2Decompiler.op_callgsubrN)r   r   r   r   r4   r9   r	   r	   r	   r
   rP   ~   s   rP   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   rZ   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°t‚d S )NÚ_hintsr   r   )r$   r_   rZ   r   r&   rT   rX   r[   rR   rW   ÚrangerV   Úlenr(   Ú
isinstanceÚstrÚ__dict__r*   )r   r.   Z	old_hintsÚhintsÚir	   r	   r
   r&   ²   s    

z_DehintingT2Decompiler.executec                 C   s2   | j | jd | j  }t | |¡ |  ||¡ d S r1   )r   r2   r3   r   r4   r5   r6   r	   r	   r
   r4   Ê   s    z"_DehintingT2Decompiler.op_callsubrc                 C   s2   | j | jd | j  }t | |¡ |  ||¡ d S r1   )r   r2   r8   r   r9   r5   r6   r	   r	   r
   r9   Ï   s    z#_DehintingT2Decompiler.op_callgsubrc                 C   s   t  | |¡ |  |¡ d S r   )r   Úop_hstemÚprocessHintr<   r	   r	   r
   rg   Ô   s    z_DehintingT2Decompiler.op_hstemc                 C   s   t  | |¡ |  |¡ d S r   )r   Úop_vstemrh   r<   r	   r	   r
   ri   Ø   s    z_DehintingT2Decompiler.op_vstemc                 C   s   t  | |¡ |  |¡ d S r   )r   Ú
op_hstemhmrh   r<   r	   r	   r
   rj   Ü   s    z!_DehintingT2Decompiler.op_hstemhmc                 C   s   t  | |¡ |  |¡ d S r   )r   Ú
op_vstemhmrh   r<   r	   r	   r
   rk   à   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   rl   rm   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_   rX   rW   r`   rV   rb   r(   rc   rT   rU   )r   r-   r;   re   rf   r	   r	   r
   rl   î   s    


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nr   T)r%   r_   rT   rU   rV   )r   r-   r;   re   r	   r	   r
   rh   ÿ   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_   rW   r`   rV   rb   r(   rc   rT   rU   rY   r=   Úmax)r   r-   r7   r;   re   Z
subr_hintsrf   r	   r	   r
   r5     s$    




z"_DehintingT2Decompiler.processSubr)N)r   r   r   ÚobjectrZ   r   r&   r4   r9   rg   ri   rj   rk   r   r   rl   rh   r5   r	   r	   r	   r
   rS   Ž   s    ÿ
	rS   c                 C   s´   | j }tdt|ƒƒD ]š}|| dkrdt||d  tƒs:t‚|j ||d  |j ¡|j	 ||d < q|| dkrt||d  tƒs†t‚|j ||d  |j ¡|j	 ||d < qd S )Nr   r   r   )
r(   r`   ra   rb   r,   r*   rQ   r-   Ú	_old_biasÚ	_new_bias)Ú
charstringrK   ZgsubrsÚprf   r	   r	   r
   Ú_cs_subset_subroutines$  s    *ÿru   c                 C   s,  | j }|jr0| j}t|jƒD ]}||d |…= q|jr¸|jrP|j|jd ksPt‚| j|jd … | _| jst| j d¡ t| dƒr¸| j	| j
jkr¸| j
jd k	s tdƒ‚| j d| j	| j
j ¡ |j�rd}| j}|t|ƒk �r|| dk�r
|d t|ƒksút‚|||d …= qÊ|d7 }qÊt| jƒ�s$t‚| ` d S )Nr   r   r   Úwidthz5CFF2 CharStrings must not have an initial width value)ZhintmaskZcntrmaskr   )r_   rY   r(   r)   rT   rU   r*   r=   r$   rv   r   r^   Úinsertr]   rX   ra   )rs   re   rt   r0   rf   r	   r	   r
   Ú_cs_drop_hints1  s>    

ÿþ ÿ
rx   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   )rD   ©Ú.0rM   r	   r	   r
   Ú	<genexpr>�  s     zremove_hints.<locals>.<genexpr>)Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZ	StemSnapHZ	StemSnapVZStdHWZStdVWZ	ForceBoldZLanguageGroupZExpansionFactor)Úkeysr@   r   rA   rB   rC   r   rS   r   r]   r^   r&   rv   rx   r$   Úextendr?   r=   rD   r"   Úremove_unused_subroutines)rH   ry   ÚfontnamerI   r;   r\   rJ   rK   rL   rs   Z	all_privsZprivÚkr	   r	   r
   Úremove_hintsY  s<    ú




r‚   c                 C   s*   t | dƒr&| js&d| jkr"| jd= | `d S )Nr>   )r$   r>   rE   )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$   rD   r>   rz   r	   r	   r
   r|   °  s    þz,remove_unused_subroutines.<locals>.<genexpr>rQ   r   r   c                    s   g | ]}ˆ j | ‘qS r	   )Úitems)r{   rf   ©rK   r	   r
   Ú
<listcomp>Ø  s     z-remove_unused_subroutines.<locals>.<listcomp>ÚfileÚoffsets)r}   r@   rA   rC   r   rP   r   r&   rF   r$   r~   r?   rD   r>   r=   r   rQ   r   r   rq   rr   ru   ra   r„   r‡   rˆ   rƒ   )
rH   r€   rI   r;   rJ   rL   Z	all_subrsZlocal_subrsr7   rM   r	   r…   r
   r   ¢  sd    

þ



ÿþý


r   N)ZfontTools.misc.psCharStringsr   r   r   r   Ú	Exceptionr   r   rO   rP   rS   ru   rx   Úboolr‚   rƒ   r   r	   r	   r	   r
   Ú<module>   s   Q (B