U
    Dvf1)                     @   s  d dl mZmZ d dl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eeedd eeeeeeeeeeeedd eed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eeeeeeeeeeeeeeee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d!d ee!d"d d#
ed$_ee!d% ed&_ed'_eed(ed)_eed*ed+_ee!e"eed,ed-_eed-d.d Z d/d ed0_d1d ed2_d3d ed4_d5d ed6_eed7d8d Z eed9d:d Z dS );    )ttLibcffLib)T2WidthExtractor)DefaultTable)
add_methodmergeObjects)computeMegaCmap)*NzfontTools.merge)r	   tableTagtableVersion	numGlyphsZ
maxStorageZmaxFunctionDefsZmaxInstructionDefsZmaxp   c                 C   s   dS Nr    bitr   r   :/tmp/pip-unpacked-wheel-qlge9rch/fontTools/merge/tables.py<lambda>$       r   c                 C   s   dS r   r   r   r   r   r   r   (   r   )sizer	                              c                 C   s   dS r   r   lstr   r   r   r   /   r   c                 C   s   dS )Nr   r   r   r   r   r   r   ;   r   )r
   r   ZfontRevisionZcheckSumAdjustmentZmagicNumberflagsZ
unitsPerEmcreatedmodifiedZxMinZyMinZxMaxZyMaxZmacStyleZlowestRecPPEMZfontDirectionHintZ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   s   dS r   r   r   r   r   r   r   d   r   )r   r	   r   r   r      	   c                 C   s   t | } tdd | D rdS tt| D ]T}| | d@ rL| |  dM  < q*| | d@ rj| |  dO  < q*| | dkr*d| |< q*tt| }|d@ r|d	M }|S )
Nc                 s   s   | ]}|d kV  qdS )r   Nr   ).0itemr   r   r   	<genexpr>o   s     z!mergeOs2FsType.<locals>.<genexpr>r      r+      r   i)listallrangelen	mergeBitsos2FsTypeMergeBitMap)r    ifsTyper   r   r   mergeOs2FsTypem   s    
r;   )r	   r
   versionZxAvgCharWidthr:   ZpanoseZulUnicodeRange1ZulUnicodeRange2ZulUnicodeRange3ZulUnicodeRange4ZfsFirstCharIndexZfsLastCharIndexZsTypoAscenderZsTypoDescenderZsTypoLineGapZusWinAscentZusWinDescentZulCodePageRange1ZulCodePageRange2ZsxHeightZ
sCapHeightZusDefaultCharZusBreakCharZusMaxContextZusLowerOpticalPointSizeZusUpperOpticalPointSizezOS/2c                 C   sL   t | || | jdk r&|  jdM  _| jdkrH| jd@ rH|  jdM  _| S )Nr   ir   r+   )r   merger<   r:   )selfmtablesr   r   r   r>      s    


r>   c                 C   s   dS r   r   r   r   r   r   r      r   c                 C   s   dS 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
extraNamespost)r
   ZmetricsZvmtxZhmtx)r
   namesname)r	   r
   Zloca)r
   glyphs
glyphOrderZ_reverseGlyphOrderZaxisTagsZglyfc                 C   sV   t |D ]>\}}|j D ]*}|r*|  | s:| r|| qqt| ||S rB   )		enumeraterG   valuesZremoveHintingZisCompositeZisVarCompositeexpandr   r>   )r?   r@   rA   r9   tablegr   r   r   r>      s    c                 C   s   t |S rB   firstr?   r    r   r   r   r      r   prepc                 C   s   t |S rB   rN   rP   r   r   r   r      r   Zfpgmc                 C   s   t |S rB   rN   rP   r   r   r   r      r   zcvt c                 C   s   t |S rB   rN   rP   r   r   r   r      s   ZgaspzCFF c                 C   sF  t dd |D rtd|D ]}|j  q|d }|jd }|j}|j|j }}g }	g }
t| }|j	j	D ]"}||kr|	
| qp|

| qpt|j}|j}tdt| t|dd  ddD ]Z\}}|jd }|jj|jj }}||k p||k}||_t| }|j	j	D ]}||kr|

| q|j}|jj}td|t| ||j |jrt|jt|dD ]"\}}||j|< |jj
d  q||jD ]|}|r|| }t }tg g ||}|| |j}||k	r|jd n|}||kr|jd||  || ||< qq||_t||_|
|	 |j	_	|S )	Nc                 s   s   | ]}t |jd  dV  qdS )r   ZFDSelectN)hasattrcff)r-   rL   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NotImplementedErrorrS   ZdesubroutinizeZPrivatedefaultWidthXnominalWidthXsetZgetGlyphOrderstringsappendr3   charsetZCharStringslogdebugr6   rI   ZGlobalSubrsextendZcharStringsAreIndexedZcharStringsZcharStringsIndexitemsobjectr   executewidthprogrampopinsertr   )r?   r@   rA   rL   ZnewcffZnewfontprivateZnewDefaultWidthXZnewNominalWidthXZstoredNamesStringsZglyphOrderStringsrH   rF   ZchrsetZnewcsr9   fontrW   rX   ZwidthsDifferZfontGlyphOrdercsZgscZdefaultWidthXTokenZ	extractorrc   r   r   r   r>      sn    









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 )
Nrk   c                 S   s   i | ]\}}|d kr||qS )i  r   )r-   unigidr   r   r   
<dictcomp>>  s       zmerge.<locals>.<dictcomp>r0   r   
   r   r2   r   )rR   r   rk   r`   rA   r   ZgetTableModuler6   Zcmap_classesZ
platformIDZ	platEncIDlanguager[   rf   r   ZnumSubTables)r?   r@   rA   rk   ZcmapBmpOnlymoduleZ	cmapTabler   r   r   r>   7  s,    


)#Z	fontToolsr   r   ZfontTools.misc.psCharStringsr   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.merge.baser   r   ZfontTools.merge.cmapr   ZfontTools.merge.utillogging	getLoggerr]   maxequalsumrO   ZgetTableClassZmergeMapZ
bitwise_orZbitwise_andZheadFlagsMergeBitMapr7   current_timeminZrecalculater8   r;   ZonlyExistingr>   ZsumDictsZsumListsr   r   r   r   <module>   s,  
!
	

E