
    jke/                        d Z ddlmZ ddlmZ ddlmc mc mZ ddlmc mc m	Z	 ddl
mZ ddlmc mZ ddlmZ ddlmZ ddlmZ dd	gZ G d
 d	e      Zej1                   ej2                  d      df ej2                  d      df ej2                  d      df ej2                  d      df ej2                  d      df ej2                  d      dfe	j4                  dfe	j6                  dfe	j8                  dfe	j:                  dfe	j<                  dfe	j>                  dff      d        Z ejC                   ej2                  d       ej2                  d      fd      d         Z ejC                   ej2                  d!      d"      d#        Z ejC                   ej2                  d$      d%      d&        Z ejC                   ej2                  d'      d(      d)        Z ejC                   ej2                  d*      d+      d,        Z d- Z"ejC                   ej2                  d.       ej2                  d/      fd0      d1        Z ejG                  e	jH                        d2        Z d3 Z%ejG                  e	jL                        d4        Z ejG                  e	jN                        d5        Z d6 Z(d9d7Z)e*d8k(  rddl+Z+ e+jX                   e)              yy):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)VarComponentFlags
scale_upemScalerVisitorc                       e Zd Zd Zd Zy)r	   c                     || _         y N)scaleFactor)selfr   s     ;/usr/lib/python3/dist-packages/fontTools/ttLib/scaleUpem.py__init__zScalerVisitor.__init__   s
    &    c                 2    t        || j                  z        S r   )r   r   )r   vs     r   scalezScalerVisitor.scale   s    q4+++,,r   N)__name__
__module____qualname__r   r    r   r   r	   r	      s    '-r   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                 <    t        ||| j                  |             y r   )setattrr   )visitorobjattrvalues       r   visitrR      s    D Cw}}U+,r   hmtxvmtxmetricsc                 l    |D ]/  }||   \  }}| j                  |      | j                  |      f||<   1 y r   r   )rN   rO   rP   rU   gadvancelsbs          r   rR   rR   b   sB      @qz]]7+W]]3-??
@r   VMTXVOriginRecordsc                 @    |D ]  }| j                  ||         ||<    y r   rW   )rN   rO   rP   r\   rX   s        r   rR   rR   k   s)     =#MM.*;<q=r   glyfglyphsc           
         |j                         D ]R  }dD ].  }t        ||d       }|t        ||| j                  |             0 |j	                         rR|j
                  D ]B  }| j                  |j                        |_        | j                  |j                        |_        D |j                         rU|j
                  D ]E  }dD ]>  }t        |j                  |      }t        |j                  || j                  |             @ G t        |d      s|j                  }t        |      D ]-  \  }\  }	}
| j                  |	      | j                  |
      f||<   / U y )N)r   r   r   r   )
translateX
translateYtCenterXtCenterYcoordinates)valuesgetattrrM   r   isComposite
componentsxyisVarComposite	transformhasattrre   	enumerate)rN   rO   rP   r_   rX   r   	componentre   irj   rk   s              r   rR   rR   q   sP   ]]_ D4 	3D4&A}4q!12	3
 ==?\\ 9	%mmIKK8	%mmIKK8	9 \\ I	P ID	 3 3T:AI//w}}Q7GHII 1m$--K&{3 D	6Aq!(q!17==3C!CAD+Dr   gvar
variationsc                     | j                   d   }|j                         D ]k  \  }}||   }|j                         }|D ]J  }	|	j                  }
|sBt	        |
      D ]3  \  }}|	| j                  |d         | j                  |d         f|
|<   5 Td}|j                  D ]  }|j                  t        j                  z  r|t        |j                        z  }|j                  t        j                  t        j                  z  z  r5|
|   }| j                  |d         | j                  |d         f|
|<   |dz  }|j                  t        j                  z  r|dz  }|j                  t        j                  t        j                   z  z  r|dz  }|j                  t        j"                  t        j$                  z  z  r|dz  }|j                  t        j&                  t        j(                  z  z  sT|
|   }| j                  |d         | j                  |d         f|
|<   |dz  } |dz   t        |
      k(  sJ t+        |t        |
            D ]2  }|
|   }| j                  |d         | j                  |d         f|
|<   4 M n y )Nr^   r         )fontitemsrl   re   ro   r   ri   flagsr   AXES_HAVE_VARIATIONlenlocation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range)rN   rO   rP   rs   	glyfTable	glyphNamevarlistglyphrl   varre   rq   xyrp   s                 r   rR   rR      s    V$I(..0 /L	7)$--/ ,	LC//K!&{3 PEArz %,]]2a5%97==A;O%OKNP  A"-- 	??%6%J%JJY//00A??%66'889 %QB%,]]2a5%97==A;O%OKNFA??%6%D%DDFA??%225F5S5SS FA??%114E4Q4QQ FA??%447H7W7WW %QB%,]]2a5%97==A;O%OKNFA38 q5C,,,,1c+./ L ^!(r!u!5w}}RU7K!KALU,	L/Lr   kern
kernTablesc                     |D ]:  }|j                   }|j                         D ]  }| j                  ||         ||<    < y r   )	kernTablekeysr   )rN   rO   rP   r   tabler   ks          r   rR   rR      sF     7OO	! 	7A"==16IaL	77r   c                     t        |      D ]Q  \  }}t        |t              s&t        |t              r'| j	                  |      ||<   <|d   }t        | |       ||d<   S y )N)ro   
isinstancelistbytesr   
_cff_scale)rN   argsrq   arg
num_blendss        r   r   r      s[    D/ !3#t$c5)!--,QRJw$ CG!r   zCFF CFF2cffc           
         |j                          |j                  d   }t        |dd       }||j                  nd }t	               }|j                         D ]  }||   }	|	j                  }
