B
    Sc2'  ã               @   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
   ú8lib/python3.7/site-packages/fontTools/ttLib/scaleUpem.pyÚ__init__   s    zScalerVisitor.__init__c             C   s   t || j ƒS )N)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 )N)Úsetattrr   )ÚvisitorÚobjÚattrÚvaluer
   r
   r   Úvisit   s    Br!   ZhmtxZvmtxÚmetricsc             C   s6   x0|D ](}|| \}}|   |¡|   |¡f||< qW d S )N)r   )r   r   r   r"   ÚgZadvanceZlsbr
   r
   r   r!   a   s    
ZVMTXÚVOriginRecordsc             C   s$   x|D ]}|   || ¡||< qW d S )N)r   )r   r   r   r$   r#   r
   r
   r   r!   j   s    
ÚglyfÚglyphsc             C   sÊ   xÄ|  ¡ D ]¸}| ¡ rDx`|jD ] }|  |j¡|_|  |j¡|_qW n4x2dD ]*}t||d ƒ}|d k	rJt|||  |¡ƒ qJW | jd }| 	|¡d }x0t
|ƒD ]$\}	\}
}|  |
¡|  |¡f||	< qšW q
W d S )N)r   r   r   r   r%   r   )ÚvaluesZisCompositeZ
componentsr   ÚxÚyÚgetattrr   ÚfontZgetCoordinatesÚ	enumerate)r   r   r   r&   r#   Z	componentr   r%   ÚcoordinatesÚir(   r)   r
   r
   r   r!   p   s    

ZgvarÚ
variationsc       	      C   sj   xd|  ¡ D ]X}xR|D ]J}|j}x>t|ƒD ]2\}}|d kr:q(|  |d ¡|  |d ¡f||< q(W qW q
W d S )Nr   é   )r'   r-   r,   r   )	r   r   r   r/   ZvarlistÚvarr-   r.   Úxyr
   r
   r   r!   ƒ   s    
ZkernÚ
kernTablesc             C   s<   x6|D ].}|j }x"| ¡ D ]}|  || ¡||< qW qW d S )N)Ú	kernTableÚkeysr   )r   r   r   r3   Útabler4   Úkr
   r
   r   r!   Ž   s    
c             C   sX   xRt |ƒD ]F\}}t|tƒs6t|tƒsP|  |¡||< q
|d }t| |ƒ ||d< q
W d S )Néÿÿÿÿ)r,   Ú
isinstanceÚlistÚbytesr   Ú
_cff_scale)r   Úargsr.   ÚargZ
num_blendsr
   r
   r   r<   –   s    


r<   zCFF ZCFF2Úcffc          	   C   s   |  ¡  |jd }t|dd ƒ}|d k	r,|jnd }tƒ }xb| ¡ D ]T}|| }	|	j}
xh|	jD ]^}|
 |¡\}}| 	|j
¡ tj|j|d}x|D ]\}}t| |ƒ q’W t |¡|jd d …< q^W xJdD ]B}t||d ƒ}|d kràqÆt|tƒröt| |ƒ qÆt|||  |¡ƒ qÆW x&tdƒD ]}|j|  | j  < qW xb|D ]Z}xRdD ]J}t||d ƒ}|d krbqDt|tƒrzt| |ƒ nt|||  |¡ƒ qDW q:W qBW d S )Nr   ZVarStore)ÚgetNumRegions)ZUnderlinePositionZUnderlineThicknessZFontBBoxZStrokeWidthé   )
Z
BlueValuesZ
OtherBluesZFamilyBluesZFamilyOtherBluesZStdHWZStdVWZ	StemSnapHZ	StemSnapVZdefaultWidthXZnominalWidthX)ZdesubroutinizeZtopDictIndexr*   r@   Úsetr5   ZCharStringsÚcharsetZgetItemAndSelectorÚaddÚprivateÚcffSpecializerZprogramToCommandsZprogramr<   ZcommandsToProgramr9   r:   r   r   ÚrangeZ
FontMatrixr   )r   r   r   r?   ZtopDictZvarStorer@   ZprivatesZfontnamer+   Zcsr#   ÚcÚ_ZcommandsÚopr=   r    r.   rE   r
   r
   r   r!   ¡   sF    



c             C   s@   x2|j D ](}x"t|ƒD ]\}}|  |¡||< qW qW | ¡  d S )N)ZItemr,   r   ZcalculateNumShorts)r   ZvarDataÚitemr.   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populateDefaultsr2   ZyxZdxZdyZxxZyyZPaintTransformZ	Transform)Úpaintr   Z	transformr
   r
   r   Ú_setup_scale_paintò   s    

rR   c             C   s*   |j }t  ¡ }t|| jƒ ||_ ||_ dS )NT)ÚPaintrN   rR   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 )NTr0   F)	rP   rN   rO   Z
PaintGlyphrS   ZGlyphrR   r   r!   )r   rQ   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!   )r+   Únew_upemZupemr   r
   r
   r   r   "  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   r0   )ÚTTFont)ÚmakeOutputFileNamezfonttools ttLib.scaleUpem)Zdescriptionr+   z
Font file.)ÚmetavarÚhelprU   znew-upemzNew units-per-EM integer value.z--output-fileÚpathzOutput file.)rX   ÚdefaultrY   Tz-scaled)Z	overWriteÚsuffixz
Writing %s)ÚsysÚargvÚfontTools.ttLibrV   ZfontTools.misc.cliToolsrW   ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr+   ÚintrU   Úoutput_filer   ÚprintZsave)
r=   r]   rV   rW   r`   ÚparserZoptionsr+   rU   re   r
   r
   r   Úmain)  s*    




rh   Ú__main__)N)+Ú__doc__ZfontTools.ttLib.ttVisitorr   r_   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrN   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrF   ZfontTools.varLibr   ZfontTools.misc.fixedToolsr   Ú__all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr!   Zregister_attrr<   ÚregisterZVarDatarR   ZBaseGlyphPaintRecordrS   r   rh   r   r]   Úexitr
   r
   r
   r   Ú<module>   sZ     E
'
