U
    6¦¡c2'  ã                   @   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   ú=/tmp/pip-unpacked-wheel-n2hbwplv/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 ]¬}| ¡ r>|jD ] }|  |j¡|_|  |j¡|_qn0dD ]*}t||d ƒ}|d k	rBt|||  |¡ƒ qB| jd }| 	|¡d }t
|ƒD ]$\}	\}
}|  |
¡|  |¡f||	< qŽq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 kr4q"|  |d ¡|  |d ¡f||< q"qqd S )Nr   é   )r+   r3   r1   r   )	r    r!   r"   r5   ZvarlistÚvarr3   r4   Ú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éÿÿÿÿ)r1   Ú
isinstanceÚlistÚbytesr   Ú
_cff_scale)r    Úargsr4   ÚargZ
num_blendsr   r   r   rC   –   s    


rC   zCFF ZCFF2Úcffc              	   C   s‚  |  ¡  |jd }t|dd ƒ}|d k	r,|jnd }tƒ }| ¡ D ]<}|| }	|	j}
|	jD ]Z}|
 |¡\}}| 	|j
¡ tj|j|d}|D ]\}}t| |ƒ qŠt |¡|jd d …< qXdD ]B}t||d ƒ}|d krÒq¸t|tƒrèt| |ƒ q¸t|||  |¡ƒ q¸tdƒD ]}|j|  | j  < q|D ]V}dD ]J}t||d ƒ}|d k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topDictIndexr/   rG   Úsetr<   ZCharStringsÚcharsetZgetItemAndSelectorÚaddÚprivateÚcffSpecializerZprogramToCommandsÚprogramrC   ZcommandsToProgramr@   rA   r   r   ÚrangeZ
FontMatrixr	   )r    r!   r"   rF   ZtopDictZvarStorerG   ZprivatesZfontnamer0   Úcsr'   ÚcÚ_ÚcommandsÚoprD   r#   r4   rL   r   r   r   r$   ¡   sF    

 ÿ

c                 C   s8   |j D ]$}t|ƒD ]\}}|  |¡||< qq| ¡  d S r   )ZItemr1   r   ZcalculateNumShorts)r    ZvarDataÚitemr4   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populateDefaultsr8   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)ÚPaintrX   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 )NTr6   F)	rZ   rX   rY   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$   )r0   Ú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   r6   )ÚTTFont)ÚmakeOutputFileNamezfonttools ttLib.scaleUpem)Údescriptionr0   z
Font file.)ÚmetavarÚhelpr`   znew-upemzNew units-per-EM integer value.z--output-fileÚpathzOutput file.)rd   Údefaultre   Tz-scaled)Z	overWriteÚsuffixz
Writing %s)ÚsysÚargvÚfontTools.ttLibra   ZfontTools.misc.cliToolsrb   ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsr0   Úintr`   Úoutput_filer   ÚprintÚsave)
rD   ri   ra   rb   rl   ÚparserÚoptionsr0   r`   rq   r   r   r   Úmain)  s@     ÿ  ÿ   ÿ


ÿý
rv   Ú__main__)N)+Ú__doc__ZfontTools.ttLib.ttVisitorr   rk   ZttLibZfontTools.ttLib.tables.otBaseZtablesZotBaseZfontTools.ttLib.tables.otTablesrX   ZfontTools.cffLibr   ZfontTools.cffLib.specializerZcffLibZspecializerrM   ZfontTools.varLibr   ZfontTools.misc.fixedToolsr   Ú__all__r   Zregister_attrsZgetTableClassZValueRecordZAnchorZ
CaretValueZ	BaseCoordZMathValueRecordZClipBoxr$   Zregister_attrrC   ÚregisterZVarDatar]   ZBaseGlyphPaintRecordr^   r   rv   r   ri   Úexitr   r   r   r   Ú<module>   s‚   þþþþÃÿA
 ÿ





 ÿ
C







'
