U
    »mœd×>  ã                   @   s  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	T d dl
Z
e
 d¡Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ edœej_dd„ dd„ dœej_edd„ dœej_eedœej_eedœej_eedœej_eeedœej_eeed œej_e eed!œej!_d"eiej"_eed#œej#_ee$d$œ ej%_ ej&_ ej'_ ej(_ ej)_ej*_e+e ƒed%œ e ,d&¡_ e ,d'¡_ e ,d(¡_ e ,d)¡_ e ,d*¡_e ,d+¡_ee ,d'¡ƒd,d-„ ƒZ-eej.ej/ej0ej1ej2ej3ej4ej5ej6ej7ej8ƒd.d/„ ƒZ9eej:ej;ej<ej=ƒd0d1„ ƒZ>eej:ej;ej<ej=ƒd2d/„ ƒZ9eej?ej@ƒd3d/„ ƒZ9eejAƒd4d/„ ƒZ9eejƒd5d/„ ƒZ9eejAƒd6d7„ ƒZBeejƒd8d7„ ƒZBeejCƒd9d/„ ƒZ9eejƒd:d/„ ƒZ9eejDejEƒd;d<„ ƒZFeejGƒd=d<„ ƒZFeejƒd>d<„ ƒZFd?d@„ ZHdAdB„ ZIdS )Cé    )ÚttLib)ÚDefaultTable)ÚotTables)Ú
add_methodÚmergeObjects)Ú*NzfontTools.mergec                 C   s   t | ƒS ©N)ÚsumLists©Úlst© r   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/merge/layout.pyÚmergeLookupLists   s    r   c                 C   s:   | st ‚t ¡ }d |_tdd„ | D ƒƒ|_t|jƒ|_|S )Nc                 S   s   g | ]}|j r|j ‘qS r   ©ÚLookupListIndex©Ú.0Úlr   r   r   Ú
<listcomp>   s      z!mergeFeatures.<locals>.<listcomp>)ÚAssertionErrorr   ÚFeatureÚFeatureParamsr   r   ÚlenÚLookupCount©r   Úselfr   r   r   ÚmergeFeatures   s    ÿr   c                 C   s~   i }| D ]4}|D ]*}|j }||kr*g ||< ||  |j¡ qqg }t| ¡ ƒD ]*}t ¡ }||_ t|| ƒ|_| |¡ qN|S r   )Ú
FeatureTagÚappendr   ÚsortedÚkeysr   ÚFeatureRecordr   )r   Údr   ÚfÚtagÚretÚrecr   r   r   ÚmergeFeatureLists    s    r'   c                 C   sV   | st ‚tdd„ | D ƒƒst ‚t ¡ }d |_d|_tdd„ | D ƒƒ|_t|jƒ|_	|S )Nc                 s   s   | ]}|j d kV  qdS )éÿÿ  N)ÚReqFeatureIndexr   r   r   r   Ú	<genexpr>5   s     z!mergeLangSyses.<locals>.<genexpr>r(   c                 S   s   g | ]}|j r|j ‘qS r   )ÚFeatureIndexr   r   r   r   r   ;   s      z"mergeLangSyses.<locals>.<listcomp>)
r   Úallr   ÚLangSysZLookupOrderr)   r'   r+   r   ÚFeatureCountr   r   r   r   ÚmergeLangSyses1   s    ÿr/   c           	      C   sØ   | st ‚t| ƒdkr| d S i }| D ]6}|jD ]*}|j|krFg ||j< ||j  |j¡ q.q$g }t| ¡ ƒD ]*\}}t ¡ }t	|ƒ|_||_| |¡ qlt 
¡ }||_t|ƒ|_dd„ | D ƒ}|rÎt	|ƒ|_nd |_|S )Né   r   c                 S   s   g | ]}|j r|j ‘qS r   )ÚDefaultLangSys)r   Úsr   r   r   r   V   s      z mergeScripts.<locals>.<listcomp>)r   r   ÚLangSysRecordZ
LangSysTagr   r-   r   Úitemsr   r/   ÚScriptZLangSysCountr1   )	r   Z	langSysesÚsrZlsrZ	lsrecordsr$   ZlangSys_listr   ZdfltLangSysesr   r   r   ÚmergeScriptsA   s.    




