U
    »mœdÁ/  ã                   @   s`  d Z ddlmZ ddlmZ ddlm  m  mZ ddlm  m  m	Z	 ddl
mZ ddlm  mZ ddlmZ ddlmZ ddlmZ dd	gZG d
d	„ d	eƒZe e d¡dfe d¡dfe d¡dfe d¡dfe d¡dfe d¡dfe	jdfe	jdfe	jdfe	jdfe	jdfe	jdff¡dd„ ƒZ e !e d¡e d¡fd ¡d!d„ ƒZ e !e d"¡d#¡d$d„ ƒZ e !e d%¡d&¡d'd„ ƒZ e !e d(¡d)¡d*d„ ƒZ e !e d+¡d,¡d-d„ ƒZ d.d/„ Z"e !e d0¡e d1¡fd2¡d3d„ ƒZ e #e	j$¡d4d„ ƒZ d5d6„ Z%e #e	j&¡d7d„ ƒZ e #e	j'¡d8d„ ƒZ d9d„ Z(d=d:d;„Z)e*d<k�r\ddl+Z+e+ ,e)ƒ ¡ dS )>zsChange the units-per-EM of a font.

AAT and Graphite tables are not supported. CFF/CFF2 fonts
are de-subroutinized.é    )Ú	TTVisitorN)ÚVarStoreData)Úbuilder)ÚotRound)ÚVarComponentFlagsÚ
scale_upemÚScalerVisitorc                   @   s   e Zd Zdd„ Zdd„ ZdS )r   c                 C   s
   || _ d S ©N)ÚscaleFactor)Úselfr
   © r   úR/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/fontTools/ttLib/scaleUpem.pyÚ__init__   s    zScalerVisitor.__init__c                 C   s   t || j ƒS r	   )r   r
   )r   Úvr   r   r   Úscale   s    zScalerVisitor.scaleN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   Úhead)Ú
unitsPerEmÚxMinÚyMinÚxMaxÚyMaxÚpost)ZunderlinePositionZunderlineThicknessZVORGZdefaultVertOriginYZhhea)ÚascentÚdescentÚlineGapZadvanceWidthMaxZminLeftSideBearingZminRightSideBearingZ
xMaxExtentÚcaretOffsetZvhea)r   r   r   ZadvanceHeightMaxZminTopSideBearingZminBottomSideBearingZ
yMaxExtentr   zOS/2)ZxAvgCharWidthZySubscriptXSizeZySubscriptYSizeZySubscriptXOffsetZySubscriptYOffsetZySuperscriptXSizeZySuperscriptYSizeZySuperscriptXOffsetZySuperscriptYOffsetZyStrikeoutSizeZyStrikeoutPositionZsTypoAscenderZsTypoDescenderZsTypoLineGapZusWinAscentZusWinDescentZsxHeightZ
sCapHeight)ZXAdvanceZYAdvanceZ
XPlacementZ
YPlacement)ZXCoordinateZYCoordinateZ
CoordinateÚValue)r   r   r   r   c                 C   s   t |||  |¡ƒ d S r	   )Úsetattrr   )ÚvisitorÚobjÚattrÚvaluer   r   r   Úvisit   s    Br%   ZhmtxZvmtxÚmetricsc                 C   s2   |D ](}|| \}}|   |¡|   |¡f||< qd S r	   ©r   )r!   r"   r#   r&   ÚgÚadvanceZlsbr   r   r   r%   b   s    ZVMTXÚVOriginRecordsc                 C   s    |D ]}|   || ¡||< qd S r	   r'   )r!   r"   r#   r*   r(   r   r   r   r%   k   s    ÚglyfÚglyphsc              	   C   sò   |  ¡ D ]ä}dD ]*}t||d ƒ}|d k	rt|||  |¡ƒ q| ¡ rn|jD ] }|  |j¡|_|  |j¡|_qJq| ¡ r®|jD ].}dD ]$}t|j	|ƒ}t|j	||  |¡ƒ q„q|qt
|dƒr|j}t|ƒD ]$\}\}	}
|  |	¡|  |
¡f||< qÆqd S )N)r   r   r   r   )Z
translateXZ
translateYZtCenterXZtCenterYÚcoordinates)ÚvaluesÚgetattrr    r   ZisCompositeÚ
componentsÚxÚyÚisVarCompositeÚ	transformÚhasattrr-   Ú	enumerate)r!   r"   r#   r,   r(   r   Ú	componentr-   Úir1   r2   r   r   r   r%   q   s(    


ZgvarÚ
variationsc                 C   sÔ  | j d }| ¡ D �]º\}}|| }| ¡ }|D �]š}	|	j}
|s~t|
ƒD ]2\}}|d krZqH|  |d ¡|  |d ¡f|
|< qHq0d}|jD ]î}|jtj	@ r¦|t
|jƒ7 }|jtjtjB @ rè|
| }|  |d ¡|  |d ¡f|
|< |d7 }|jtj@ rü|d7 }|jtjtjB @ �r|d7 }|jtjtjB @ �r4|d7 }|jtjtjB @ rˆ|
| }|  |d ¡|  |d ¡f|
|< |d7 }qˆ|d t
|
ƒk�sŽt‚t|t
|
ƒƒD ].}|
| }|  |d ¡|  |d ¡f|
|< �qœq0qd S )Nr+   r   é   é   )ÚfontÚitemsr3   r-   r6   r   r0   Úflagsr   ZAXES_HAVE_VARIATIONÚlenÚlocationZHAVE_TRANSLATE_XZHAVE_TRANSLATE_YZHAVE_ROTATIONZHAVE_SCALE_XZHAVE_SCALE_YZHAVE_SKEW_XZHAVE_SKEW_YZHAVE_TCENTER_XZHAVE_TCENTER_YÚAssertionErrorÚrange)r!   r"   r#   r9   Z	glyfTableZ	glyphNameZvarlistZglyphr3   Úvarr-   r8   Úxyr7   r   r   r   r%   Œ   sX    

"
ÿÿ 
ÿ
ÿ
ÿ 
ÚkernÚ
kernTablesc                 C   s4   |D ]*}|j }| ¡ D ]}|  || ¡||< qqd S r	   )Ú	kernTableÚkeysr   )r!   r"   r#   rF   ÚtablerG   Úkr   r   r   r%   Ä   s    c                 C   sT   t |ƒD ]F\}}t|tƒs4t|tƒsN|  |¡||< q|d }t| |ƒ ||d< qd S )Néÿÿÿÿ)r6   Ú
isinstanceÚlistÚbytesr   Ú
_cff_scale)r!   Úargsr8   ÚargZ
num_blendsr   r   r   rO   Ì   s    


rO   zCFF ZCFF2Úcffc              	   C   sŒ  |  ¡  |jd }t|dd ƒ}|d k	r,|jnd }tƒ }| ¡ D �]F}|| }	|	j}
|	jD ]d}|
 |¡\}}| 	|j
¡ tj|j|d�}|D ]\}}|dkrœqŠt| |ƒ qŠt |¡|jd d …< qXdD ]B}t||d ƒ}|d krÜqÂt|tƒròt| |ƒ qÂt|||  |¡ƒ qÂtdƒD ]}|j|  | j  < �q|D ]V}dD ]J}t||d ƒ}|d k�rT�q6t|tƒ�rlt| |ƒ nt|||  |¡ƒ �q6�q.q>d S )Nr   ZVarStore)ÚgetNumRegionsZvsindex)ZUnderlinePositionZUnderlineThicknessZFontBBoxZStrokeWidthé   )
Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZStdHWZStdVWZ	StemSnapHZ	StemSnapVZdefaultWidthXZnominalWidthX)ZdesubroutinizeZtopDictIndexr/   rS   ÚsetrH   ZCharStringsÚcharsetZgetItemAndSelectorÚaddÚprivateÚcffSpecializerZprogramToCommandsÚprogramrO   ZcommandsToProgramrL   rM   r    r   rB   Z
FontMatrixr
   )r!   r"   r#   rR   ZtopDictZvarStorerS   ZprivatesZfontnamer<   Úcsr(   ÚcÚ_ÚcommandsÚoprP   r$   r8   rX   r   r   r   r%   ×   sJ    

 ÿ

c                 C   s8   |j D ]$}t|ƒD ]\}}|  |¡||< qq| ¡  d S r	   )ZItemr6   r   ZcalculateNumShorts)r!   ZvarDataÚitemr8   r   r   r   r   r%     s    
c                 C   st   d|  krdkr,n nt jj| _|| _d S t  ¡ }| ¡  d |_ |_ |_	|_
| |_|_t jj| _|| _d S )Néþÿÿÿé   r   )ÚotTablesÚPaintFormatZPaintScaleUniformÚFormatr   Z	Affine2x3ZpopulateDefaultsrD   ZyxZdxZdyZxxÚyyZPaintTransformZ	Transform)Úpaintr   r4   r   r   r   Ú_setup_scale_paint*  s    

rh   c                 C   s*   |j }t  ¡ }t|| jƒ ||_ ||_ dS )NT)ÚPaintrc   rh   r
   )r!   ÚrecordZoldPaintr   r   r   r   r%   9  s    c                 C   s`   |j tjjkrdS t ¡ }|j |_ |j|_|j|_|`|`t|d| j ƒ ||_|  |j¡ dS )NTr:   F)	re   rc   rd   Z
