o
    i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   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/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)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(   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hasattrr0   	enumerate)r$   r%   r&   r/   r+   r   	componentr0   ir4   r5   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itemsr0   r7   r   )r$   r%   r&   r:   Z	glyfTableZ	glyphNameZvarlistZglyphvarr0   r9   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   )rB   r   r   r   r   rD      s    r   r;   )(r<   ZaxesZMultiVarStorer   ZVarCompositeGlyphsZVarCompositeGlyphr3   	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   finish)r$   r%   r&   ZvarcrA   ZfvarAxesstoreZstoreBuilderr+   r8   tZvarIdxmajorminorvarDataZvecmrK   ZnewVecr   r9   r   r   r   r(      s   





Kkern
kernTablesc                 C   s4   |D ]}|j }| D ]}| || ||< qqd S r   )	kernTablekeysr   )r$   r%   r&   rU   r@   rV   kr   r   r   r(      s   c                 C   sT   t |D ]#\}}t|tst|ts| |||< q|d }t| | ||d< qd S )N)r7   
isinstancerJ   bytesr   
_cff_scale)r$   argsr9   argZ
num_blendsr   r   r   r\      s   



r\   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topDictIndexr2   r`   setrW   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsprogramr\   ZcommandsToProgramrZ   rJ   r#   r   rangeZ
FontMatrixr   )r$   r%   r&   r_   ZtopDictZvarStorer`   ZprivatesZfontnamer<   csr+   c_commandsopr]   r'   r9   re   r   r   r   r(      sN   



c                 C   s8   |j D ]}t|D ]\}}| |||< q	q|  d S r   )rH   r7   r   ZcalculateNumShorts)r$   rR   itemr9   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   )rG   PaintFormatZPaintScaleUniformFormatr   Z	Affine2x3ZpopulateDefaultsr?   ZyxZdxZdyxxyyZPaintTransformZ	Transform)paintr   rF   r   r   r   _setup_scale_paintS  s   


rv   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)PaintrG   rv   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 )NTr;   F)	rr   rG   rq   Z
PaintGlyphrw   ZGlyphrv   r   r(   )r$   ru   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(   )r<   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   r;   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionr<   z
Font file.)metavarhelpry   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)r}   defaultr~   Tz-scaled)Z	overWritesuffixz
Writing %s)sysargvfontTools.ttLibrz   ZfontTools.misc.cliToolsr{   argparseArgumentParseradd_argument
parse_argsr<   intry   output_filer
   printsave)
r]   r   rz   r{   r   parseroptionsr<   ry   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.otTablesrG   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrf   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_attrr\   registerZVarDatarv   ZBaseGlyphPaintRecordrw   r
   r   r   r   exitr   r   r   r   <module>   s    
A




X


E


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