o
    h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rIddl/Z/e/0e-  dS 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   m/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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)underlinePositionunderlineThicknessVORGdefaultVertOriginYhhea)ascentdescentlineGapadvanceWidthMaxminLeftSideBearingminRightSideBearing
xMaxExtentcaretOffsetvhea)r#   r$   r%   advanceHeightMaxminTopSideBearingminBottomSideBearing
yMaxExtentr*   zOS/2)xAvgCharWidthySubscriptXSizeySubscriptYSizeySubscriptXOffsetySubscriptYOffsetySuperscriptXSizeySuperscriptYSizeySuperscriptXOffsetySuperscriptYOffsetyStrikeoutSizeyStrikeoutPositionsTypoAscendersTypoDescendersTypoLineGapusWinAscentusWinDescentsxHeight
sCapHeight)XAdvanceYAdvance
XPlacement
YPlacement)XCoordinateYCoordinate
CoordinateValue)r   r   r   r   c                 C   s   t ||| | d S r   )setattrr   )visitorobjattrvaluer   r   r   visit   s   BrO   hmtxvmtxmetricsc                 C   s2   |D ]}|| \}}|  ||  |f||< qd S r   r   )rK   rL   rM   rR   gadvancelsbr   r   r   rO   c   s   VMTXVOriginRecordsc                 C   s    |D ]}|  || ||< qd S r   rS   )rK   rL   rM   rX   rT   r   r   r   rO   l   s   glyfglyphsc                 C   s   |  D ]R}dD ]}t||d }|d urt||| | q| r7|jD ]}| |j|_| |j|_q%qt|drV|j	}t
|D ]\}\}	}
| |	| |
f||< qCqd S )N)r   r   r   r   coordinates)valuesgetattrrJ   r   isComposite
componentsxyhasattrr[   	enumerate)rK   rL   rM   rZ   rT   r   	componentr[   ir`   ra   r   r   r   rO   r   s"   

gvar
variationsc                 C   st   | j d }| D ].\}}|| }|D ]#}|j}	t|	D ]\}
}|d u r%q| |d | |d f|	|
< qqq	d S )NrY   r      )fontitemsr[   rc   r   )rK   rL   rM   rg   	glyfTable	glyphNamevarlistglyphvarr[   re   xyr   r   r   rO      s   
"VARCtablec                 C   s  | j d }dd |jD }|j}t|}|jjD ]j}|jD ]c}	|	j}
| |
j	|
_	| |
j
|
_
| |
j|
_| |
j|
_|	jtjkr|	j}|tjkr|d? }|d@ }|j| }|j| }||||j |rt||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@ r|d7 }|tjj@ r$|d7 }|tjj @ r/|d7 }|tjj!@ r:|d7 }|tjj"@ rE|d7 }|tjj#@ rY| || ||< |d7 }|tjj$@ rm| || ||< |d7 }|%t&| q|}|||	_qtj|	_qq|' |_d S )	Nfvarc                 S   s   g | ]}|j qS r   )axisTag).0ar   r   r   
<listcomp>   s    zvisit.<locals>.<listcomp>   i  c                 S   s   g | ]}t |qS r   r   )ru   r   r   r   r   rw      s    r   rh   )(ri   axesMultiVarStorer   VarCompositeGlyphsVarCompositeGlyphr_   	transformr   
translateX
translateYtCenterXtCenterYaxisValuesVarIndexotTablesNO_VARIATION_INDEXMultiVarDataItemsetSupportsget_supportslenVarRegionCountlistr	   storeDeltastransformVarIndexflagsVarComponentFlagsHAVE_TRANSLATE_XHAVE_TRANSLATE_YHAVE_ROTATIONHAVE_SCALE_XHAVE_SCALE_YHAVE_SKEW_XHAVE_SKEW_YHAVE_TCENTER_XHAVE_TCENTER_Yappendr   finish)rK   rL   rM   varcrs   fvarAxesstorestoreBuilderrT   rd   tvarIdxmajorminorvarDatavecmr   newVecr   re   r   r   r   rO      s   





Kkern
kernTablesc                 C   s4   |D ]}|j }| D ]}| || ||< qqd S r   )	kernTablekeysr   )rK   rL   rM   r   rr   r   kr   r   r   rO      s   c                 C   sT   t |D ]#\}}t|tst|ts| |||< q|d }t| | ||d< qd S )N)rc   
isinstancer   bytesr   
_cff_scale)rK   argsre   arg
num_blendsr   r   r   r      s   



r   zCFF CFF2cffc              	   C   s~  |   |jd }t|dd }|d ur|jnd }t }| D ]}|| }	|	j}
|	jD ]2}|
|\}}|	|j
 tj|j|d}|D ]\}}|dkrMqDt| | qDt||jd d < q+dD ]!}t||d }|d u rmq`t|trxt| | q`t||| | q`tdD ]}|j|  | j  < q|D ]&}dD ]!}t||d }|d u rqt|trt| | qt||| | qqqd S )Nr   VarStore)getNumRegionsvsindex)UnderlinePositionUnderlineThicknessFontBBoxStrokeWidth   )

