o
    a4                     @   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   8/usr/lib/python3/dist-packages/fontTools/merge/layout.pymergeLookupLists   s   r   c                 C   s:   | sJ t  }d |_tdd | D |_t|j|_|S )Nc                 S      g | ]}|j r|j qS r   LookupListIndex.0lr   r   r   
<listcomp>       z!mergeFeatures.<locals>.<listcomp>)r   FeatureFeatureParamsr   r   lenLookupCountr   selfr   r   r   mergeFeatures   s   r   c                 C   ~   i }| D ]}|D ]}|j }||vrg ||< || |j qqg }t| D ]}t }||_ t|| |_|| q'|S r   )
FeatureTagappendr   sortedkeysr   FeatureRecordr   )r   dr   ftagretrecr   r   r   mergeFeatureLists      r)   c                 C   sV   | sJ t dd | D sJ 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>0   s    z!mergeLangSyses.<locals>.<genexpr>r+   c                 S   r   r   )FeatureIndexr   r   r   r   r   5   r   z"mergeLangSyses.<locals>.<listcomp>)	allr   LangSysZLookupOrderr,   r)   r.   r   FeatureCountr   r   r   r   mergeLangSyses,   s   r2   c           	      C   s   | sJ t | dkr| d S i }| D ]}|jD ]}|j|vr#g ||j< ||j |j qqg }t| D ]\}}t }t||_||_|| q6t	 }||_t ||_
dd | D }|rht||_|S d |_|S )N   r   c                 S   r   r   )DefaultLangSys)r   sr   r   r   r   N   r   z mergeScripts.<locals>.<listcomp>)r   LangSysRecordZ
LangSysTagr    r0   r!   itemsr   r2   ScriptZLangSysCountr4   )	r   Z	langSysessrZlsrZ	lsrecordsr&   ZlangSys_listr   ZdfltLangSysesr   r   r   mergeScripts9   s2   





r:   c                 C   r   r   )	ScriptTagr    r8   r!   r"   r   ScriptRecordr:   )r   r$   r   r5   r&   r'   r(   r   r   r   mergeScriptRecordsU   r*   r=   c                 C      d S r   r   r
   r   r   r   <lambda>f       r?   )ZScriptCountr<   c                 C   r>   r   r   r
   r   r   r   r?   j   r@   c                 C      t t| dd dS )Nc                 S      | j S r   )ZBaseScriptTagr5   r   r   r   r?   l       <lambda>.<locals>.<lambda>keyr!   r	   r
   r   r   r   r?   l       )ZBaseScriptCountZBaseScriptRecordc                 C   rA   )Nc                 S   rB   r   r   rC   r   r   r   r?   q   rD   rE   rF   rH   r
   r   r   r   r?   q   rI   )r1   r#   )r   Lookup)FormatZglyphs)rL   Z	classDefs)CoverageZLigGlyphCountZLigGlyph)rM   Z
GlyphCountZAttachPoint)ZMarkSetTableFormatZMarkSetCountrM   r   )ZBaseTagCountZBaselineTag)r   Version)ZtableTagtableGDEFGSUBGPOSBASEJSTFMATHc                 C   s$  t |t |jksJ tt||jD ]\}\}}|sq|d u s$|tu r0td|j| j| qd }d }|j	j
jD ]}|jdkrAq9|jjgdd |jjD  D ]}	|	d u rVqOdd |	jD }
t |
dksfJ |
rm|
d }
n;|st }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 u 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  _qOq9q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   )r0   r   r   r   r   r      s    zmerge.<locals>.<listcomp>c                 S   s   g | ]	}|j d kr|qS )loclrJ   )r   vr   r   r   r      s    r3   r   rV   c                 S   rB   r   rJ   )rW   r   r   r   r?      rD   zmerge.<locals>.<lambda>rF   )&r   ZduplicateGlyphsPerFont	enumeratezipNotImplementedlogZwarningZfontsZ_merger__namerO   
ScriptListr<   r;   r8   r4   r6   r.   r   r#   r   r   r   r   r   FeatureListr    r1   sortSingleSubstmappingrK   
LookupFlagZ
LookupTypeZSubTableCountSubTable
LookupListr   merge)r   mZtablesirO   ZdupsZsynthFeatureZsynthLookupZscriptZlangsysZfeaturer%   Zsubtabler   r   r   rd      sd    



,rd   c                 C   r>   r   r   r   	lookupMapr   r   r   
mapLookups   s   ri   c                 C   sj   G dd dt }| jdvrd S t| jdsi | j_| j| jjv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rd}nd}|| }|| _|| _|| _|| _|d | _|dkr?|d | _|d	 | _	d S |d
krO|d | _|d | _	d S d S )NZSubstZSubZPosChain LookupRecordr3   RuleRuleSet   Z	ClassRuleZClassSet)
__name__endswith
startswithTypTyperj   ChainTyprl   rm   rn   )r   klassrL   rs   rt   rj   ru   r   r   r   __init__  s*   


