o
    teL1                     @   sd  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r0ddl+Z+e+,e)  dS 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   ID:\Projects\ConvertPro\env\Lib\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 ]r}dD ]}t||d }|d urt||| | q| r7|jD ]}| |j|_| |j|_q%q| rW|jD ]}dD ]}t|j	|}t|j	|| | qBq>qt
|drv|j}t|D ]\}\}	}
| |	| |
f||< qcq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   s0   


Zgvar
variationsc                 C   s  | j d }| D ]\}}|| }| }|D ]}	|	j}
|s=t|
D ]\}}|d u r+q"| |d | |d f|
|< q"qd}|jD ]u}|jtj	@ rQ|t
|j7 }|jtjtjB @ rr|
| }| |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 @ r|d7 }|jtjtjB @ r|
| }| |d | |d f|
|< |d7 }qB|d t
|
ksJ t|t
|
D ]}|
| }| |d | |d f|
|< qqq	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range)r!   r"   r#   r9   Z	glyfTableZ	glyphNameZvarlistZglyphr3   varr-   r8   xyr7   r   r   r   r%      s`   
"
 


 "kern
kernTablesc                 C   s4   |D ]}|j }| D ]}| || ||< qqd S r	   )	kernTablekeysr   )r!   r"   r#   rE   tablerF   kr   r   r   r%      s   c                 C   sT   t |D ]#\}}t|tst|ts| |||< q|d }t| | ||d< qd S )N)r6   
isinstancelistbytesr   
_cff_scale)r!   argsr8   argZ
num_blendsr   r   r   rN      s   



rN   zCFF ZCFF2cffc              	   C   s~  |   |jd }t|dd }|d ur|jnd }t }| D ]}|| }	|	j}
|	jD ]2}|
|\}}|	|j
 tj|j|d}|D ]\}}|dkrMqDt| | qDt||jd d < q+dD ]!}t||d }|d u rmq`t|trxt| | q`t||| | q`tdD ]}|j|  | j  < q|D ]&}dD ]!}t||d }|d u rqt|trt| | qt||| | qqq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/   rR   setrG   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsprogramrN   ZcommandsToProgramrK   rL   r    r   rA   Z
FontMatrixr
   )r!   r"   r#   rQ   ZtopDictZvarStorerR   ZprivatesZfontnamer<   csr(   c_commandsoprO   r$   r8   rW   r   r   r   r%      sN   



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populateDefaultsrC   ZyxZdxZdyxxyyZPaintTransformZ	Transform)paintr   r4   r   r   r   _setup_scale_paint*  s   


rh   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)Paintrb   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)	rd   rb   rc   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u 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urV|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)
rO   rt   rl   rm   rw   parseroptionsr<   rk   r|   r   r   r   maina  s4   




r   __main__r	   )-__doc__ZfontTools.ttLib.ttVisitorr   rv   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrb   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrX   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_attrrN   registerZVarDatarh   ZBaseGlyphPaintRecordri   r   r   r   rt   exitr   r   r   r   <module>   s    
A



7


E







'