B
    Scx!                 @   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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 d+ed,_eed,d-d Zd.d ed/_d0d ed1_d2d ed3_d4d ed5_eed6d7d Zeed8d9d ZdS ):    )ttLibcffLib)DefaultTable)
add_methodmergeObjects)computeMegaCmap)*NzfontTools.merge)r   tableTagtableVersion	numGlyphsZ
maxStorageZmaxFunctionDefsZmaxInstructionDefsZmaxp   c             C   s   dS )Nr    )bitr   r   5lib/python3.7/site-packages/fontTools/merge/tables.py<lambda>#       r   c             C   s   dS )Nr   r   )r   r   r   r   r   '   r   )sizer                              c             C   s   dS )Nr   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
unitsPerEmZcreatedZ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 )Nr   r   )r   r   r   r   r   c   r   )r   r   r   r   r      	   c             C   s   t | } tdd | D rdS xdtt| D ]T}| | d@ rN| |  dM  < q,| | d@ rl| |  dO  < q,| | dkr,d| |< q,W tt| }|d@ r|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    r5   )r   r	   versionZxAvgCharWidthr4   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   merger6   r4   )selfmtablesr   r   r   r8      s    


r8   c             C   s   dS )Nr   r   )r   r   r   r   r      r   c             C   s   dS )Nr   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   sV   xFt |D ]:\}}x0|j D ]"}|r.|  | r|| qW q
W t| ||S )N)	enumerater?   valuesZremoveHintingZisCompositeexpandr   r8   )r9   r:   r;   r3   tablegr   r   r   r8      s    c             C   s   t |S )N)first)r9   r   r   r   r   r      r   Zprepc             C   s   t |S )N)rF   )r9   r   r   r   r   r      r   Zfpgmc             C   s   t |S )N)rF   )r9   r   r   r   r   r      r   zcvt c             C   s   t |S )N)rF   )r9   r   r   r   r   r      r   ZgaspzCFF c             C   s  t dd |D rtdx|D ]}|j  q W |d }|jd }|j}g }g }t| }	x.|jjD ]"}
|
|	kr||
 qh||
 qhW t	|j
}|j}tdt| xt|dd  ddD ]\}}|jd }||_t| }x"|jjD ]}
|
|kr||
 qW |j}|jj}td|t| ||j
 |jrzx8t|jt|dD ]"\}}
||j|
< |jjd  qTW x|jD ]}
||
 ||
< qW qW ||_
t||_|| |j_|S )	Nc             s   s   | ]}t |d V  qdS )ZFDSelectN)hasattr)r'   rD   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getGlyphOrderZstringsappendr-   charsetZCharStringslogdebugr0   rA   ZGlobalSubrsextendZcharStringsAreIndexedZcharStringsZcharStringsIndexitemsr   )r9   r:   r;   rD   ZnewcffZnewfontZprivateZstoredNamesStringsZglyphOrderStringsr@   r>   ZchrsetZnewcsr3   ZfontZfontGlyphOrderZcsZgsr   r   r   r8      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 )
NrR   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   r,   r   )rG   r   rR   rQ   r;   r   ZgetTableModuler0   Zcmap_classesZ
platformIDZ	platEncIDZlanguagerL   insertr
   ZnumSubTables)r9   r:   r;   rR   ZcmapBmpOnlymoduleZ	cmapTabler   r   r   r8     s,    


)!Z	fontToolsr   r   Z#fontTools.ttLib.tables.DefaultTabler   ZfontTools.merge.baser   r   ZfontTools.merge.cmapr   ZfontTools.merge.utilZloggingZ	getLoggerrN   maxZequalsumrF   ZgetTableClassZmergeMapZ
bitwise_orZbitwise_andZheadFlagsMergeBitMapr1   Zcurrent_timeminZrecalculater2   r5   ZonlyExistingr8   ZsumDictsZsumListsr   r   r   r   <module>   s  
4