r7   c                 C   s~   i }| D ]4}|D ]*}|j }||kr*g ||< ||  |j¡ qqg }t| ¡ ƒD ]*}t ¡ }||_ t|| ƒ|_| |¡ qN|S r   )Ú	ScriptTagr   r5   r   r    r   ÚScriptRecordr7   )r   r"   r   r2   r$   r%   r&   r   r   r   ÚmergeScriptRecords^   s    r:   c                 C   s   d S r   r   r
   r   r   r   Ú<lambda>p   ó    r;   )ZScriptCountr9   c                 C   s   d S r   r   r
   r   r   r   r;   t   r<   c                 C   s   t t| ƒdd„ d�S )Nc                 S   s   | j S r   )ZBaseScriptTag©r2   r   r   r   r;   w   r<   ú<lambda>.<locals>.<lambda>©Úkey©r   r	   r
   r   r   r   r;   v   s    ÿ)ZBaseScriptCountZBaseScriptRecordc                 C   s   t t| ƒdd„ d�S )Nc                 S   s   | j S r   ©r   r=   r   r   r   r;   }   r<   r>   r?   rA   r
   r   r   r   r;   }   r<   )r.   r!   )r   ÚLookup)ÚFormatZglyphs)rD   Z	classDefs)ÚCoverageZLigGlyphCountZLigGlyph)rE   Z
GlyphCountZAttachPoint)ZMarkSetTableFormatZMarkSetCountrE   r   )ZBaseTagCountZBaselineTag)r   ÚVersion)ZtableTagÚtableÚGDEFÚGSUBÚGPOSÚBASEÚJSTFÚMATHc                 C   s.  t |ƒt |jƒkst‚tt||jƒƒD �]ò\}\}}|s:q&|d ksJ|tkrbt d|j| j	|¡ q&d }d }|j
jjD �]¢}|jdkr†qt|jjgdd„ |jjD ƒ D �]r}	|	d kr²q¢dd„ |	jD ƒ}
t |
ƒdksÒt‚|
rà|
d }
nx|�s6t ¡ }d|_t ¡  }|_d |_d|_g |_|j
jj |¡ |j
j jd7  _|}
|	j |
¡ |	jjd	d
„ d� |�sÞt ¡ }||_t ¡ }d|_ d|_!d|_"|g|_#|j
j$d k�r¼t $¡ |j
_$g |j
j$_d|j
j$_|j
j$j |¡ |j
j$ jd7  _|
jjd d… |gkr¢|g|
jjd d…< |
j jd7  _q¢qtq&t% &| ||¡ | S )Nz[Have non-identical duplicates to resolve for '%s' but no GSUB. Are duplicates intended?: %sZDFLTc                 S   s   g | ]
}|j ‘qS r   )r-   r   r   r   r   r   Ö   s    zmerge.<locals>.<listcomp>c                 S   s   g | ]}|j d kr|‘qS )ÚloclrB   )r   Úvr   r   r   r   Û   s     
 r0   r   rN   c                 S   s   | j S r   rB   )rO   r   r   r   r;   ë   r<   zmerge.<locals>.<lambda>r?   )'r   ZduplicateGlyphsPerFontr   Ú	enumerateÚzipÚNotImplementedÚlogÚwarningZfontsZ_merger__namerG   Ú
ScriptListr9   r8   r5   r1   r3   r+   r   r!   r   r   r   r   r   ÚFeatureListr   r.   ÚsortÚSingleSubstÚmappingrC   Ú
LookupFlagZ
LookupTypeZSubTableCountÚSubTableÚ
LookupListr   Úmerge)r   ÚmZtablesÚirG   ZdupsZsynthFeatureZsynthLookupÚscriptZlangsysÚfeaturer#   Zsubtabler   r   r   r]   Ã   sp    
ý
ÿ


