o
    e/                     @   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   H/var/www/myenv/lib/python3.10/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)underlinePositionunderlineThicknessVORGdefaultVertOriginYhhea)ascentdescentlineGapadvanceWidthMaxminLeftSideBearingminRightSideBearing
xMaxExtentcaretOffsetvhea)r    r!   r"   advanceHeightMaxminTopSideBearingminBottomSideBearing
yMaxExtentr'   zOS/2)xAvgCharWidthySubscriptXSizeySubscriptYSizeySubscriptXOffsetySubscriptYOffsetySuperscriptXSizeySuperscriptYSizeySuperscriptXOffsetySuperscriptYOffsetyStrikeoutSizeyStrikeoutPositionsTypoAscendersTypoDescendersTypoLineGapusWinAscentusWinDescentsxHeight
sCapHeight)XAdvanceYAdvance
XPlacement
YPlacement)XCoordinateYCoordinate
CoordinateValue)r   r   r   r   c                 C   s   t ||| | d S r	   )setattrr   )visitorobjattrvaluer   r   r   visit   s   BrL   hmtxvmtxmetricsc                 C   s2   |D ]}|| \}}|  ||  |f||< qd S r	   r   )rH   rI   rJ   rO   gadvancelsbr   r   r   rL   b   s   VMTXVOriginRecordsc                 C   s    |D ]}|  || ||< qd S r	   rP   )rH   rI   rJ   rU   rQ   r   r   r   rL   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   )
translateX
translateYtCenterXtCenterYcoordinates)valuesgetattrrG   r   isComposite
componentsxyisVarComposite	transformhasattrr\   	enumerate)rH   rI   rJ   rW   rQ   r   	componentr\   ira   rb   r   r   r   rL   q   s0   


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 )NrV   r         )fontitemsrc   r\   rf   r   r`   flagsr   AXES_HAVE_VARIATIONlenlocationHAVE_TRANSLATE_XHAVE_TRANSLATE_YHAVE_ROTATIONHAVE_SCALE_XHAVE_SCALE_YHAVE_SKEW_XHAVE_SKEW_YHAVE_TCENTER_XHAVE_TCENTER_Yrange)rH   rI   rJ   rj   	glyfTable	glyphNamevarlistglyphrc   varr\   rh   xyrg   r   r   r   rL      s`   
"
 


 "kern
kernTablesc                 C   s4   |D ]}|j }| D ]}| || ||< qqd S r	   )	kernTablekeysr   )rH   rI   rJ   r   tabler   kr   r   r   rL      s   c                 C   sT   t |D ]#\}}t|tst|ts| |||< q|d }t| | ||d< qd S )N)rf   
isinstancelistbytesr   
_cff_scale)rH   argsrh   arg
num_blendsr   r   r   r      s   



r   zCFF 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   VarStore)getNumRegionsvsindex)UnderlinePositionUnderlineThicknessFontBBoxStrokeWidth   )

BlueValues
OtherBluesFamilyBluesFamilyOtherBluesStdHWStdVW	StemSnapH	StemSnapVdefaultWidthXnominalWidthX)desubroutinizetopDictIndexr^   r   setr   CharStringscharsetgetItemAndSelectoraddprivatecffSpecializerprogramToCommandsprogramr   commandsToProgramr   r   rG   r   r|   
FontMatrixr
   )rH   rI   rJ   r   topDictvarStorer   privatesfontnamerm   csrQ   c_commandsopr   rK   rh   r   r   r   r   rL      sN   



c                 C   s8   |j D ]}t|D ]\}}| |||< q	q|  d S r	   )Itemrf   r   calculateNumShorts)rH   varDataitemrh   r   r   r   r   rL     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PaintFormatPaintScaleUniformFormatr   	Affine2x3populateDefaultsr   yxdxdyxxyyPaintTransform	Transform)paintr   rd   r   r   r   _setup_scale_paint)  s   


r   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)Paintr   r   r
   )rH   recordoldPaintr   r   r   r   rL   8  s   c                 C   s`   |j tjjkr	dS t }|j |_ |j|_|j|_|`|`t|d| j  ||_| |j dS )NTrk   F)	r   r   r   
PaintGlyphr   Glyphr   r
   rL   )rH   r   newPaintr   r   r   rL   E  s   c                 C   s$   | d j }t|| }||  dS )z1Change the units-per-EM of font to the new value.r   N)r   r   rL   )rm   new_upemupemrH   r   r   r   r   Y  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   rk   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionrm   z
Font file.)metavarhelpr   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)r   defaultr   Tz-scaled)	overWritesuffixz
Writing %s)sysargvfontTools.ttLibr   fontTools.misc.cliToolsr   argparseArgumentParseradd_argument
parse_argsrm   intr   output_filer   printsave)
r   r   r   r   r   parseroptionsrm   r   r   r   r   r   main`  s4   




r   __main__r	   )-__doc__fontTools.ttLib.ttVisitorr   r   ttLibfontTools.ttLib.tables.otBasetablesotBasefontTools.ttLib.tables.otTablesr   fontTools.cffLibr   fontTools.cffLib.specializercffLibspecializerr   fontTools.varLibr   fontTools.misc.fixedToolsr   fontTools.ttLib.tables._g_l_y_fr   __all__r   register_attrsgetTableClassValueRecordAnchor
CaretValue	BaseCoordMathValueRecordClipBoxrL   register_attrr   registerVarDatar   BaseGlyphPaintRecordr   r   r   r   r   exitr   r   r   r   <module>   s    
A



6


E


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