BlueValues
OtherBluesFamilyBluesFamilyOtherBluesStdHWStdVW	StemSnapH	StemSnapVdefaultWidthXnominalWidthX)desubroutinizetopDictIndexr]   r   setr   CharStringscharsetgetItemAndSelectoraddprivatecffSpecializerprogramToCommandsprogramr   commandsToProgramr   r   rJ   r   range
FontMatrixr   )rK   rL   rM   r   topDictvarStorer   privatesfontnameri   csrT   c_commandsopr   rN   re   r   r   r   r   rO      sN   



c                 C   s8   |j D ]}t|D ]\}}| |||< q	q|  d S r   )r   rc   r   calculateNumShorts)rK   r   itemre   r   r   r   r   rO   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   )r   PaintFormatPaintScaleUniformFormatr   	Affine2x3populateDefaultsrp   yxdxdyxxyyPaintTransform	Transform)paintr   r}   r   r   r   _setup_scale_paintS  s   


r   c                 C   s*   |j }t  }t|| j ||_ ||_ dS )NT)Paintr   r   r   )rK   recordoldPaintr   r   r   r   rO   b  s   c                 C   s`   |j tjjkr	dS t }|j |_ |j|_|j|_|`|`t|d| j  ||_| |j dS )NTrh   F)	r   r   r   
PaintGlyphr   Glyphr   r   rO   )rK   r   newPaintr   r   r   rO   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   rO   )ri   new_upemupemrK   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rV|jn||j
ddd}	t|| td|	  ||	 dS )z Change the units-per-EM of fontsNr   rh   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionri   z
Font file.)metavarhelpr   znew-upemzNew units-per-EM integer value.z--output-filepathzOutput file.)r   defaultr   Tz-scaled)	overWritesuffixz
Writing %s)sysargvfontTools.ttLibr   fontTools.misc.cliToolsr   argparseArgumentParseradd_argument
parse_argsri   intr   output_filer
   printsave)
r   r  r   r   r  parseroptionsri   r   r
  r   r   r   main  s4   




r  __main__r   )1__doc__fontTools.ttLib.ttVisitorr   r  ttLibfontTools.ttLib.tables.otBasetablesotBasefontTools.ttLib.tables.otTablesr   fontTools.cffLibr   fontTools.cffLib.specializercffLibspecializerr   fontTools.varLibr   fontTools.varLib.multiVarStorer   fontTools.misc.vectorr   fontTools.misc.fixedToolsr   fontTools.misc.iterToolsr	   __all__r   register_attrsgetTableClassValueRecordAnchor
CaretValue	BaseCoordMathValueRecordClipBoxrO   register_attrr   registerVarDatar   BaseGlyphPaintRecordr   r
   r  r   r  exitr   r   r   r   <module>   s    
A




X


E







'