o
    ap!                     @   s^  d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
T d dlZedZeeeeeeeded	_d
eeeeedd eeedd dZi dedededdd dedeededededededededededd d d!ed"eied#_eeeeeeeeeeeeeed$ed%_eeeeeeeeeeeeeed&ed'_d
d(d eeeeed)Zd*d+ Zi d,eded-ed.ed/ed0ed1ed2ed3ed4ed5ed6ed7ed8ed9ed:ed;eeeeeeeeeeeeeeeeeeed<	ed=_eed=d>d? Zeeeeed@d edAd ee dBd dC
edD_ee dE edF_edG_eedHedI_eedJedK_ee e!dLedM_eedMdNd? ZdOd edP_dQd edR_dSd edT_dUd edV_eedWdXd? ZeedYdZd? ZdS )[    )ttLibcffLib)DefaultTable)
add_methodmergeObjects)computeMegaCmap)*NzfontTools.merge)r   tableTagtableVersion	numGlyphsZ
maxStorageZmaxFunctionDefsZmaxInstructionDefsZmaxp   c                 C      dS Nr    bitr   r   8/usr/lib/python3/dist-packages/fontTools/merge/tables.py<lambda>#       r   c                 C   r   r   r   r   r   r   r   r   '   r   )sizer                              r	   r
   ZfontRevisionZcheckSumAdjustmentc                 C   r   r   r   lstr   r   r   r   .   r   ZmagicNumberflagsZ
unitsPerEmZcreatedZmodifiedZxMinZyMinZxMaxZyMaxZmacStyleZlowestRecPPEMZfontDirectionHintc                 C   r   )Nr   r   r   r   r   r   r   :   r   ZindexToLocFormatZglyphDataFormathead)r   r	   r
   ascentdescentlineGapZadvanceWidthMaxZminLeftSideBearingZminRightSideBearingZ
xMaxExtentcaretSlopeRisecaretSlopeRuncaretOffsetZnumberOfHMetricsZhhea)r   r	   r
   r#   r$   r%   ZadvanceHeightMaxZminTopSideBearingZminBottomSideBearingZ
yMaxExtentr&   r'   r(   ZnumberOfVMetricsZvheac                 C   r   r   r   r   r   r   r   r   c   r   )r   r   r   r   r      	   c                 C   s   t | } tdd | D rdS tt| D ]*}| | d@ r&| |  dM  < q| | d@ r5| |  dO  < q| | dkr?d| |< qtt| }|d@ rN|d	M }|S )
Nc                 s   s    | ]}|d kV  qdS )r   Nr   ).0itemr   r   r   	<genexpr>m   s    z!mergeOs2FsType.<locals>.<genexpr>r      r)      r   i)listallrangelen	mergeBitsos2FsTypeMergeBitMap)r    ifsTyper   r   r   mergeOs2FsTypek   s   r9   r   versionZxAvgCharWidthr8   ZpanoseZulUnicodeRange1ZulUnicodeRange2ZulUnicodeRange3ZulUnicodeRange4ZfsFirstCharIndexZfsLastCharIndexZsTypoAscenderZsTypoDescenderZsTypoLineGapZusWinAscentZusWinDescent)	ZulCodePageRange1ZulCodePageRange2ZsxHeightZ
sCapHeightZusDefaultCharZusBreakCharZusMaxContextZusLowerOpticalPointSizeZusUpperOpticalPointSizezOS/2c                 C   sL   t | || | jdk r|  jdM  _| jdkr$| jd@ r$|  jdM  _| S )Nr   ir   r)   )r   merger:   r8   )selfmtablesr   r   r   r<      s   


r<   c                 C   r   r   r   r   r   r   r   r      r   c                 C   r   r   r   r   r   r   r   r      r   c                 C   s   g S Nr   r   r   r   r   r      r   )
r   r	   Z
formatTypeZisFixedPitchZminMemType42ZmaxMemType42ZminMemType1ZmaxMemType1mappingZ
extraNamesZpost)r	   ZmetricsZvmtxZhmtx)r	   namesname)r   r	   Zloca)r	   glyphs
glyphOrderZglyfc                 C   sN   t |D ]\}}|j D ]}|r|  | r|| qqt| ||S r@   )	enumeraterD   valuesZremoveHintingZisCompositeexpandr   r<   )r=   r>   r?   r7   tablegr   r   r   r<      s   
	c                 C      t |S r@   firstr=   r    r   r   r   r          Zprepc                 C   rK   r@   rL   rN   r   r   r   r      rO   Zfpgmc                 C   rK   r@   rL   rN   r   r   r   r      rO   zcvt c                 C   rK   r@   rL   rN   r   r   r   r      rO   ZgaspzCFF c                 C   s  t dd |D rtd|D ]}|j  q|d }|jd }|j}g }g }t| }	|jjD ]}
|
|	vr=||
 q1||
 q1t	|j
}|j}tdt| t|dd  ddD ]a\}}|jd }||_t| }|jjD ]}
|
|v r~||
 qs|j}|jj}td|t| ||j
 |jrt|jt|dD ]\}}
||j|
< |jjd  q|jD ]}
||
 ||
< qq]||_
t||_|| |j_|S )	Nc                 s   s    | ]}t |d V  qdS )ZFDSelectN)hasattr)r+   rI   r   r   r   r-      s    zmerge.<locals>.<genexpr>z1Merging CID-keyed CFF tables is not supported yetr   zFONT 0 CharStrings: %d.r   )startzFont %d CharStrings: %d.)anyNotImplementedErrorZcffZdesubroutinizeZPrivatesetZgetGlyphOrderstringsappendr1   charsetZCharStringslogdebugr4   rF   ZGlobalSubrsextendZcharStringsAreIndexedZcharStringsZcharStringsIndexitemsr   )r=   r>   r?   rI   ZnewcffZnewfontZprivateZstoredNamesStringsZglyphOrderStringsrE   rC   ZchrsetZnewcsr7   ZfontZfontGlyphOrdercsZgsr   r   r   r<      sT   






cmapc                 C   s   t |ds
t|| |j}dd | D }g | _td}t|t|kr?|jd d}d|_	d|_
d|_||_| j| |jd d}d|_	d	|_
d|_||_| jd| d| _t| j| _| S )
Nr]   c                 S   s   i | ]\}}|d kr||qS )i  r   )r+   Zunigidr   r   r   
<dictcomp>"  s    zmerge.<locals>.<dictcomp>r.   r   
   r   r0   r   )rP   r   r]   r[   r?   r   ZgetTableModuler4   Zcmap_classesZ
platformIDZ	platEncIDlanguagerV   insertr
   ZnumSubTables)r=   r>   r?   r]   ZcmapBmpOnlymoduleZ	cmapTabler   r   r   r<     s,   


)"Z	fontToolsr   r   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.merge.baser   r   ZfontTools.merge.cmapr   ZfontTools.merge.utilZloggingZ	getLoggerrX   maxZequalsumrM   ZgetTableClassZmergeMapZ
bitwise_orZbitwise_andZheadFlagsMergeBitMapr5   Zcurrent_timeminZrecalculater6   r9   Zavg_intZonlyExistingr<   ZsumDictsZsumListsr   r   r   r   <module>   sp  
	

	
 


3