B
    0uf2'  ã               @   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
   ú[/home/ankuromar296_gmail_com/myenv/lib/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Ú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 )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$   ÚgÚ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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   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*   r2   r0   r   )	r   r    r!   r4   ZvarlistÚvarr2   r3   Úxyr
   r
   r   r#   ƒ   s    
ÚkernÚ
kernTablesc             C   s<   x6|D ].}|j }x"| ¡ D ]}|  || ¡||< qW qW d S )N)Ú	kernTableÚkeysr   )r   r    r!   r9   Útabler:   Ú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éÿÿÿÿ)r0   Ú
isinstanceÚlistÚbytesr   Ú
_cff_scale)r   Úargsr3   ÚargZ
num_blendsr
   r
   r   rB   –   s    


rB   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.   rF   Úsetr;   ZCharStringsÚcharsetZgetItemAndSelectorÚaddÚprivateÚcffSpecializerZprogramToCommandsÚprogramrB   ZcommandsToProgramr?   r@   r   r   ÚrangeZ
FontMatrixr   )r   r    r!   rE   ZtopDictZvarStorerF   ZprivatesZfontnamer/   Úcsr%   ÚcÚ_ÚcommandsÚoprC   r"   r3   rK   r
   r
   r   r#   ¡   sF    



c             C   s@   x2|j D ](}x"t|ƒD ]\}}|  |¡||< qW qW | ¡  d S )N)ZItemr0   r   ZcalculateNumShorts)r   ZvarDataÚitemr3   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populateDefaultsr7   ZyxZdxZdyZxxÚyyZPaintTransformZ	Transform)Úpaintr   Z	transformr
   r
   r   Ú_setup_scale_paintò   s    

r\   c             C   s*   |j }t  ¡ }t|| jƒ ||_ ||_ dS )NT)ÚPaintrW   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 )NTr5   F)	rY   rW   rX   Z
PaintGlyphr]   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#   )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   r5   )ÚTTFont)ÚmakeOutputFileNamezfonttools ttLib.scaleUpem)Údescriptionr/   z
Font file.)ÚmetavarÚhelpr_   znew-upemzNew units-per-EM integer value.z--output-fileÚpathzOutput file.)rc   Údefaultrd   Tz-scaled)Z	overWriteÚsuffixz
Writing %s)ÚsysÚargvÚfontTools.ttLibr`   ZfontTools.misc.cliToolsra   ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr/   Úintr_   Úoutput_filer   ÚprintÚsave)
rC   rh   r`   ra   rk   ÚparserÚoptionsr/   r_   rp   r
   r
   r   Úmain)  s*    




ru   Ú__main__)N)+Ú__doc__ZfontTools.ttLib.ttVisitorr   rj   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrW   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrL   ZfontTools.varLibr   ZfontTools.misc.fixedToolsr   Ú__all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr#   Zregister_attrrB   ÚregisterZVarDatar\   ZBaseGlyphPaintRecordr]   r   ru   r   rh   Úexitr
   r
   r
   r   Ú<module>   sZ     E
'