z8__merge_classify_context.<locals>.ContextHelper.__init__N)rp   
__module____qualname__rw   r   r   r   r   ContextHelper  s    rz   )r3   ro      _merge__ContextHelpers)objectrL   hasattr	__class__r|   )r   rz   helperr   r   r   __merge_classify_context   s   
r   c                 C   s   |   }| jdv r5t| |jD ]#}|sqt||jD ]}|sqt||jD ]}|s*q%||j |_q%qqd S | jdkrNt| |jD ]}|sEq@||j |_q@d S J d| j )N)r3   ro   r{   r   unknown format: %s)r   rL   getattrrn   rm   rl   r   )r   rh   cZrsrZllr   r   r   ri   ,  s$   

c                 C   s(   | j dkr| j| d S J d| j  )Nr3   r   r   )rL   ZExtSubTableri   rg   r   r   r   ri   B  s   
c                 C       | j D ]
}|sq|| qd S r   )rb   ri   )r   rh   str   r   r   ri   J     
c                 C   r   r   )rK   ri   )r   rh   r   r   r   r   ri   P  r   c                 C   s   | j d@ r|| j | _d S d S )N   )ra   ZMarkFilteringSet)r   markFilteringSetMapr   r   r   mapMarkFilteringSetsV  s   
r   c                 C   r   r   )rK   r   )r   r   r   r   r   r   r   [  r   c                    s    fdd| j D | _ d S )Nc                       g | ]} | qS r   r   r   rf   rh   r   r   r   c  rI   zmapLookups.<locals>.<listcomp>r   rg   r   r   r   ri   a  s   c                 C   (   | j D ]}|r
|jsq|j| qd S r   )r#   r   ri   )r   rh   r%   r   r   r   ri   e     
c                    s4    fdd| j D | _ | jdkr | j | _d S d S )Nc                    r   r   r   r   
featureMapr   r   r   n  rI   zmapFeatures.<locals>.<listcomp>r+   )r.   r,   )r   r   r   r   r   mapFeaturesk  s   
r   c                 C   s:   | j r	| j | | jD ]}|r|jsq|j| qd S r   )r4   r   r6   r0   )r   r   r   r   r   r   r   r  s   
c                 C   r   r   )r<   r8   r   )r   r   r5   r   r   r   r   z  r   c                 C   s   |  d}|  d}|  d}||fD ]Y}|sq|jjrQdd t|jjjD }|jj| |jj| |rQ|jjdkrQdd t|jjj	D }|jj
| |jjrl|jjrldd t|jjjD }|jj| qd S )	NrP   rQ   rR   c                 S      i | ]\}}||qS r   r   r   rf   rW   r   r   r   
<dictcomp>      z"layoutPreMerge.<locals>.<dictcomp>  c                 S   r   r   r   r   r   r   r   r     r   c                 S   r   r   r   r   r   r   r   r     r   )getrO   rc   rX   rK   ri   r]   rN   MarkGlyphSetsDefrM   r   r\   r#   r   )fontrP   rQ   rR   trh   r   r   r   r   r   layoutPreMerge  s"   


r   c                    s  |  d}|  d}|  d}||fD ]}|sq|jjrh|jjrht|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rt|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rt
|jjj}|jj| qd S )NrP   rQ   rR   c                       g | ]
\}}| v r|qS r   r   )r   rf   r%   ZusedIndicesr   r   r         z#layoutPostMerge.<locals>.<listcomp>c                    r   r   r   )r   rf   r   r   r   r   r     r   r   )r   rO   r]   r\   ZGregariousIdentityDictr#   r   ZAttendanceRecordingIdentityDictr5   rX   ZNonhashableDictr   r1   rc   rK   ri   r   rN   r   rM   r   )r   rP   rQ   rR   r   r   rh   r   r   r   r   layoutPostMerge  sB   


""r   )JZ	fontToolsr   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.ttLib.tablesr   ZfontTools.merge.baser   r   ZfontTools.merge.utilZloggingZ	getLoggerr[   r   r   r)   r2   r:   r=   r\   ZmergeMapZBaseScriptListsumr]   r	   rc   minrM   ZsumDictsZClassDefZLigCaretListZ
AttachListZequalr   ZAxisZBaseTagListmaxrP   rQ   rR   rS   rT   rU   ZonlyExistingZgetTableClassrd   r_   ZMultipleSubstZAlternateSubstZLigatureSubstZReverseChainSingleSubstZ	SinglePosZPairPosZ
CursivePosZMarkBasePosZ
MarkLigPosZMarkMarkPosri   ZContextSubstZChainContextSubstZ
ContextPosZChainContextPosr   ZExtensionSubstZExtensionPosrK   r   r   r4   r0   r   r8   r   r   r   r   r   r   <module>   s   

















:

(










