U
    Dvf/                     @   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   =/tmp/pip-unpacked-wheel-qlge9rch/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 k	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 k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st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AssertionError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#   rE   tablerF   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   rN      s    


rN   zCFF ZCFF2cffc              	   C   s  |   |jd }t|dd }|d k	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 krqt|trt| | qt||| | qtdD ]}|j|  | j  < q|D ]V}dD ]J}t||d }|d k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.   rR   setrG   ZCharStringscharsetZgetItemAndSelectoraddprivatecffSpecializerZprogramToCommandsprogramrN   ZcommandsToProgramrK   rL   r    r   rA   Z
FontMatrixr
   )r!   r"   r#   rQ   ZtopDictZvarStorerR   ZprivatesZfontnamer;   csr(   c_commandsoprO   r$   r7   rW   r   r   r   r%      sJ    

 

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populateDefaultsrC   ZyxZdxZdyZxxyyZPaintTransformZ	Transform)paintr   r3   r   r   r   _setup_scale_paint(  s    

rg   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)Paintrb   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)	rd   rb   rc   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k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k	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)
rO   rs   rk   rl   rv   parseroptionsr;   rj   r{   r   r   r   main_  s@          



r   __main__)N)-__doc__ZfontTools.ttLib.ttVisitorr   ru   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrb   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrX   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_attrrN   registerZVarDatarg   ZBaseGlyphPaintRecordrh   r   r   r   rs   exitr   r   r   r   <module>   s   A
 



6
 
E







'
