o
    h>                     @   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   j/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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      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>5   s    z!mergeLangSyses.<locals>.<genexpr>r+   c                 S   r   r   )FeatureIndexr   r   r   r   r   ;   r   z"mergeLangSyses.<locals>.<listcomp>)	allr   LangSysLookupOrderr,   r)   r.   r   FeatureCountr   r   r   r   mergeLangSyses1   s   r3   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   V   r   z mergeScripts.<locals>.<listcomp>)r   LangSysRecord
LangSysTagr    r0   r!   itemsr   r3   ScriptLangSysCountr5   )	r   	langSysessrlsr	lsrecordsr&   langSys_listr   dfltLangSysesr   r   r   mergeScriptsA   s2   





rB   c                 C   r   r   )	ScriptTagr    r:   r!   r"   r   ScriptRecordrB   )r   r$   r   r6   r&   r'   r(   r   r   r   mergeScriptRecords^   r*   rE   c                 C      d S r   r   r
   r   r   r   <lambda>p       rG   )ScriptCountrD   c                 C   rF   r   r   r
   r   r   r   rG   t   rH   c                 C      t t| dd dS )Nc                 S      | j S r   )BaseScriptTagr6   r   r   r   rG   w       <lambda>.<locals>.<lambda>keyr!   r	   r
   r   r   r   rG   v   s    )BaseScriptCountBaseScriptRecordc                 C   rJ   )Nc                 S   rK   r   r   rM   r   r   r   rG   }   rN   rO   rP   rR   r
   r   r   r   rG   }       )r2   r#   )r   Lookup)Formatglyphs)rX   	classDefs)CoverageLigGlyphCountLigGlyph)r[   
GlyphCountAttachPoint)MarkSetTableFormatMarkSetCountr[   r   )BaseTagCountBaselineTag)r   Version)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?: %s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 )loclrU   )r   vr   r   r   r      s    r4   r   rn   c                 S   rK   r   rU   )ro   r   r   r   rG      rN   zmerge.<locals>.<lambda>rP   )&r   duplicateGlyphsPerFont	enumeratezipNotImplementedlogwarningfonts_merger__namerf   
ScriptListrD   rC   r:   r5   r7   r.   r   r#   r   r   r   r   r   FeatureListr    r2   sortSingleSubstmappingrW   
LookupFlag
LookupTypeSubTableCountSubTable
LookupListr   merge)r   mtablesirf   dupssynthFeaturesynthLookupscriptlangsysfeaturer%   subtabler   r   r   r      sv   




0r   c                 C   rF   r   r   r   	lookupMapr   r   r   
mapLookups  s   r   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 )NSubstSubPosChain LookupRecordr4   RuleRuleSet   	ClassRuleClassSet)
__name__endswith
startswithTypTyper   ChainTypr   r   r   )r   klassrX   r   r   r   r   r   r   r   __init__  s*   


z8__merge_classify_context.<locals>.ContextHelper.__init__N)r   
__module____qualname__r   r   r   r   r   ContextHelper  s    r   )r4   r      _merge__ContextHelpers)objectrX   hasattr	__class__r   )r   r   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)r4   r   r   r   unknown format: %s)r   rX   getattrr   r   r   r   )r   r   crsrllr   r   r   r   B  s,   


c                 C   s(   | j dkr| j| d S J d| j  )Nr4   r   r   )rX   ExtSubTabler   r   r   r   r   r   _  s   
c                 C       | j D ]
}|sq|| qd S r   )r   r   )r   r   str   r   r   r   g  
   
c                 C   r   r   )rW   r   )r   r   r   r   r   r   r   o  r   c                 C   s   | j d@ r|| j | _d S d S )N   )r}   MarkFilteringSet)r   markFilteringSetMapr   r   r   mapMarkFilteringSetsw  s   
r   c                 C   r   r   )rW   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   r   r   r   r   r     rV   zmapLookups.<locals>.<listcomp>r   r   r   r   r   r     s   c                 C   (   | j D ]}|r
|jsq|j| qd S r   )r#   r   r   )r   r   r%   r   r   r   r     
   

c                    s4    fdd| j D | _ | jdkr | j | _d S d S )Nc                    r   r   r   r   
featureMapr   r   r     rV   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   )r5   r   r7   r0   )r   r   r   r   r   r   r     s   

c                 C   r   r   )rD   r:   r   )r   r   r6   r   r   r   r     r   c                 C   s   |  d}|  d}|  d}||fD ]]}|sq|jjrUdd t|jjjD }|jj| |jj| |rU|jjdkrU|jjrUdd t|jjj	D }|jj
| |jjrp|jjrpdd t|jjjD }|jj| qd S )	Nrg   rh   ri   c                 S      i | ]\}}||qS r   r   r   r   ro   r   r   r   
<dictcomp>      z"layoutPreMerge.<locals>.<dictcomp>  c                 S   r   r   r   r   r   r   r   r     s    
c                 S   r   r   r   r   r   r   r   r     r   )getrf   r   rq   rW   r   ry   rd   MarkGlyphSetsDefr[   r   rx   r#   r   )fontrg   rh   ri   tr   r   r   r   r   r   layoutPreMerge  s0   


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 )Nrg   rh   ri   c                       g | ]
\}}| v r|qS r   r   )r   r   r%   usedIndicesr   r   r     s
    z#layoutPostMerge.<locals>.<listcomp>c                    r   r   r   )r   r   r   r   r   r   r     s    r   )r   rf   ry   rx   GregariousIdentityDictr#   r   AttendanceRecordingIdentityDictr6   rq   NonhashableDictr   r2   r   rW   r   r   rd   r   r[   r   )r   rg   rh   ri   r   r   r   r   r   r   r   layoutPostMerge  sT   




r   )J	fontToolsr   #fontTools.ttLib.tables.DefaultTabler   fontTools.ttLib.tablesr   fontTools.merge.baser   r   fontTools.merge.utillogging	getLoggerrt   r   r   r)   r3   rB   rE   rx   mergeMapBaseScriptListsumry   r	   r   minr[   sumDictsClassDefLigCaretList
AttachListequalr   AxisBaseTagListmaxrg   rh   ri   rj   rk   rl   onlyExistinggetTableClassr   r{   MultipleSubstAlternateSubstLigatureSubstReverseChainSingleSubst	SinglePosPairPos
CursivePosMarkBasePos
MarkLigPosMarkMarkPosr   ContextSubstChainContextSubst
ContextPosChainContextPosr   ExtensionSubstExtensionPosrW   r   r   r5   r0   r   r:   r   r   r   r   r   r   <module>   s   


	










C

'









	
!