PaintGlyphri   ZGlyphrh   r
   r%   )r!   rg   ZnewPaintr   r   r   r%   F  s    c                 C   s$   | d j }t|| ƒ}| | ¡ dS )z1Change the units-per-EM of font to the new value.r   N)r   r   r%   )r<   Únew_upemZupemr!   r   r   r   r   Z  s    
c           
      C   sà   | dkrddl }|jdd… } ddlm} ddlm} ddl}|jdd d�}|jddd	d
� |jdddd
� |jddddd� | 	| ¡}||j
ƒ}t|jƒ}|jdk	r¬|jn||j
ddd�}	t||ƒ td|	 ƒ | |	¡ dS )z Change the units-per-EM of fontsNr   r:   )ÚTTFont)ÚmakeOutputFileNamezfonttools ttLib.scaleUpem)Údescriptionr<   z
Font file.)ÚmetavarÚhelprk   znew-upemzNew units-per-EM integer value.z--output-fileÚpathzOutput file.)ro   Údefaultrp   Tz-scaled)Z	overWriteÚsuffixz
Writing %s)ÚsysÚargvÚfontTools.ttLibrl   ZfontTools.misc.cliToolsrm   ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr<   Úintrk   Úoutput_filer   ÚprintÚsave)
rP   rt   rl   rm   rw   ÚparserÚoptionsr<   rk   r|   r   r   r   Úmaina  s@     ÿ  ÿ   ÿ


ÿý
r�   Ú__main__)N)-Ú__doc__ZfontTools.ttLib.ttVisitorr   rv   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrc   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrY   ZfontTools.varLibr   ZfontTools.misc.fixedToolsr   ZfontTools.ttLib.tables._g_l_y_fr   Ú__all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr%   Zregister_attrrO   ÚregisterZVarDatarh   ZBaseGlyphPaintRecordri   r   r�   r   rt   Úexitr   r   r   r   Ú<module>   s„   þþþþÃÿA
 ÿ



7
 ÿ
E







'
