a
    Df/                     @   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   f/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/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&   gZadvanceZlsbr   r   r   r%   a   s    ZVMTXVOriginRecordsc                 C   s    |D ]}|  || ||< qd S r	   r'   )r!   r"   r#   r)   r(   r   r   r   r%   j   s    glyfglyphsc              	   C   s   |  D ]}dD ]*}t||d }|d urt||| | q| rn|jD ] }| |j|_| |j|_qJq| r|jD ].}dD ]$}t|j	|}t|j	|| | qq|qt
|dr|j}t|D ]$\}\}	}
| |	| |
f||< qq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,   ir0   r1   r   r   r   r%   p   s(    


Zgvar
variationsc                 C   s  | j d }| D ]\}}|| }| }|D ]}	|	j}
|s~t|
D ]2\}}|d u 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sJ t|t
|
D ].}|
| }| |d | |d f|
|< qq0qd S )Nr*   r         )fontitemsr2   r,   r5   r   r/   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#   r8   Z	glyfTableZ	glyphNameZvarlistZglyphr2   varr,   r7   xyr6   r   r   r   r%      sX    

"
 


 
kern
kernTablesc                 C   s4   |D ]*}|j }| D ]}| || ||< qqd S r	   )	kernTablekeysr   )r!   r"   r#   rD   tablerE   kr   r   r   r%      s    c                 C   sT   t |D ]F\}}t|ts4t|tsN| |||< q|d }t| | ||d< qd S )N)r5   
isinstancelistbytesr   
_cff_scale)r!   argsr7   argZ
num_blendsr   r   r   rM      s    


rM   zCFF ZCFF2cffc              	   C   s  |   |jd }t|dd }|d ur,|jnd }t }| D ]F}|| }	|	j}
|	jD ]d}|
|\}}|	|j
 tj|j|d}|D ]\}}|dkrqt| | qt||jd d < qXdD ]B}t||d }|d u rqt|trt| | qt||| | qtdD ]}|j|  | j  < q|D ]V}dD ]J}t||d }|d u 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.   rQ   setrF   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsprogramrM   ZcommandsToProgramrJ   rK   r    r   r@   Z
FontMatrixr
   )r!   r"   r#   rP   ZtopDictZvarStorerQ   ZprivatesZfontnamer;   csr(   c_commandsoprN   r$   r7   rV   r   r   r   r%      sH    



c                 C   s8   |j D ]$}t|D ]\}}| |||< qq|  d S r	   )ZItemr5   r   ZcalculateNumShorts)r!   ZvarDataitemr7   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populateDefaultsrB   ZyxZdxZdyxxyyZPaintTransformZ	Transform)paintr   r3   r   r   r   _setup_scale_paint(  s    

rg   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)Paintra   rg   r
   )r!   recordZoldPaintr   r   r   r   r%   7  s    c                 C   s`   |j tjjkrdS t }|j |_ |j|_|j|_|`|`t|d| j  ||_| |j dS )NTr9   F)	rc   ra   rb   Z
PaintGlyphrh   ZGlyphrg   r
   r%   )r!   rf   ZnewPaintr   r   r   r%   D  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   X  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r|jn||j
ddd}	t|| td|	  ||	 dS )z Change the units-per-EM of fontsNr   r9   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionr;   z
Font file.)metavarhelprj   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)rn   defaultro   Tz-scaled)Z	overWritesuffixz
Writing %s)sysargvfontTools.ttLibrk   ZfontTools.misc.cliToolsrl   argparseArgumentParseradd_argument
parse_argsr;   intrj   output_filer   printsave)
rN   rs   rk   rl   rv   parseroptionsr;   rj   r{   r   r   r   main_  s4    



r   __main__)N)-__doc__ZfontTools.ttLib.ttVisitorr   ru   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesra   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrW   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_attrrM   registerZVarDatarg   ZBaseGlyphPaintRecordrh   r   r   r   rs   exitr   r   r   r   <module>   s   A




6

E







'