r]   c                 C   s   d S r   r   ©r   Ú	lookupMapr   r   r   Ú
mapLookups  s    rd   c                 C   sj   G dd„ dt ƒ}| jdkrd S t| jdƒs2i | j_| j| jjkr\|| j| jƒ}|| jj| j< | jj| j S )Nc                   @   s   e Zd Zdd„ ZdS )z/__merge_classify_context.<locals>.ContextHelperc                 S   sœ   |j  d¡rd}d}nd}d}|j  d¡r0d}nd}|| }|| _|| _|| _|| _|d | _|dkr||d | _|d	 | _	n|d
kr˜|d | _|d | _	d S )NZSubstÚSubÚPosÚChainÚ ÚLookupRecordr0   ÚRuleÚRuleSeté   Z	ClassRuleZClassSet)
Ú__name__ÚendswithÚ
startswithÚTypÚTyperg   ÚChainTypri   rj   rk   )r   ÚklassrD   rp   rq   rg   rr   r   r   r   Ú__init__!  s(    


z8__merge_classify_context.<locals>.ContextHelper.__init__N)rm   Ú
__module__Ú__qualname__rt   r   r   r   r   ÚContextHelper   s   rw   )r0   rl   é   Ú_merge__ContextHelpers)ÚobjectrD   ÚhasattrÚ	__class__ry   )r   rw   Úhelperr   r   r   Ú__merge_classify_context  s    
r~   c                 C   s®   |   ¡ }| jdkrht| |jƒD ]F}|s(qt||jƒD ].}|s>q4t||jƒD ]}|sTqJ||j |_qJq4qnB| jdkr˜t| |jƒD ]}|sˆq~||j |_q~ndsªtd| j ƒ‚d S )N)r0   rl   rx   r   úunknown format: %s)r~   rD   Úgetattrrk   rj   ri   r   r   )r   rc   ÚcÚrsÚrÚllr   r   r   rd   F  s$    

c                 C   s.   | j dkr| j |¡ nds*td| j  ƒ‚d S )Nr0   r   r   )rD   ZExtSubTablerd   r   rb   r   r   r   rd   c  s    
c                 C   s    | j D ]}|sq| |¡ qd S r   )r[   rd   )r   rc   Ústr   r   r   rd   k  s    
c                 C   s    | j D ]}|sq| |¡ qd S r   )rC   rd   )r   rc   r   r   r   r   rd   s  s    
c                 C   s   | j d@ r|| j | _d S )Né   )rZ   ZMarkFilteringSet)r   ÚmarkFilteringSetMapr   r   r   ÚmapMarkFilteringSets{  s    
rˆ   c                 C   s    | j D ]}|sq| |¡ qd S r   )rC   rˆ   )r   r‡   r   r   r   r   rˆ   �  s    
c                    s   ‡ fdd„| j D ƒ| _ d S )Nc                    s   g | ]}ˆ | ‘qS r   r   ©r   r_   ©rc   r   r   r   ‹  s     zmapLookups.<locals>.<listcomp>r   rb   r   rŠ   r   rd   ‰  s    c                 C   s(   | j D ]}|r|jsq|j |¡ qd S r   )r!   r   rd   )r   rc   r#   r   r   r   rd   Ž  s    

c                    s0   ‡ fdd„| j D ƒ| _ | jdkr,ˆ | j | _d S )Nc                    s   g | ]}ˆ | ‘qS r   r   r‰   ©Ú
featureMapr   r   r   ˜  s     zmapFeatures.<locals>.<listcomp>r(   )r+   r)   )r   rŒ   r   r‹   r   ÚmapFeatures–  s    
r�   c                 C   s:   | j r| j  |¡ | jD ]}|r|js(q|j |¡ qd S r   )r1   r�   r3   r-   )r   rŒ   r   r   r   r   r�   �  s    

