o
    l^Uf9                     @   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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$e%ed0d1d2d Z$d3d4 Z&e%ed5ed6fd7d8d Z$e'e	j(d9d Z$d:d; Z)e'e	j*d<d Z$e'e	j+d=d Z$d>d
 Z,dBd?d@Z-e.dAkrIddl/Z/e/0e-  dS dS )CzsChange the units-per-EM of a font.

AAT and Graphite tables are not supported. CFF/CFF2 fonts
are de-subroutinized.    )	TTVisitorN)VarStoreData)builder)OnlineMultiVarStoreBuilderVector)otRound)batched
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   9lib/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yMaxZ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
CoordinateZ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&   c   s   ZVMTXVOriginRecordsc                 C   s    |D ]}|  || ||< qd S r   r(   )r"   r#   r$   r*   r)   r   r   r   r&   l   s   glyfglyphsc                 C   s   |  D ]R}dD ]}t||d }|d urt||| | q| r7|jD ]}| |j|_| |j|_q%qt|drV|j	}t
|D ]\}\}	}
| |	| |
f||< qCqd S )N)r   r   r   r   coordinates)valuesgetattrr!   r   ZisComposite
componentsxyhasattrr-   	enumerate)r"   r#   r$   r,   r)   r   	componentr-   ir1   r2   r   r   r   r&   r   s"   

Zgvar
variationsc                 C   st   | j d }| D ].\}}|| }|D ]#}|j}	t|	D ]\}
}|d u r%q| |d | |d f|	|
< qqq	d S )Nr+   r      )fontitemsr-   r4   r   )r"   r#   r$   r7   Z	glyfTableZ	glyphNameZvarlistZglyphvarr-   r6   xyr   r   r   r&      s   
"ZVARCtablec                 C   s  | j d }dd |jD }|j}t|}|jjD ]j}|jD ]c}	|	j}
| |
j	|
_	| |
j
|
_
| |
j|
_| |
j|
_|	jtjkr|	j}|tjkr|d? }|d@ }|j| }|j| }||||j |rt||j }tt||}dd |D }|||	_ntj|	_|	jtjkr|	j}|tjkr|d? }|d@ }|j|d@  }|d? }|d@ }|j| }|j| }||||j |r~t||j }|	j}tt||}g }|D ]}t|}d}|tjj@ r| || ||< |d7 }|tjj@ r| || ||< |d7 }|tjj@ r|d7 }|tjj@ r$|d7 }|tjj @ r/|d7 }|tjj!@ r:|d7 }|tjj"@ rE|d7 }|tjj#@ rY| || ||< |d7 }|tjj$@ rm| || ||< |d7 }|%t&| q|}|||	_qtj|	_qq|' |_d S )	Nfvarc                 S   s   g | ]}|j qS r   )ZaxisTag).0ar   r   r   
<listcomp>   s    zvisit.<locals>.<listcomp>   i  c                 S   s   g | ]}t |qS r   r   )r?   r   r   r   r   rA      s    r   r8   )(r9   ZaxesZMultiVarStorer   ZVarCompositeGlyphsZVarCompositeGlyphr0   	transformr   Z
translateXZ
translateYZtCenterXZtCenterYZaxisValuesVarIndexotTablesZNO_VARIATION_INDEXZMultiVarDataItemZsetSupportsZget_supportslenZVarRegionCountlistr	   ZstoreDeltasZtransformVarIndexflagsZVarComponentFlagsZ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appendr   Zfinish)r"   r#   r$   Zvarcr>   ZfvarAxesstoreZstoreBuilderr)   r5   tZvarIdxmajorminorvarDataZvecmrH   ZnewVecr   r6   r   r   r   r&      s   





KZkern
kernTablesc                 C   s4   |D ]}|j }| D ]}| || ||< qqd S r   )	kernTablekeysr   )r"   r#   r$   rP   r=   rQ   kr   r   r   r&      s   c                 C   sT   t |D ]#\}}t|tst|ts| |||< q|d }t| | ||d< qd S )N)r4   
isinstancerG   bytesr   
_cff_scale)r"   argsr6   argZ
num_blendsr   r   r   rW      s   



rW   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/   r[   setrR   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsZprogramrW   ZcommandsToProgramrU   rG   r!   r   rangeZ
FontMatrixr   )r"   r#   r$   rZ   ZtopDictZvarStorer[   ZprivatesZfontnamer9   csr)   c_ZcommandsoprX   r%   r6   r`   r   r   r   r&      sN   



c                 C   s8   |j D ]}t|D ]\}}| |||< q	q|  d S r   )rE   r4   r   ZcalculateNumShorts)r"   rN   itemr6   r   r   r   r   r&   H  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   )rD   PaintFormatZPaintScaleUniformFormatr   Z	Affine2x3ZpopulateDefaultsr<   ZyxZdxZdyZxxZyyZPaintTransformZ	Transform)paintr   rC   r   r   r   _setup_scale_paintS  s   


rm   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)PaintrD   rm   r   )r"   recordZoldPaintr   r   r   r   r&   b  s   c                 C   s`   |j tjjkr	dS t }|j |_ |j|_|j|_|`|`t|d| j  ||_| |j dS )NTr8   F)	rk   rD   rj   Z
PaintGlyphrn   ZGlyphrm   r   r&   )r"   rl   ZnewPaintr   r   r   r&   o  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&   )r9   new_upemZupemr"   r   r   r   r
     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   r8   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionr9   z
Font file.)metavarhelprp   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)rt   defaultru   Tz-scaled)Z	overWritesuffixz
Writing %s)sysargvfontTools.ttLibrq   ZfontTools.misc.cliToolsrr   argparseArgumentParseradd_argument
parse_argsr9   intrp   output_filer
   printZsave)
rX   ry   rq   rr   r|   parseroptionsr9   rp   r   r   r   r   main  s4   




r   __main__r   )1__doc__ZfontTools.ttLib.ttVisitorr   r{   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrD   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerra   ZfontTools.varLibr   ZfontTools.varLib.multiVarStorer   ZfontTools.misc.vectorr   ZfontTools.misc.fixedToolsr   ZfontTools.misc.iterToolsr	   __all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr&   Zregister_attrrW   registerZVarDatarm   ZBaseGlyphPaintRecordrn   r
   r   r   ry   exitr   r   r   r   <module>   s    
A




X


E


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