a
    w=ic<                     @   sb  d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ G dd dejZeed	d
d Zd(ddZeed	dd Zeed	dd Zeejdd Zeejdd ZG dd dejZG dd dejZeed	dd Zdd Ze	ded eed	d!d" Zeed	d#d$ Zeed	d%d& Zd'S ))    )psCharStrings)ttLib)NullPen)otRound)deprecateFunction)_add_method
_uniq_sortc                   @   s   e Zd Zdd Zdd ZdS )_ClosureGlyphsT2Decompilerc                 C   s   t j| || || _d S N)r   SimpleT2Decompiler__init__
components)selfr   
localSubrsglobalSubrs r   e/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/subset/cff.pyr      s
    z#_ClosureGlyphsT2Decompiler.__init__c           
      C   s`   |   }t|dkr\ddlm} |dd  \}}}}|| }|| }	| j| | j|	 d S )N   r   )StandardEncoding)ZpopalllenZ$fontTools.encodings.StandardEncodingr   r   add)
r   indexargsr   ZadxZadyZbcharZacharZ	baseGlyphZaccentGlyphr   r   r   
op_endchar   s    z%_ClosureGlyphsT2Decompiler.op_endcharN)__name__
__module____qualname__r   r   r   r   r   r   r	   	   s   r	   zCFF c                 C   s   | j }t|dksJ || d  }|j}|j}|rt }|D ]<}||vrNq@|| }t|jdg }	t||	|j	}
|

| q@||j8 }|j| |}q2d S )N   r   Subrs)cffr   keysCharStringsglyphssetgetattrprivater	   r   executeupdate)r   sr    fontZglyphSetZ	decomposer   gglsubrs
decompilerr   r   r   closure_glyphs   s"    
r/   Fc           
      C   s   | j |\}}|s|r.||r$g ndg nht| drP| jd urP| j| j}n| j}|j}|j}t }	|	|	 |j
|kr|j
| dg|_ndg|_d S )NendcharFDArray)r"   getItemAndSelectorZ
setProgramhasattrr1   PrivatedefaultWidthXnominalWidthXr   Zdrawwidthprogram)
r*   Z	glyphNameisCFF2ignoreWidthcZfdSelectIndexr&   ZdfltWdXZnmnlWdXpenr   r   r   _empty_charstring3   s    

r=   c                 C   sp   | j }|jd d |_|jrP|jsP|jdk}| D ]}|| }t|d|d q4| D ]}|| }d|_qXdS )Nr   z.notdef)r9   r   T)r    Z	fontNamesZnotdef_glyphZnotdef_outlinemajorr!   r=   ZEncoding)r   r*   optionsr    r9   fontnamer   r   r   prune_pre_subsetF   s    
rA   c                    sj  | j }| D ]T}|| }|j}|j|j|jD ]}|vrDq6||\}}q6|jrfddt	|jD }	|j
  fdd|	D  _ ` `t|dr|jd _fdd|	D _i }
t	|	D ]$\}}|j| }||jv r||
|< q|
|_nfdd|j D |_fdd|jD |_t|j|_|jjr|jd	k}|jD ]}t|||d
d qLqd
S )Nc                    s   g | ]\}}| v r|qS r   r   ).0ir+   r#   r   r   
<listcomp>i       z!subset_glyphs.<locals>.<listcomp>c                    s   g | ]} j | qS r   itemsrB   rC   )csir   r   rE   k   rF   FDSelectc                    s   g | ]} j | qS r   )gidArrayrI   )selr   r   rE   p   rF   c                    s   i | ]\}}| v r||qS r   r   )rB   r+   vrD   r   r   
<dictcomp>x   s   z!subset_glyphs.<locals>.<dictcomp>c                    s   g | ]}| v r|qS r   r   )rB   r+   rD   r   r   rE   {   rF   r   T)r9   r:   )r    r!   r"   r#   unionZglyphs_emptiedcharsetr2   ZcharStringsAreIndexed	enumerateZcharStringsIndexrH   fileoffsetsr3   rK   formatrL   ZcharStringsr   Z	numGlyphsr?   Zretain_gidsr>   r=   )r   r)   r    r@   r*   csr+   r;   _indicesZnewCharStringsZ
indicesIdxZ
charsetIdxr9   r   )rJ   r#   rM   r   subset_glyphsZ   sB    








rY   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   ZcallsubrZ	callgsubr)	r8   ranger   
isinstanceint_usedr   	_old_bias	_new_bias)r   r-   ZgsubrsprC   r   r   r   subset_subroutines   s    *ra   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 )N   r   r0   r7   z5CFF2 CharStrings must not have an initial width value)ZhintmaskZcntrmaskr   )_hints	deletionsr8   reversedhas_hint	last_hintappendr3   r7   r&   r5   insertr6   has_hintmaskr   )r   hintsr`   idxrC   r   r   r   
drop_hints   s2    