c                 C   s(   | j D ]}|r|jsq|j |¡ qd S r   )r9   r5   r�   )r   rŒ   r2   r   r   r   r�   §  s    

c                 C   sæ   |   d¡}|   d¡}|   d¡}||fD ]º}|s0q&|jjrªdd„ t|jjjƒD ƒ}|jj |¡ |jj |¡ |rª|jjdkrª|jjrªdd„ t|jjj	ƒD ƒ}|jj 
|¡ |jjr&|jjr&dd„ t|jjjƒD ƒ}|jj |¡ q&d S )	NrH   rI   rJ   c                 S   s   i | ]\}}||“qS r   r   ©r   r_   rO   r   r   r   Ú
<dictcomp>»  s      z"layoutPreMerge.<locals>.<dictcomp>é  c                 S   s   i | ]\}}||“qS r   r   rŽ   r   r   r   r�   Ä  s     c                 S   s   i | ]\}}||“qS r   r   rŽ   r   r   r   r�   Ê  s      )ÚgetrG   r\   rP   rC   rd   rV   rF   ÚMarkGlyphSetsDefrE   rˆ   rU   r!   r�   )ÚfontrH   rI   rJ   Útrc   r‡   rŒ   r   r   r   ÚlayoutPreMerge¯  s.    


ÿ
þýÿr•   c                    sÆ  |   d¡}|   d¡}|   d¡}||fD �]˜}|s2q&|jjrÒ|jjrÒt|jjjƒ}|jj |¡ t|jjjƒ}|jj |¡ |j‰ ‡ fdd„t	|jjjƒD ƒ|jj_t
|jjjƒ}|jj |¡ t|jjjƒ|jj_|jjr&t|jjjƒ}|jj |¡ |jj |¡ t|jjjƒ}|jj |¡ |jj |¡ |j‰ ‡ fdd„t	|jjjƒD ƒ|jj_t
|jjjƒ}|jj |¡ |jj |¡ t|jjjƒ|jj_|r&|jjdkr&t
|jjjƒ}|jj |¡ q&d S )NrH   rI   rJ   c                    s   g | ]\}}|ˆ kr|‘qS r   r   )r   r_   r#   ©ZusedIndicesr   r   r   è  s   þz#layoutPostMerge.<locals>.<listcomp>c                    s   g | ]\}}|ˆ kr|‘qS r   r   )r   r_   r   r–   r   r   r     s     r�   )r‘   rG   rV   rU   ZGregariousIdentityDictr!   r�   ZAttendanceRecordingIdentityDictr2   rP   ZNonhashableDictr   r.   r\   rC   rd   r   rF   r’   rE   rˆ   )r“   rH   rI   rJ   r”   rŒ   rc   r‡   r   r–   r   ÚlayoutPostMergeÐ  sP    


ÿ
þ
ÿÿr—   )JZ	fontToolsr   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.ttLib.tablesr   ZfontTools.merge.baser   r   ZfontTools.merge.utilÚloggingÚ	getLoggerrS   r   r   r'   r/   r7   r:   rU   ZmergeMapZBaseScriptListÚsumrV   r	   r\   ÚminrE   ZsumDictsÚClassDefZLigCaretListZ
AttachListÚequalr’   ZAxisZBaseTagListÚmaxrH   rI   rJ   rK   rL   rM   ZonlyExistingZgetTableClassr]   rX   ZMultipleSubstZAlternateSubstZLigatureSubstZReverseChainSingleSubstZ	SinglePosZPairPosZ
CursivePosZMarkBasePosZ
MarkLigPosZMarkMarkPosrd   ZContextSubstZChainContextSubstZ
ContextPosZChainContextPosr~   ZExtensionSubstZExtensionPosrC   rˆ   r   r1   r-   r�   r5   r•   r—   r   r   r   r   Ú<module>   s  
þ
ý
	þ
þ
þ
þ
ý
ý
ý
 ÿþ

þü
ÿýü þøÿ
þÿþÿÿ
Cõ
ü
'ü









	
!