o
    Ðùa/  ã                   @   sb   d dl mZ d dlmZ d dlZe d¡Zdd„ Z		dd	d
„ZG dd„ dƒZ	dd„ Z
dd„ ZdS )é    )Úis_Default_Ignorable)ÚDecomposingRecordingPenNzfontTools.mergec                 C   sž   i }|D ]?}t |ƒD ]8\}}||v r>|| }|d t|ƒ |v r.|d7 }|d t|ƒ |v s |||< |dt|ƒ 7 }|||< d||< q
qt| ¡ ƒ | _}dS )zXModifies passed-in glyphOrders to reflect new glyph names.
    Stores merger.glyphOrder.ú#é   N)Ú	enumerateÚreprÚlistÚkeysÚ
glyphOrder)ÚmergerZglyphOrdersZ	megaOrderr
   ÚiÚ	glyphNameÚn© r   ú6/usr/lib/python3/dist-packages/fontTools/merge/cmap.pyÚcomputeMegaGlyphOrder   s   ÿ
ø	r   çš™™™™™©?çš™™™™™É?c                 C   s¦   t | ƒ}t |ƒ}| | }|| }	| |¡ |	 |¡ |j|jkr"dS |jr'|n|}
t|j|	j ƒ|j|
 kr8dS t|dƒrQ|jd urQt|j|	j ƒ|j|
 krQdS dS )NFÚheightT)r   ZdrawÚvalueÚabsÚwidthÚhasattrr   )Z	glyphSet1Z	glyphSet2Zglyph1Zglyph2ZadvanceToleranceZadvanceToleranceEmptyZpen1Zpen2Zg1Zg2Z	tolerancer   r   r   Ú_glyphsAreSame   s   

r   c                   @   s   e Zd Zh d£Zh d£ZdS )Ú_CmapUnicodePlatEncodings>   ©é   r   r   ©r   r   é   ©r   r   é   ©r   r   r   >   ©é   r   r   ©r#   r   r    ©r#   r   é
   N)Ú__name__Ú
__module__Ú__qualname__ÚBMPÚFullRepertoirer   r   r   r   r   7   s    r   c              	   C   s²  g }t |ƒD ]I\}}d}d}|jD ]&}|j|j|jf}|tjv r#|}q|tjv r+|}qt 	d||j|j|j¡ q|durD| 
||f¡ q|durO| 
||f¡ qi  | _}	i }
t| dƒrddd„ | jD ƒnd}|D ]n\}}|j ¡ D ]d\}}|	 |d¡}|du rˆ||	|< ||
|< qqt|ƒs|dv r‘qq||krÕ| j|  |¡du rÅ|dur½|
| }||fD ]}|| du r¼| j|  ¡ ||< q«|| j| |< qq| j| | |krÕt 	d||¡ qqqhdS )z'Sets merger.cmap and merger.glyphOrder.NzODropped cmap subtable from font '%s':	format %2s, platformID %2s, platEncID %2sÚfontsc                 S   s   g | ]}d ‘qS )Nr   )Ú.0Úfr   r   r   Ú
<listcomp>Y   s    z#computeMegaCmap.<locals>.<listcomp>)iÌ%  z4Dropped mapping from codepoint %#06X to glyphId '%s')r   ZtablesÚformatZ
platformIDZ	platEncIDr   r*   r+   ÚlogZwarningÚappendÚcmapr   r,   ÚitemsÚgetr   ZduplicateGlyphsPerFontZgetGlyphSet)r   Z
cmapTablesZchosenCmapTablesZfontIdxÚtableZformat4Zformat12ZsubtableZ
propertiesr3   ZfontIndexForGlyphZ	glyphSetsZuniÚgidZoldgidZ
oldFontIdxÚidxr   r   r   ÚcomputeMegaCmap;   sX   


ý€

€€éþr9   c                 C   sP   |j jd }i }t|jj ¡ ƒD ]\}}|| }|||< q||j_t|ƒ|_dS )z4Rename topDictIndex charStrings based on glyphOrder.r   N)ZcffZtopDictIndexr   ZCharStringsÚcharStringsÚvaluesr   Úcharset)r   r
   ZcffTableZtdr:   r   Úvr   r   r   r   ÚrenameCFFCharStringsw   s   
r>   )r   r   )ZfontTools.merge.unicoder   ZfontTools.pens.recordingPenr   ZloggingZ	getLoggerr1   r   r   r   r9   r>   r   r   r   r   Ú<module>   s   

þ<