a
    w=ic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   g/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/merge/layout.pymergeLookupLists   s    r   c                 C   s:   | sJ 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>       z!mergeFeatures.<locals>.<listcomp>)r   FeatureFeatureParamsr   r   lenLookupCountr   selfr   r   r   mergeFeatures   s    r   c                 C   s~   i }| D ]4}|D ]*}|j }||v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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   r   z!mergeLangSyses.<locals>.<genexpr>r(   c                 S   s   g | ]}|j r|j qS r   )FeatureIndexr   r   r   r   r   5   r   z"mergeLangSyses.<locals>.<listcomp>)	allr   LangSysZLookupOrderr)   r'   r+   r   FeatureCountr   r   r   r   mergeLangSyses,   s    r/   c           	      C   s   | sJ t | dkr| d S i }| D ]6}|jD ]*}|j|v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   N   r   z mergeScripts.<locals>.<listcomp>)r   LangSysRecordZ
LangSysTagr   r-   r   itemsr   r/   ScriptZLangSysCountr1   )	r   Z	langSysessrZlsrZ	lsrecordsr$   ZlangSys_listr   ZdfltLangSysesr   r   r   mergeScripts9   s.    




r7   c                 C   s~   i }| D ]4}|D ]*}|j }||v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   mergeScriptRecordsU   s    r:   c                 C   s   d S r   r   r
   r   r   r   <lambda>f   r   r;   )ZScriptCountr9   c                 C   s   d S r   r   r
   r   r   r   r;   j   r   c                 C   s   t t| dd dS )Nc                 S   s   | j S r   )ZBaseScriptTagr2   r   r   r   r;   l   r   <lambda>.<locals>.<lambda>keyr   r	   r
   r   r   r   r;   l   r   )ZBaseScriptCountZBaseScriptRecordc                 C   s   t t| dd dS )Nc                 S   s   | j S r   r   r<   r   r   r   r;   q   r   r=   r>   r@   r
   r   r   r   r;   q   r   )r.   r!   )r   Lookup)FormatZglyphs)rC   Z	classDefs)CoverageZLigGlyphCountZLigGlyph)rD   Z
GlyphCountZAttachPoint)ZMarkSetTableFormatZMarkSetCountrD   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 sJ|tu 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 u rqdd |	jD }
t |
dksJ |
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 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  _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      r   zmerge.<locals>.<listcomp>c                 S   s   g | ]}|j d kr|qS )loclrA   )r   vr   r   r   r      r   r0   r   rM   c                 S   s   | j S r   rA   )rN   r   r   r   r;      r   zmerge.<locals>.<lambda>r>   )&r   ZduplicateGlyphsPerFont	enumeratezipNotImplementedlogwarningZfontsZ_merger__namerF   
ScriptListr9   r8   r5   r1   r3   r+   r   r!   r   r   r   r   r   FeatureListr   r.   sortSingleSubstmappingrB   
LookupFlagZ
LookupTypeZSubTableCountSubTable
LookupListr   merge)r   mZtablesirF   ZdupsZsynthFeatureZsynthLookupscriptZlangsysfeaturer#   Zsubtabler   r   r   r\      s^    "



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vrd S t| jds2i | 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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Typerf   ChainTyprh   ri   rj   )r   klassrC   ro   rp   rf   rq   r   r   r   __init__  s(    


z8__merge_classify_context.<locals>.ContextHelper.__init__N)rl   
__module____qualname__rs   r   r   r   r   ContextHelper  s   rv   )r0   rk      _merge__ContextHelpers)objectrC   hasattr	__class__rx   )r   rv   helperr   r   r   __merge_classify_context   s    
r}   c                 C   s   |   }| jdv 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sJ d| j d S )N)r0   rk   rw   r   unknown format: %s)r}   rC   getattrrj   ri   rh   r   )r   rb   crsrllr   r   r   rc   ,  s    

c                 C   s.   | j dkr| j| nds*J d| j  d S )Nr0   r   r~   )rC   ZExtSubTablerc   ra   r   r   r   rc   B  s    
c                 C   s    | j D ]}|sq|| qd S r   )rZ   rc   )r   rb   str   r   r   rc   J  s    
c                 C   s    | j D ]}|sq|| qd S r   )rB   rc   )r   rb   r   r   r   r   rc   P  s    
c                 C   s   | j d@ r|| j | _d S )N   )rY   ZMarkFilteringSet)r   markFilteringSetMapr   r   r   mapMarkFilteringSetsV  s    
r   c                 C   s    | j D ]}|sq|| qd S r   )rB   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   c  r   zmapLookups.<locals>.<listcomp>r   ra   r   r   r   rc   a  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   e  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   n  r   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   )r1   r   r3   r-   )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   z  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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 )	NrG   rH   rI   c                 S   s   i | ]\}}||qS r   r   r   r^   rN   r   r   r   
<dictcomp>  r   z"layoutPreMerge.<locals>.<dictcomp>  c                 S   s   i | ]\}}||qS r   r   r   r   r   r   r     r   c                 S   s   i | ]\}}||qS r   r   r   r   r   r   r     r   )getrF   r[   rO   rB   rc   rU   rE   MarkGlyphSetsDefrD   r   rT   r!   r   )fontrG   rH   rI   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 )NrG   rH   rI   c                    s   g | ]\}}| v r|qS r   r   )r   r^   r#   ZusedIndicesr   r   r     r   z#layoutPostMerge.<locals>.<listcomp>c                    s   g | ]\}}| v r|qS r   r   )r   r^   r   r   r   r   r     r   r   )r   rF   rU   rT   ZGregariousIdentityDictr!   r   ZAttendanceRecordingIdentityDictr2   rO   ZNonhashableDictr   r.   r[   rB   rc   r   rE   r   rD   r   )r   rG   rH   rI   r   r   rb   r   r   r   r   layoutPostMerge  s>    


""r   )JZ	fontToolsr   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.ttLib.tablesr   ZfontTools.merge.baser   r   ZfontTools.merge.utillogging	getLoggerrR   r   r   r'   r/   r7   r:   rT   ZmergeMapZBaseScriptListsumrU   r	   r[   minrD   ZsumDictsClassDefZLigCaretListZ
AttachListequalr   ZAxisZBaseTagListmaxrG   rH   rI   rJ   rK   rL   ZonlyExistingZgetTableClassr\   rW   ZMultipleSubstZAlternateSubstZLigatureSubstZReverseChainSingleSubstZ	SinglePosZPairPosZ
CursivePosZMarkBasePosZ
MarkLigPosZMarkMarkPosrc   ZContextSubstZChainContextSubstZ
ContextPosZChainContextPosr}   ZExtensionSubstZExtensionPosrB   r   r   r1   r-   r   r5   r   r   r   r   r   r   <module>   s   

















:

(










