U
    Dvf>                     @   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   :/tmp/pip-unpacked-wheel-qlge9rch/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 }|rt	||_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rqt|jjgdd |jjD  D ]r}	|	d krqdd |	jD }
t |
dkst|
r|
d }
nx|s6t }d|_t  }|_d |_d|_g |_|j
jj| |j
j jd7  _|}
|	j|
 |	jjd	d
 d |st }||_t }d|_ d|_!d|_"|g|_#|j
j$d krt$ |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  _qqtq&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langsysZfeaturer#   Zsubtabler   r   r   r]      sp    




r]   c                 C   s   d S r   r   r   	lookupMapr   r   r   
mapLookups  s    rc   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SubstZSubZPosChain LookupRecordr0   RuleRuleSet   Z	ClassRuleZClassSet)
__name__endswith
startswithTypTyperd   ChainTyprf   rg   rh   )r   klassrD   rm   rn   rd   ro   r   r   r   __init__  s(    


z8__merge_classify_context.<locals>.ContextHelper.__init__N)rj   
__module____qualname__rq   r   r   r   r   ContextHelper  s   rt   )r0   ri      _merge__ContextHelpers)objectrD   hasattr	__class__rv   )r   rt   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rt| |jD ]}|sq~||j |_q~ndstd| j d S )N)r0   ri   ru   r   unknown format: %s)r{   rD   getattrrh   rg   rf   r   r   )r   rb   crsrZllr   r   r   rc   B  s$    

c                 C   s.   | j dkr| j| nds*td| j  d S )Nr0   r   r|   )rD   ZExtSubTablerc   r   ra   r   r   r   rc   _  s    
c                 C   s    | j D ]}|sq|| qd S r   )r[   rc   )r   rb   str   r   r   rc   g  s    
c                 C   s    | j D ]}|sq|| qd S r   )rC   rc   )r   rb   r   r   r   r   rc   o  s    
c                 C   s   | j d@ r|| j | _d S )N   )rZ   ZMarkFilteringSet)r   markFilteringSetMapr   r   r   mapMarkFilteringSetsw  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_   rb   r   r   r     s     zmapLookups.<locals>.<listcomp>r   ra   r   r   r   rc     s    c                 C   s(   | j D ]}|r|jsq|j| qd S r   )r!   r   rc   )r   rb   r#   r   r   r   rc     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rdd t|jjjD }|jj| |jj| |r|jjdkr|jjrd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   rc   rV   rF   MarkGlyphSetsDefrE   r   rU   r!   r   )fontrH   rI   rJ   trb   r   r   r   r   r   layoutPreMerge  s.    



r   c                    s  |  d}|  d}|  d}||fD ]}|s2q&|jjr|jjrt|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   rc   r   rF   r   rE   r   )r   rH   rI   rJ   r   r   rb   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sumDictsZ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MarkMarkPosrc   ZContextSubstZChainContextSubstZ
ContextPosZChainContextPosr{   ZExtensionSubstZExtensionPosrC   r   r   r1   r-   r   r5   r   r   r   r   r   r   <module>   s   


	






 
 


C

'









	
!