a
    —Æàg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�rŽddl/Z/e/ 0e-ƒ ¡ 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   úR/var/www/sistema_ama/venv/lib/python3.9/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)   ÚgZ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 ]¤}dD ]*}t||d ƒ}|d urt|||  |¡ƒ q| ¡ rn|jD ] }|  |j¡|_|  |j¡|_qJqt|dƒr|j	}t
|ƒD ]$\}\}	}
|  |	¡|  |
¡f||< q†qd S )N)r   r   r   r   Úcoordinates)ÚvaluesÚgetattrr#   r   ZisCompositeÚ
componentsÚxÚyÚhasattrr/   Ú	enumerate)r$   r%   r&   r.   r+   r   Ú	componentr/   Úir3   r4   r   r   r   r(   r   s    

ZgvarÚ
variationsc                 C   st   | j d }| ¡ D ]\\}}|| }|D ]F}|j}	t|	ƒD ]2\}
}|d u rJq8|  |d ¡|  |d ¡f|	|
< q8q&qd S )Nr-   r   é   )ÚfontÚitemsr/   r6   r   )r$   r%   r&   r9   Z	glyfTableZ	glyphNameZvarlistZglyphÚvarr/   r8   Úxyr   r   r   r(   †   s    
ZVARCÚtablec                 C   s  | j d }dd„ |jD ƒ}|j}t|ƒ}|jjD �]Ü}|jD �]Î}	|	j}
|  |
j	¡|
_	|  |
j
¡|
_
|  |
j¡|
_|  |
j¡|
_|	jtjk�r|	j}|tjk�r|d? }|d@ }|j| }|j| }| | ||j¡¡ |�rt|ƒ|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@ �r8|d7 }|tjj@ �rN|d7 }|tjj @ �rd|d7 }|tjj!@ �rz|d7 }|tjj"@ �r�|d7 }|tjj#@ �r¸|  || ¡||< |d7 }|tjj$@ �rà|  || ¡||< |d7 }| %t&|ƒ¡ �qÀ|}| |¡|	_q<tj|	_q<q0| '¡ |_d S )	NÚfvarc                 S   s   g | ]
}|j ‘qS r   )ZaxisTag)Ú.0Úar   r   r   Ú
<listcomp>™   ó    zvisit.<locals>.<listcomp>é   iÿÿ  c                 S   s   g | ]}t |ƒ‘qS r   r   )rA   r   r   r   r   rC   ³   rD   r   r:   )(r;   ZaxesZMultiVarStorer   ZVarCompositeGlyphsZVarCompositeGlyphr2   Ú	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varcr@   ZfvarAxesÚstoreZstoreBuilderr+   r7   ÚtZvarIdxÚmajorÚminorÚvarDataZvecÚmrK   ZnewVecr   r8   r   r   r   r(   ”   sŽ    






Ú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 ]F\}}t|tƒs4t|tƒsN|  |¡||< q|d }t| |ƒ ||d< qd S )Néÿÿÿÿ)r6   Ú
isinstancerJ   Úbytesr   Ú
_cff_scale)r$   Úargsr8   Ú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 �]F}|| }	|	j}
|	jD ]d}|
 |¡\}}| 	|j
¡ tj|j|d�}|D ]\}}|dkrœqŠt| |ƒ qŠt |¡|jd d …< qXdD ]B}t||d ƒ}|d u rÜqÂt|tƒròt| |ƒ qÂt|||  |¡ƒ qÂtdƒD ]}|j|  | j  < �q|D ]V}dD ]J}t||d ƒ}|d u �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topDictIndexr1   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'   r8   re   r   r   r   r(      sH    

ÿ

c                 C   s8   |j D ]$}t|ƒD ]\}}|  |¡||< qq| ¡  d S r   )rH   r6   r   ZcalculateNumShorts)r$   rR   Úitemr8   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r¬|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__)N)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







'