rm   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_MarkingT2Decompilerc                 C   s:   t j| ||| ||fD ]}|rt|dst |_qd S )Nr]   )r   r   r   r3   r$   r]   )r   r   r   r&   r-   r   r   r   r      s    z_MarkingT2Decompiler.__init__c                 C   s,   | j j| jd | j  tj| | d S N)r   r]   r   operandStack	localBiasr   r   op_callsubrr   r   r   r   r   rs      s    z _MarkingT2Decompiler.op_callsubrc                 C   s,   | j j| jd | j  tj| | d S ro   )r   r]   r   rq   
globalBiasr   r   op_callgsubrrt   r   r   r   rv      s    z!_MarkingT2Decompiler.op_callgsubrN)r   r   r   r   rs   rv   r   r   r   r   rn      s   	rn   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   )rf   rg   last_checkedstatusrj   rd   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j| |||| || _d S r
   )_cssr   T2WidthExtractorr   r&   )r   cssr   r   r6   r5   r&   r   r   r   r      s
    
z_DehintingT2Decompiler.__init__c                 C   s   t |dr|jnd }|  |_tj| | |j}|js>|jrJ| j	| |j
dkrt|jt|jd D ]&}t|j| trd|_
 qqjd|_
qjt|j|_|r|j|jksJ d S )Nrc   rb   r   )r3   rc   r{   r   r}   r'   rf   rj   r|   r   ry   rZ   rx   r   r8   r[   str__dict__)r   Z
charStringZ	old_hintsrk   rC   r   r   r   r'      s    

z_DehintingT2Decompiler.executec                 C   s4   | j | jd | j  }tj| | | || d S ro   )r   rq   rr   r   r}   rs   processSubrr   r   subrr   r   r   rs     s    z"_DehintingT2Decompiler.op_callsubrc                 C   s4   | j | jd | j  }tj| | | || d S ro   )r   rq   ru   r   r}   rv   r   r   r   r   r   rv     s    z#_DehintingT2Decompiler.op_callgsubrc                 C   s   t j| | | | d S r
   )r   r}   op_hstemprocessHintrt   r   r   r   r     s    z_DehintingT2Decompiler.op_hstemc                 C   s   t j| | | | d S r
   )r   r}   op_vstemr   rt   r   r   r   r     s    z_DehintingT2Decompiler.op_vstemc                 C   s   t j| | | | d S r
   )r   r}   
op_hstemhmr   rt   r   r   r   r     s    z!_DehintingT2Decompiler.op_hstemhmc                 C   s   t j| | | | d S r
   )r   r}   
op_vstemhmr   rt   r   r   r   r     s    z!_DehintingT2Decompiler.op_vstemhmc                 C   s   t j| |}| | |S r
   )r   r}   op_hintmaskprocessHintmaskr   r   rvr   r   r   r     s    
z"_DehintingT2Decompiler.op_hintmaskc                 C   s   t j| |}| | |S r
   )r   r}   op_cntrmaskr   r   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 )Nrp   Trb   r   r   )callingStackrc   rj   ry   rZ   rx   r[   r8   r   rf   rg   )r   r   rV   rk   rC   r   r   r   r   !  s    


