U
    Q»{j  ã                   @   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   úS/var/www/html/bwave/python/venv/lib/python3.8/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t‚|| ¡ d  }|j}|j}|rštƒ }|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 )NZendcharÚFDArray)r!   ÚgetItemAndSelectorZ
setProgramÚhasattrr-   ZPrivateZdefaultWidthXZnominalWidthXr   ZdrawÚwidthÚprogram)
r)   Z	glyphNameÚisCFF2ÚignoreWidthÚcZfdSelectIndexr%   ZdfltWdXZnmnlWdXÚ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)r2   r   T)r   Z	fontNamesZnotdef_glyphZnotdef_outlineÚmajorr    r6   ZEncoding)r   r)   Úoptionsr   r2   Ú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   )ÚgidArrayr@   )Ú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)r2   r3   )r   r    r!   r"   ÚunionZglyphs_emptiedÚcharsetr.   ZcharStringsAreIndexedÚ	enumerateZcharStringsIndexr?   ÚfileÚoffsetsr/   rB   ÚformatrC   ZcharStringsr   Z	numGlyphsr8   Zretain_gidsr7   r6   )r   r(   r   r9   r)   Úcsr*   r4   Ú_ÚindicesZnewCharStringsZ
indicesIdxZ
charsetIdxr2   r   )rA   r"   rD   r   Úsubset_glyphs\   s@    






rP   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 )NrB   c                    s   g | ]}ˆ   |¡‘qS r   )r   )r;   Úss)rO   r   r   r>   ’   s     z%prune_post_subset.<locals>.<listcomp>c                    s   g | ]}ˆ | ‘qS r   r   r@   )Úarrr   r   r>   ”   s     T)r   r    r!   r/   rB   r   rC   r-   r?   rJ   rK   ÚdesubroutinizeZhintingÚremove_hintsÚremove_unused_subroutines)r   ZttfFontr8   r   r9   r)   rM   rD   r   )rR   rO   r   Úprune_post_subset‡   s$    



rV   z)use 'CFFFontSet.desubroutinize()' instead)Úcategoryc                 C   s   | j  ¡  d S r
   )r   rS   ©r   r   r   r   rS   £   s    rS   z'use 'CFFFontSet.remove_hints()' insteadc                 C   s   | j  ¡  d S r
   )r   rT   rX   r   r   r   rT   «   s    rT   z2use 'CFFFontSet.remove_unused_subroutines' insteadc                 C   s   | j  ¡  d S r
   )r   rU   rX   r   r   r   rU   ³   s    rU   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:   rP   rV   ÚDeprecationWarningrS   rT   rU   r   r   r   r   Ú<module>   sB   



*
 ÿ ÿ ÿ