o
    i/D                     @   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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	   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/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_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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   Zin_cff2indexr   )r   
charStringop_nameZdesubroutinizedidxZ	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   r,   subrr	   r	   r
   r4   D      z)_DesubroutinizingT2Decompiler.op_callsubrc                 C   r0   r1   )r   r2   
globalBiasr   op_callgsubrr5   r6   r	   r	   r
   r:   I   r8   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   argsr.   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   r,   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   r,   r7   r<   r	   r	   r
   r5   [   s   

z)_DesubroutinizingT2Decompiler.processSubrr   )r   r   r   r!   r   r&   r4   r:   r#   r   r5   r	   r	   r	   r
   r      s    
(r   c                 C   s@   |    t| jdg }t|| j| j}||  | j| _| `dS )z%Desubroutinize a charstring in-place.SubrsN)	decompilegetattrr   r   r   r&   r   r(   )r<   subrs
decompilerr	   r	   r
   desubroutinizeCharStringa   s   
rD   c                 C   s   | j D ]F}| | }|j}| D ]}t| qt|dr6|jD ]}|j}t|dr+|`d|jv r4|jd= qq|j}t|dr@|`d|jv rI|jd= q| j	
  d S )NFDArrayr?   )Z	fontNamesCharStringsvaluesrD   r$   rE   Privater?   rawDictGlobalSubrsclear)cffZfontNamefontr<   cfdpdr	   r	   r
   desubroutinizek   s*   







rQ   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   rS   )r   r   r   r   rB   r	   r	   r
   r      s   z_MarkingT2Decompiler.__init__c                 C   *   | j j| jd | j  t| | d S r1   )r   rS   addr2   r3   r   r4   r=   r	   r	   r
   r4         z _MarkingT2Decompiler.op_callsubrc                 C   rT   r1   )r   rS   rU   r2   r9   r   r:   r=   r	   r	   r
   r:      rV   z!_MarkingT2Decompiler.op_callgsubrN)r   r   r   r   r4   r:   r	   r	   r	   r
   rR      s    rR   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    r^   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$   rc   r^   r   r&   rX   r\   r_   rU   r[   rangerZ   lenr(   
isinstancestr__dict__)r   r-   Z	old_hintshintsir	   r	   r
   r&      s"   

z_DehintingT2Decompiler.executec                 C   r0   r1   )r   r2   r3   r   r4   r5   r6   r	   r	   r
   r4      r8   z"_DehintingT2Decompiler.op_callsubrc                 C   r0   r1   )r   r2   r9   r   r:   r5   r6   r	   r	   r
   r:      r8   z#_DehintingT2Decompiler.op_callgsubrc                 C      t | | | | d S r   )r   op_hstemprocessHintr=   r	   r	   r
   rl         z_DehintingT2Decompiler.op_hstemc                 C   rk   r   )r   op_vstemrm   r=   r	   r	   r
   ro      rn   z_DehintingT2Decompiler.op_vstemc                 C   rk   r   )r   
op_hstemhmrm   r=   r	   r	   r
   rp      rn   z!_DehintingT2Decompiler.op_hstemhmc                 C   rk   r   )r   
op_vstemhmrm   r=   r	   r	   r
   rq      rn   z!_DehintingT2Decompiler.op_vstemhmc                 C      t | |}| | |S r   )r   r   processHintmaskr   r,   rvr	   r	   r
   r         
z"_DehintingT2Decompiler.op_hintmaskc                 C   rr   r   )r   r   rs   rt   r	   r	   r
   r      rv   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%   rc   r\   r[   rd   rZ   rf   r(   rg   rX   rY   )r   r,   r<   ri   rj   r	   r	   r
   rs      s   


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nr   T)r%   rc   rX   rY   rZ   )r   r,   r<   ri   r	   r	   r
   rm     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%   rc   r[   rd   rZ   rf   r(   rg   rX   rY   r]   r>   max)r   r,   r7   r<   ri   Z
subr_hintsrj   r	   r	   r
   r5     s(   





z"_DehintingT2Decompiler.processSubrr   )r   r   r   objectr^   r   r&   r4   r:   rl   ro   rp   rq   r   r   rs   rm   r5   r	   r	   r	   r
   rW      s     
	rW   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(   rd   re   rf   r+   rS   r,   	_old_bias	_new_bias)
charstringrB   Zgsubrsprj   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)ZhintmaskZcntrmaskr   )rc   r]   r(   r)   rX   rY   r>   r$   r~   r   rb   insertra   r\   re   )r{   ri   r|   r/   rj   r	   r	   r
   _cs_drop_hints6  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 )Nr?   rE   c                 s   s    | ]}|j V  qd S r   )rH   .0rO   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)keysrF   r   rG   r@   rA   r   rW   r   ra   rb   r&   r~   r   r$   extendrE   r>   rH   r"   remove_unused_subroutines)rL   r   fontnamerM   r<   r`   rN   rB   rC   r{   Z	all_privsZprivkr	   r	   r
   remove_hints^  sD   




r   c                 C   s2   t | dr| jsd| jv r| jd= | `d S d S d S )Nr?   )r$   r?   rI   )Z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 )Nr?   rE   c                 s   s,    | ]}t |jd r|jjr|jjV  qdS )r?   N)r$   rH   r?   r   r	   r	   r
   r     s    

z,remove_unused_subroutines.<locals>.<genexpr>rS   r   r   c                    s   g | ]} j | qS r	   )items)r   rj   rB   r	   r
   
<listcomp>  s    z-remove_unused_subroutines.<locals>.<listcomp>fileoffsets)r   rF   rG   rA   r   rR   r   r&   rJ   r$   r   rE   rH   r?   r>   r   rS   r   r   ry   rz   r}   re   r   r   r   r   )
rL   r   rM   r<   rN   rC   Z	all_subrsZlocal_subrsr7   rO   r	   r   r
   r     sj   












r   N)ZfontTools.misc.psCharStringsr   r   r   r   	Exceptionr   r   rD   rQ   rR   rW   r}   r   boolr   r   r   r	   r	   r	   r
   <module>   s    Q
 (B