z&_DehintingT2Decompiler.processHintmaskc                 C   s&   | j d }|j}d|_||_||_d S )Nrp   T)r   rc   rf   rg   rx   )r   r   rV   rk   r   r   r   r   2  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 )Nrp   rb   r   Tr   )r   rc   ry   rZ   rx   r[   r8   r   rf   rg   rd   rh   max)r   r   r   rV   rk   Z
subr_hintsrC   r   r   r   r   9  s$    




z"_DehintingT2Decompiler.processSubr)N)r   r   r   objectr{   r   r'   rs   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   rw      s   
rw   c                    s   | j }| D ]d}|| }|j}t|dr|j}t|jfdd|jD |_|j  fddD  _ `	 `
q|jr|  |js|   n|js|   dS )NrK   c                    s   g | ]}  |qS r   )r   )rB   ss)rX   r   r   rE   b  rF   z%prune_post_subset.<locals>.<listcomp>c                    s   g | ]} | qS r   r   rI   )arrr   r   rE   d  rF   T)r    r!   r"   r3   rK   r   rL   r1   rH   rS   rT   desubroutinizeZhintingremove_hintsremove_unused_subroutines)r   ZttfFontr?   r    r@   r*   rV   rM   r   )r   rX   r   prune_post_subsetW  s$    



r   c                 C   s*   t | dr&| js&d| jv r"| jd= | `d S )Nr   )r3   r   ZrawDict)Zprivate_dictr   r   r   _delete_empty_subrss  s    
r   z)use 'CFFFontSet.desubroutinize()' instead)categoryc                 C   s   | j   d S r
   )r    r   rz   r   r   r   r   z  s    r   c              	   C   s  | j }| D ]}|| }|j}t }|jD ]X}||\}}|  t|jdg }	t	||	|j
|jj|jj|j}
|
| |
j|_q,|D ]}|  q~g }t|dr|dd |jD  n||j |D ]$}dD ]}t||rt||d  qqq|   d S )Nr   r1   c                 s   s   | ]}|j V  qd S r
   )r4   rB   fdr   r   r   	<genexpr>  rF   zremove_hints.<locals>.<genexpr>)Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZ	BlueScaleZ	BlueShiftZBlueFuzzZ	StemSnapHZ	StemSnapVZStdHWZStdVWZ	ForceBoldZLanguageGroupZExpansionFactor)r    r!   r"   r$   rQ   r2   Z	decompiler%   r&   rw   r   r6   r5   r'   r7   rm   r3   extendr1   rh   r4   setattrr   )r   r    r@   r*   rV   r~   r+   r;   rW   r-   r.   Z
charstringZ	all_privsZprivkr   r   r   r     s8    






r   c                    s  | j }| D ]}|| }|j}|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 ]< t dst  _t j _t  _t j _q|jD ]0}||\}}t|jdg  | |j
 q |	D ]  |j
krpt|dsjt|jdrj|jj}
ng }
n }
 fdd jD  _t dr `t d	r ` jD ]}||
|j
 qq6t|dr|jD ]}t|j qn
t|j |	D ]  ` ` `qqd S )
Nr   r1   c                 s   s*   | ]"}t |jd r|jjr|jjV  qdS )r   N)r3   r4   r   r   r   r   r   r     rF   z,remove_unused_subroutines.<locals>.<genexpr>r]   c                    s   g | ]} j | qS r   rG   rI   r-   r   r   rE     rF   z-remove_unused_subroutines.<locals>.<listcomp>rS   rT   )r    r!   r"   rQ   r2   r%   r&   rn   r   r'   ZGlobalSubrsr3   r   r1   r4   r   rh   r$   r]   r   r   ZcalcSubrBiasr^   r_   ra   rH   rS   rT   r   )r   r    r@   r*   rV   r+   r;   rW   r.   Z	all_subrsZlocal_subrsr   r   r   r   r   r     sX    







r   N)F) ZfontTools.miscr   Z	fontToolsr   ZfontTools.pens.basePenr   ZfontTools.misc.roundToolsr   ZfontTools.misc.loggingToolsr   ZfontTools.subset.utilr   r   r   r	   ZgetTableClassr/   r=   rA   rY   ZT2CharStringra   rm   rn   r}   rw   r   r   DeprecationWarningr   r   r   r   r   r   r   <module>   s<   



,


# 


4