
    hNK                     H   S r SSKJrJr  SSKJr  SSKJr  SSKJ	r	J
r
  SSKJr  SSKJrJrJr  SSKJrJrJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKrSSKr SSK!r!SSK"J#r#  \!RH                  " S5      r%0 r&/ SQr'\(" \)" \'SS \'SS 5      SS9 H  u  r*u  r+r,\+\,-   S-  r-\*\&\-'   M     S r.S r/S r0SS jr1SS jr2\3S:X  aa  SSK4r4\5" \4Rl                  5      S:  a  \4Rn                  " \2" 5       5        SSK8r8\4Rn                  " \8Rr                  " 5       Rt                  5        gg)z
Instantiate a variation font.  Run, eg:

.. code-block:: sh

    $ fonttools varLib.mutator ./NotoSansArabic-VF.ttf wght=140 wdth=85
    )floatToFixedToFloatfloatToFixed)otRound)	BoundsPen)TTFontnewTable)	ttProgram)GlyphCoordinatesflagOverlapSimpleOVERLAP_COMPOUND)supportScalarnormalizeLocationpiecewiseLinearMap)MutatorMerger)VarStoreInstancer)MVAR_ENTRIES)	iup_deltaN)BytesIOzfontTools.varlib.mutator)	g      I@g     @O@g     R@g     U@g      Y@g      \@g     @_@g     b@g      i@   )start   c                 
   SnSnU R                    H  nUR                  n[        US5      (       a  UR                  OSnUR                  R                  5        H  u  pxXs;   a@  [        U[        5      (       a+  U" XhSS  5      n	[        US   U	-   5      UR                  U'   MJ  Xr;   d  MQ  [        US   [        5      (       d  Mk   Sn	[        U5       H&  u  pU	[        U" XkSS  5      5      -  n	US   U	-   X'   M(     M     M     g )N)
BlueValues
OtherBluesFamilyBluesFamilyOtherBlues	StemSnapH	StemSnapV)	BlueScale	BlueShiftBlueFuzzStdHWStdVWvsindexr   r   )
FDArrayPrivatehasattrr%   rawDictitems
isinstancelistr   	enumerate)topDictinterpolateFromDeltaspd_blend_listspd_blend_valuesfontDictpdr%   keyvaluedeltaival_lists               J/var/www/html/env/lib/python3.13/site-packages/fontTools/varLib/mutator.pyinterpolate_cff2_PrivateDictr:   ,   s    N OOOO!(Y!7!7"**a****,JC&Jud,C,C-gQRyA")%(U*:";

3'Za$-G-GE
 #,U#3KAW%:7QRL%QRRE'{U2EH $4 - $    c                    U R                   nU GHP  nX4   n/ nSnSn[        UR                  5       H  u  pU
S:X  a?  UR                  U	S-
     nUS:w  a   UR                  UR                  XS-
   5        U	S-   nMJ  U
S:X  d  MR  UR	                  U5      nSU-   nUR                  U	S-
     nXU-  S-   -
  nX-   =nnX:  aK  UU-   nUR                  UU nU" UU5      nUR                  U==   [        U5      -  ss'   UnUS-  nX:  a  MK  UR                  UR                  X 5        U	S-   nM     US:w  d  GM,  UR                  UR                  US  5        Xel        GMS     g )Nr   r%   r   blend)CharStringsr-   programextendgetNumRegionsr   )r.   r/   
glyphOrdercharstringsgname
charstringnew_programr%   last_ir7   tokennum_regions
numMastersnum_argsargiend_argstupleinext_tideltasr6   s                       r9   interpolate_cff2_charstringsrQ   I   s   %%K !'
!*"4"45HA	!$,,QU3Q;&&z'9'9&q5'IJQ'!(66w?_
%--a!e4 z1A56$(O36o${2G'//w?F1'6BE&&t,>,$FAID o "":#5#5f#FGQ5 66 Q;z11&':;!,K r;   c                    UR                   n[        U5      nU S   nSnSU ;   a5  U S   R                  nU S   n[        UR                  UR
                  U5      n	[        U5       H  u  p[        Xk   5      nU(       a<  UR                  (       a  UR                  R                  U   nOU
n[        W	U   5      nOSnUR                  5         XK   nUR                  U5        UR                  c  SnO [        UR                  S   5      nUS   U-
  nU(       d	  U(       d  M  U(       a  [        SUS   U-   5      US'   U(       a  WUS'   [        U5      Xk'   M     g)a6  Unlike TrueType glyphs, neither advance width nor bounding box
info is stored in a CFF2 charstring. The width data exists only in
the hmtx and HVAR tables. Since LSB data cannot be interpolated
reliably from the master LSB values in the hmtx table, we traverse
the charstring to determine the actual bound box.hmtxNHVARfvarr   r   )r>   r   tabler   VarStoreaxesr-   r,   AdvWidthMapmappingr   initdrawboundsmaxtuple)varfontr.   rB   locrC   	boundsPenrS   
hvar_tablerU   varStoreInstancergidrD   entry	width_idxwidth_deltarE   	lsb_deltalsbs                     r9   interpolate_cff2_metricsrk   s   sF    %%K*%I6?DJV_**
v-j.A.A499cR
+
T[!%%&22::5A		!"3I">?KK 	 '
	"#I)**1-.Ca3Iq%(["89aa,DK9 ,r;   c                 l  ^E U(       d7  [        5       nU R                  U5        UR                  S5        [        U5      n U S   nUR                   Vs0 s H0  ofR
                  UR                  UR                  UR                  4_M2     nn[        X5      nSU ;   a@  U S   R                  n	UR                  5        V
Vs0 s H  u  pU
[        XU
   5      _M     nn
nUR                  5        V
Vs0 s H  u  pU
[        US5      _M     nn
n[        R                  SU5        SU ;   Ga0  [        R                  S5        U S   nU S   mEU S	   R                   n[#        U R%                  S
5      SS5      n['        UR(                  R+                  5       UE4S jS9nU H  nUR(                  U   nTER-                  UX5      u  nnSu  nnU Ht  n[/        UUR                  5      nU(       d  M"  UR0                  nSU;   a/  Uc  TER-                  UX5      u  nn[3        UUWR4                  5      nU[7        U5      U-  -  nMv     TER9                  UUX5        M     OSmESU ;   a  U S	 SU ;   a  [        R                  S5        U S   nU S   n0 nUR(                   Ha  n[/        UUR                  5      nU(       d  M"  [;        UR0                  5       H&  u  nnUc  M  UR%                  US5      UU-  -   UU'   M(     Mc     UR                  5        H  u  nnUU==   [=        U5      -  ss'   M     SU ;   a  [        R                  S5        U R?                  5       nU S   n U R@                  RB                  S   n![E        U!RF                  RH                  UR                  U5      n"U"RJ                  n#[M        U!U#5        U RO                  5         [Q        U!U#U5        [S        U U!UU5        U!RT                  S	 U!?#SU ;   a  [        R                  S5        U S   RV                  n$[E        U$RF                  UR                  U5      n%U$RX                  n&U& Hh  n'U'RZ                  n(U([\        ;  a  M  [\        U(   u  n)n*[=        U%U'R^                     5      nU(       d  MH  [a        U U)   U*[#        U U)   U*5      U-   5        Mj     [        R                  S5        S GHS  n)U)U ;  a  M  U U)   RV                  n+[#        U+SS5      (       d  M/  U+Rb                  nURd                   GH  n,Sn-U,Rf                  Rh                   Hr  n.U.Rj                  S:X  aT  U.Rl                  n/UR                  U/   R
                  n0U.Rn                  n1U.Rp                  n2UU0   nU1Us=::  a  U2::  d  O  Sn-OSn-U-(       a  Mr    O   U-(       d  M  U,Rr                  Rt                  S:X  d   eU,Rr                  Rv                   H5  n'U'Rx                  U+Rz                  R|                  U'R~                     l<        M7       O   U+?1GMV     S U ;   Ga
  U S    RV                  Rt                  S!:  a  [        R                  S"5        U S    RV                  n3[E        U3RF                  UR                  U5      n4[        U U45      n5U5R                  X /S S#/5        U3?#S$U3l:        U3R                  c	  U3?BSU3l:        U3R                  (       dW  U3R                  (       dF  U3R                  (       d5  U3R                  (       d$  U3Rt                  S$:  a  U3R                  (       d  U S 	 Sn6TE(       a  TER                  R                  5        HK  n7[        U7S%5      (       d  M  U7R                  R                  5       n8[        S& U8 5       5      n6U6(       d  MK    O   U(       a  TER+                  5        Hr  n9TEU9   n7U7R                  5       (       a(  U7R                  S   =R                  [        -  slO        ME  U7R                  S:  d  MW  U7R                  S==   [        -  ss'   Mt     U6(       Ga  [        R                  S'5        / n:S(U ;   a   U S(   n;U;R                  R                  5       n:O*[        S(5      n;[        R                  " 5       U;lJ        U;U S('   U:R                  S)5        U:R                  S*5        [        [        U5      5      /n<UR                   H3  nU<R                  [        [        XR
                     S5      5      5        M5     U:R                  S+S,R                  U<5      -   5        U:R                  S-5        U;R                  R                  U:5        S.U ;   aK  U S.   n=[a        U=S/S[#        U=S/S5      -   5        [a        U=S0[        [        U5      [#        U=S0S5      5      5        S1U ;   Gat  [        R                  S25        UR                   Vs1 s H  ofR                  iM     n>nUR                   H9  nU>R                  UR                  5        U>R                  UR                  5        M;     S3U ;   a  U S1   R                   V?s/ s HE  n?U?R                  U>;   d  M  U?R                  S:X  d  M'  U?R                  S4:w  d  M9  U?R                  PMG     n@n?[        U@5      [        [        [        U S3   R                  5      5      5      :X  a  U S3	 U S1   R                   V?s/ s H'  n?U?R                  S5:  d  U?R                  U>;  d  M%  U?PM)     sn?U S1   R                  SS& S6U;   a0  S7U ;   a*  [=        [        S[        US6   S85      5      5      U S7   lj        S9U;   aH  US9   nA['        [        R                  5       5       H  u  nBnCWAUB:  d  M  WCU S7   ll          O   S:U S7   ll        S;U;   a'  S<U ;   a!  [        S=[        US;   S>5      5      U S<   lm        [        R                  S?5        S@ H  nDUDU ;   d  M  U WD	 M     U $ s  snf s  snn
f s  snn
f s  snf s  sn?f s  sn?f )Aa&  Generate a static instance from a variable TTFont and a dictionary
defining the desired location along the variable font's axes.
The location values must be specified as user-space coordinates, e.g.:

.. code-block::

    {'wght': 400, 'wdth': 100}

By default, a new TTFont object is returned. If ``inplace`` is True, the
input varfont is modified and reduced to a static font.

When the overlap parameter is defined as True,
OVERLAP_SIMPLE and OVERLAP_COMPOUND bits are set to 1.  See
https://docs.microsoft.com/en-us/typography/opentype/spec/glyf
r   rU   avar   zNormalized location: %sgvarzMutating glyf/gvar tablesglyfrS   vmtxmetricsNc                 |   > TU    R                  5       (       a   TU    R                  T5      R                  U 4$ SU 4$ )Nr   )isCompositegetCompositeMaxpValuesmaxComponentDepth)namerp   s    r9   <lambda>)instantiateVariableFont.<locals>.<lambda>   sI     Dz--// J55d;MM  r;   )r4   )NNDSIGcvarzMutating cvt/cvar tableszcvt CFF2zMutating CFF2 tablerW   MVARzMutating MVAR tablezMutating FeatureVariations)GSUBGPOSFeatureVariationsTr   Fi   GDEFi  zMutating GDEF/GPOS/GSUB tablesr   i  r?   c              3   B   #    U  H  oR                  S 5      v   M     g7f)GETVARIATIONN)
startswith).0ops     r9   	<genexpr>*instantiateVariableFont.<locals>.<genexpr>^  s     SlmmN;;ls   z1Adding IDEF to fpgm table for GETVARIATION opcodefpgmzPUSHB[000] 145zIDEF[ ]z
NPUSHW[ ]  zENDF[ ]maxpmaxInstructionDefsmaxStackElementsrw   zPruning name tableltagi     wghtzOS/2i  wdth	   slntpostiZ   zRemoving variable tables)rm   r{   rU   ro   rT   r}   VVARSTAT)nr   saveseekr   rX   axisTagminValuedefaultValuemaxValuer   segmentsr*   r   r   loginforr   getattrgetsorted
variationskeys_getCoordinatesAndControlsr   coordinatesr   endPtsr
   _setCoordinatesr-   r   getGlyphOrdercfftopDictIndexr   rW   
otVarStorer/   r:   desubroutinizerQ   rk   r)   rV   ValueRecordValueTagr   VarIdxsetattrr   FeatureVariationRecordConditionSetConditionTableFormat	AxisIndexFilterRangeMinValueFilterRangeMaxValueFeatureTableSubstitutionVersionSubstitutionRecordFeatureFeatureListFeatureRecordFeatureIndexr   mergeTablesMarkGlyphSetsDefLigCaretListMarkAttachClassDefGlyphClassDef
AttachListglyphsvaluesr(   r?   getAssemblyanyrt   
componentsflagsr   numberOfContoursr   r   r	   Programappendstrlenr   joinfromAssemblyr^   
axisNameID	instancesaddsubfamilyNameIDpostscriptNameIDnamesnameID
platformIDlangIDsetrangetagsminusWeightClassOS2_WIDTH_CLASS_VALUESusWidthClassitalicAngle)Fr`   locationinplaceoverlapstreamrU   arX   ra   mapskvro   hMetricsvMetrics
glyphnames	glyphnamer   r   _
origCoordsr   varscalarr6   gr{   cvtrP   r7   crB   r|   r.   vsInstancerr/   mvarrd   recordsrecmvarTagtableTagitemNamerV   recordapplies	conditionaxisIdxr   MinMaxgdef	instancermergeraddidefglyphinstructions
glyph_nameasmr   argsr   excludenexcludedUnicodeLangIDsr   percent
widthClasstagrp   sF                                                                        @r9   instantiateVariableFontr     s
     VA.6?DIMSAII

ANNAJJ??DS
H
+Cv''=@YY[I[TQq$QQ00[I58YY[
A[TQ1!!R(([C
AHH&,,-vv6?**7;;v.	4@OO  "


 $I3J!<<8NK ",J!&sCHH55=!)(,(G(G%x)
A &eZBE/6?? "   KL% $( FO+,vfo??C"31F!#//21= &

1a 06A: =F1I 3	 # HAuFgen$F ' &'**,
v((''*'(8(8(C(CTYYPST + A A$W.CD$W.CZP ':sCOOJ'&'v$$-dmmTYYL""CllGl*!-g!6Hh-cjj9:E!)84u<  HH)*"7"!''u1488,,
 77FG#00??	##q('11G"ii088G#77C#77CGA1OO"'#Gw @ w66>>*LLL!::MMC %%33C4D4DEM N - 8. #= #@ WV_22::jH12v$$%dmmTYYD	w	27I/?@ M!  (%%DL &&!!
*t/D/DG[['')Eui(($}}88:SlSS7 * "iik
Z($$&&$$Q'--1AA-++a/KKN&77N * DEW6?D,,**,CF#D$,,.DL"GFO

#$

9CHAKKLYY<=> 

<#((4.01

9!!#& W6?D*A>RTU0V,V "CHgd,>BC %&)-3A<<3AKK))*KK**+   W !..&.A88w& +,<<1+< ABVAS . # &
 )*c%WV_=Q=Q8S2T.UUFO V_**$
*xx#~!8 *$
a  f/(/As8F;KT7R0S(T%#)*@*F*F*H#IGZg~/9, $J
 ,-GFO(f/&)#s8F3CR/H&I#HH'(O'> P Nq T J
AV 4&$
s<   7p?p0p!)p' p,8p,
p,p,9$p1!p1c                 ^   SSK Jn  SSKnUR                  SSS9nUR	                  SSS	S
9  UR	                  SSSSS9  UR	                  SSSSSS9  UR	                  SSSSS9  UR                  SS9nUR	                  SSSSS 9  UR	                  S!S"SS#S 9  UR	                  S$S%SS&S9  UR                  U 5      nUR                  nUR                  (       d%  [        R                  R                  U5      S   S'-   OUR                  nU" UR                  (       a  S(OUR                  (       a  S)OS*S+9  0 nUR                   HD  n	 U	R                  S,5      u  p[!        U
5      S-::  d   e[#        U5      XR%                  S-5      '   MF     [,        R/                  S/U5        [,        R/                  S05        [1        XeR2                  S19n[5        XS2UR6                  S39  [,        R/                  S4U5        UR9                  U5        g! [&        [(        4 a    UR+                  S.U	-  5         M  f = f)5zInstantiate a variation fontr   )configLoggerNzfonttools varLib.mutatorzInstantiate a variable font)descriptioninputz	INPUT.ttfzInput variable TTF file.)metavarhelplocargszAXIS=LOC*zList of space separated locations. A location consist in the name of a variation axis, followed by '=' and a number. E.g.:  wght=700 wdth=80. The default is the location of the base master.)r  nargsr  z-oz--outputz
OUTPUT.ttfz7Output instance TTF file (default: INPUT-instance.ttf).)r  defaultr  z--no-recalc-timestamprecalc_timestampstore_falsez:Don't set the output font's timestamp to the current time.)destactionr  F)requiredz-vz	--verbose
store_truezRun more verbosely.)r"  r  z-qz--quietzTurn verbosity off.z--no-overlapr   z5Don't set OVERLAP_SIMPLE/OVERLAP_COMPOUND glyf flags.z-instance.ttfDEBUGERRORINFO)level=   z$invalid location argument format: %rzLocation: %szLoading variable font)recalcTimestampT)r   r   zSaving instance font %s)	fontToolsr  argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsr  outputospathsplitextverbosequietr  splitr   floatljust
ValueErrorAssertionErrorerrorr   r   r   r  r  r   r   )r  r  r-  parserlogging_groupoptionsvarfilenameoutfilera   argr  valr`   s                r9   mainrE    sO   &$$"0M % F ;UV
M	   F   I	   777GMk,5J   i3H   D	   %G--K ~~ 	%a(?:^^ 
 !//w'--wV C	Gyy~HCs8q= = %c
C		!	  HH^S!HH$%[2J2JKGG$PHH&0LL N+ 	GLL?#EF	Gs   A H$H,+H,__main__)FT)N);__doc__fontTools.misc.fixedToolsr   r   fontTools.misc.roundToolsr   fontTools.pens.boundsPenr   fontTools.ttLibr   r   fontTools.ttLib.tablesr	   fontTools.ttLib.tables._g_l_y_fr
   r   r   fontTools.varLib.modelsr   r   r   fontTools.varLib.mergerr   fontTools.varLib.varStorer   fontTools.varLib.mvarr   fontTools.varLib.iupr   fontTools.subset.cffr,  os.pathr3  loggingior   	getLoggerr   r   percentsr-   zipr7   prevcurrhalfr:   rQ   rk   r  rE  __name__sysr   argvexitdoctesttestmodfailed r;   r9   <module>re     s   H - . , , 
 
 2 7 . *     23  F Xcr]HQRL!AKOA|d4K1D#$4  L
3:'-T,'^PfGT z
388}qHHW__%%& r;   