B
    Sc/  ã               @   s^   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 }x||D ]t}xnt |ƒD ]b\}}||krr|| }x |d t|ƒ |krP|d7 }q2W |||< |dt|ƒ 7 }|||< d||< qW q
W 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   ú3lib/python3.7/site-packages/fontTools/merge/cmap.pyÚcomputeMegaGlyphOrder   s    
r   çš™™™™™©?çš™™™™™É?c             C   s¦   t | ƒ}t |ƒ}| | }|| }	| |¡ |	 |¡ |j|jkrDdS |jrN|n|}
t|j|	j ƒ|j|
 krpdS t|dƒr¢|jd k	r¢t|j|	j ƒ|j|
 kr¢d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ddddhZdddh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 }x¢t |ƒD ]–\}}d}d}xV|jD ]L}|j|j|jf}|tjkrJ|}q&|tjkrZ|}q&t 	d||j|j|j¡ q&W |dk	rŽ| 
||f¡ q|dk	r| 
||f¡ qW i  | _}	i }
t| dƒrÐdd„ | jD ƒnd} xú|D ]ò\}}xè|j ¡ D ]Ú\}}|	 |d¡}|dkr ||	|< ||
|< qðt|ƒsð|dkr6qðqð||krð| j|  |¡dkrª|dk	rš|
| }x2||fD ]&}|| dkrp| j|  ¡ ||< qpW || j| |< qð| j| | |krðt 	d||¡ qðW qÜW d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
propertiesr,   ZfontIndexForGlyphZ	glyphSetsZuniÚgidZoldgidZ
oldFontIdxÚidxr   r   r   ÚcomputeMegaCmap;   sL    





r2   c             C   sT   |j jd }i }x,t|jj ¡ ƒD ]\}}|| }|||< q"W ||j_t|ƒ|_dS )z4Rename topDictIndex charStrings based on glyphOrder.r   N)ZcffZtopDictIndexr   ZCharStringsÚcharStringsÚvaluesr   Úcharset)r   r
   ZcffTableZtdr3   r   Úvr   r   r   r   ÚrenameCFFCharStringsw   s    r7   )r   r   )ZfontTools.merge.unicoder   ZfontTools.pens.recordingPenr   ZloggingZ	getLoggerr*   r   r   r   r2   r7   r   r   r   r   Ú<module>   s   
 
<