a
    w=ic2'                     @   sT  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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d/ed0fd1d2d Ze!e	j"d3d Zd4d5 Z#e!e	j$d6d Ze!e	j%d7d Zd8d Z&d<d9d:Z'e(d;krPd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
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   j/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/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%   g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 ]}| r>|jD ] }| |j|_| |j|_qn0dD ]*}t||d }|d urBt||| | qB| jd }|	|d }t
|D ]$\}	\}
}| |
| |f||	< qqd S )N)r   r   r   r   r*   r   )valuesZisComposite
componentsr   xygetattrr   fontZgetCoordinates	enumerate)r    r!   r"   r+   r'   	componentr   r*   coordinatesir.   r/   r   r   r   r$   p   s    

Zgvar
variationsc           	      C   s^   |  D ]P}|D ]F}|j}t|D ]2\}}|d u r4q"| |d | |d f||< q"qqd S )Nr      )r,   r4   r2   r   )	r    r!   r"   r6   Zvarlistvarr4   r5   xyr   r   r   r$      s    kern
kernTablesc                 C   s4   |D ]*}|j }| D ]}| || ||< qqd S r   )	kernTablekeysr   )r    r!   r"   r;   tabler<   kr   r   r   r$      s    c                 C   sT   t |D ]F\}}t|ts4t|tsN| |||< q|d }t| | ||d< qd S )N)r2   
isinstancelistbytesr   
_cff_scale)r    argsr5   argZ
num_blendsr   r   r   rD      s    


rD   zCFF ZCFF2cffc              	   C   s  |   |jd }t|dd }|d ur,|jnd }t }| D ]<}|| }	|	j}
|	jD ]Z}|
|\}}|	|j
 tj|j|d}|D ]\}}t| | 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 rJq,t|trbt| | nt||| | q,q$q>d S )Nr   ZVarStore)getNumRegions)ZUnderlinePositionZUnderlineThicknessZFontBBoxZStrokeWidth   )
Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZStdHWZStdVWZ	StemSnapHZ	StemSnapVZdefaultWidthXZnominalWidthX)ZdesubroutinizeZtopDictIndexr0   rH   setr=   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsprogramrD   ZcommandsToProgramrA   rB   r   r   rangeZ
FontMatrixr	   )r    r!   r"   rG   ZtopDictZvarStorerH   ZprivatesZfontnamer1   csr'   c_commandsoprE   r#   r5   rM   r   r   r   r$      sD    



c                 C   s8   |j D ]$}t|D ]\}}| |||< qq|  d S r   )Itemr2   r   ZcalculateNumShorts)r    ZvarDataitemr5   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populateDefaultsr9   ZyxZdxZdyxxyyZPaintTransformZ	Transform)paintr   Z	transformr   r   r   _setup_scale_paint   s    

r`   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)PaintrZ   r`   r	   )r    recordZoldPaintr   r   r   r   r$     s    c                 C   s`   |j tjjkrdS t }|j |_ |j|_|j|_|`|`t|d| j  ||_| |j dS )NTr7   F)	r\   rZ   r[   Z
PaintGlyphra   ZGlyphr`   r	   r$   )r    r_   ZnewPaintr   r   r   r$     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$   )r1   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r|jn||j
ddd}	t|| td|	  ||	 dS )z Change the units-per-EM of fontsNr   r7   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionr1   z
Font file.)metavarhelprc   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)rg   defaultrh   Tz-scaled)Z	overWritesuffixz
Writing %s)sysargvfontTools.ttLibrd   ZfontTools.misc.cliToolsre   argparseArgumentParseradd_argument
parse_argsr1   intrc   output_filer   printsave)
rE   rl   rd   re   ro   parseroptionsr1   rc   rt   r   r   r   main)  s4    



ry   __main__)N)+__doc__ZfontTools.ttLib.ttVisitorr   rn   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrZ   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrN   ZfontTools.varLibr   ZfontTools.misc.fixedToolsr   __all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr$   Zregister_attrrD   registerZVarDatar`   ZBaseGlyphPaintRecordra   r   ry   r   rl   exitr   r   r   r   <module>   s~   A







C







'