|	j                  D ]  }|
j                  |      \  }}|j                  |j                         t        j                  |j                  |      }|D ]  \  }}|dk(  rt        | |        t        j                  |      |j                  d d   dD ]K  }t        ||d       }|t!        |t"              rt        | |       0t%        ||| j'                  |             M t)        d      D ]#  }|j*                  |xx   | j,                  z  cc<   % |D ]R  }dD ]K  }t        ||d       }|t!        |t"              rt        | |       0t%        ||| j'                  |             M T  y )Nr   VarStore)getNumRegionsvsindex)UnderlinePositionUnderlineThicknessFontBBoxStrokeWidth   )

BlueValues
OtherBluesFamilyBluesFamilyOtherBluesStdHWStdVW	StemSnapH	StemSnapVdefaultWidthXnominalWidthX)desubroutinizetopDictIndexrg   r   setr   CharStringscharsetgetItemAndSelectoraddprivatecffSpecializerprogramToCommandsprogramr   commandsToProgramr   r   rM   r   r   
FontMatrixr   )rN   rO   rP   r   topDictvarStorer   privatesfontnamerw   csrX   c_commandsopr   rQ   rq   r   s                       r   rR   rR      s    q!Gw
D1H.6.BH**MuHHHJ 9A8} 	FA((+DAqLL#%77		H % *D?7D)* *;;HEAIIaL	F
 	=D GT40E}%&7E*w}}U';<	= q 	9Aq!W%8%88!	9   	AG A  t4=eT*w.GT7==+?@+A	AG9Ar   c                     |j                   D ])  }t        |      D ]  \  }}| j                  |      ||<    + |j                          y r   )Itemro   r   calculateNumShorts)rN   varDataitemrq   r   s        r   rR   rR     sL     'dO 	'DAqmmA&DG	''  r   c                 V   d|cxk  rdk  r*n n't         j                  j                  | _        || _        y t        j
                         }|j                          dx|_        x|_        x|_	        |_
        |x|_        |_        t         j                  j                  | _        || _        y )N   r   )otTablesPaintFormatPaintScaleUniformFormatr   	Affine2x3populateDefaultsr   yxdxdyxxyyPaintTransform	Transform)paintr   rm   s      r   _setup_scale_paintr   )  s    	U#m#++==""$I @AAILA9<A),"''IL9<''66ELEOr   c                     |j                   }t        j                          }t        || j                         ||_         ||_         y)NT)Paintr   r   r   )rN   recordoldPaintr   s       r   rR   rR   8  s8    ||HNNEug112EKFLr   c                 `   |j                   t        j                  j                  k7  ryt        j                         }|j                   |_         |j                  |_        |j
                  |_        |`|`t        |d| j                  z         ||_        | j                  |j                         y)NTru   F)	r   r   r   
PaintGlyphr   Glyphr   r   rR   )rN   r   newPaints      r   rR   rR   E  s    ||x++666~~HllHO[[HN[[HNua'"5"556EKMM(..!r   c                 `    | d   j                   }t        ||z        }|j                  |        y)z1Change the units-per-EM of font to the new value.r   N)r   r	   rR   )rw   new_upemupemrN   s       r   r   r   Y  s+    <""DHtO,GMM$r   c                    | ddl }|j                  dd } ddlm} ddlm} ddl}|j                  dd       }|j                  ddd	
       |j                  ddd
       |j                  dddd       |j                  |       } ||j                        }t        |j                        }|j                  |j                  n ||j                  dd      }	t        ||       t        d|	z         |j!                  |	       y)z Change the units-per-EM of fontsNr   ru   )TTFont)makeOutputFileNamezfonttools ttLib.scaleUpem)descriptionrw   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_argsrw   intr   output_filer   printsave)
r   r   r   r   r   parseroptionsrw   r   r   s
             r   mainr  `  s    |xx|&:$$#1S % F \B
J-N   N   %G',,D7##$H * 	YO  tX	,
$%IIkr   __main__r   )-__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.misc.fixedToolsr   fontTools.ttLib.tables._g_l_y_fr   __all__r	   register_attrsgetTableClassValueRecordAnchor
CaretValue	BaseCoordMathValueRecordClipBoxrR   register_attrr   registerVarDatar   BaseGlyphPaintRecordr   r   r  r   r   exitr   r   r   <module>r      sX   0  . . 2 2 ) 5 5 $ - = 
)-I - 			V	$&TU			V	$&QR			V	$';=E'		
  E'		
  E'	
0   @	
 
89			|-			l,		!	!G-			;<{>@B-C@B- U "5%"5"5f"=>	@@ 0U008:JK= L=
 0U008(CD DD4 0U008,G3L H3Ll 0U008,G7 H7! U "5%"5"5f"=>?A?AJ (()! *!  556	 7	 ' (&$N zCHHTV r   