U
    #vh                     @   s*  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d	dd Ze	dedeed	dd Ze	dedeed	dd Ze	ded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   Z
localSubrsglobalSubrs r   8/tmp/pip-unpacked-wheel-1ufboor8/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t|| d  }|j}|j}|rt }|D ]<}||krNq@|| }t|jdg }	t	||	|j
}
|
| q@||j8 }|j| |}q2d S )N   r   ZSubrs)cffr   AssertionErrorkeysCharStringsglyphssetgetattrprivater	   r   executeupdate)r   sr   fontZglyphSetZ	decomposer   gglZsubrsZ
decompilerr   r   r   closure_glyphs   s"    
r,   Fc           
      C   s   | j |\}}|s|r.||r$g ndg nht| drP| jd k	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hasattrr.   ZPrivateZdefaultWidthXZnominalWidthXr   Zdrawwidthprogram)
r)   Z	glyphNameisCFF2ignoreWidthcZfdSelectIndexr%   ZdfltWdXZnmnlWdXZpenr   r   r   _empty_charstring3   s    

r6   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)r3   r   T)r   Z	fontNamesZnotdef_glyphZnotdef_outlinemajorr    r6   Encoding)r   r)   optionsr   r3   fontnamer   r   r   prune_pre_subsetG   s    
r;   c                    sj  | j }| D ]T}|| }|j}|j|j|jD ]}|k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k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 | ]\}}| kr|qS r   r   ).0ir*   r"   r   r   
<listcomp>l   s      z!subset_glyphs.<locals>.<listcomp>c                    s   g | ]} j | qS r   )itemsr<   r=   )csir   r   r?   n   s     FDSelectc                    s   g | ]} j | qS r   )gidArrayrA   )selr   r   r?   s   s     c                    s   i | ]\}}| kr||qS r   r   )r<   r*   vr>   r   r   
<dictcomp>{   s       z!subset_glyphs.<locals>.<dictcomp>c                    s   g | ]}| kr|qS r   r   )r<   r*   r>   r   r   r?   |   s      r   T)r3   r4   )r   r    r!   r"   unionZglyphs_emptiedcharsetr/   ZcharStringsAreIndexed	enumerateZcharStringsIndexr@   fileoffsetsr0   rC   formatrD   ZcharStringsr   Z	numGlyphsr9   Zretain_gidsr7   r6   )r   r(   r   r:   r)   csr*   r5   _indicesZnewCharStringsZ
indicesIdxZ
charsetIdxr3   r   )rB   r"   rE   r   subset_glyphs\   s@    






rQ   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 )NrC   c                    s   g | ]}  |qS r   )r   )r<   ss)rP   r   r   r?      s     z%prune_post_subset.<locals>.<listcomp>c                    s   g | ]} | qS r   r   rA   )arrr   r   r?      s     T)r   r    r!   r0   rC   r   rD   r.   r@   rK   rL   desubroutinizeZhintingremove_hintsremove_unused_subroutines)r   ZttfFontr9   r   r:   r)   rN   rE   r   )rS   rP   r   prune_post_subset   s$    



rW   z)use 'CFFFontSet.desubroutinize()' instead)categoryc                 C   s   | j   d S r
   )r   rT   r   r   r   r   rT      s    rT   z'use 'CFFFontSet.remove_hints()' insteadc                 C   s   | j   d S r
   )r   rU   rY   r   r   r   rU      s    rU   z2use 'CFFFontSet.remove_unused_subroutines' insteadc                 C   s   | j   d S r
   )r   rV   rY   r   r   r   rV      s    rV   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,   r6   r;   rQ   rW   DeprecationWarningrT   rU   rV   r   r   r   r   <module>   sB   



*
   