L i\MddZddlmZmZddlmZddlmZddlm Z ddl m Z m Z ddl mZddlmZmZmZdd lmZmZmZdd lmZdd lmZdd lmZdd lmZddlZ ddl!Z"ddl#Z#ddl$m%Z%e#jLdZ'iZ(gdZ)e*e+e)dde)dddD]\Z,\Z-Z.e-e.zdz Z/e,e(e/<dZ0dZ1dZ2edddZ3ddZ4e5dk(r`ddl6Z6e7e6jpdkDre6jre4ddl:Z:e6jre:jvjxyy)a Instantiate a variation font. Run, eg: .. code-block:: sh $ fonttools varLib.mutator ./NotoSansArabic-VF.ttf wght=140 wdth=85 .. warning:: ``fontTools.varLib.mutator`` is deprecated in favor of :mod:`fontTools.varLib.instancer` which provides equivalent full instancing and also supports partial instancing. Please migrate CLI usage to ``fonttools varLib.instancer`` and API usage to :func:`fontTools.varLib.instancer.instantiateVariableFont`. )floatToFixedToFloat floatToFixed)deprecateFunction)otRound) BoundsPen)TTFontnewTable) ttProgram)GlyphCoordinatesflagOverlapSimpleOVERLAP_COMPOUND) supportScalarnormalizeLocationpiecewiseLinearMap) MutatorMerger)VarStoreInstancer) MVAR_ENTRIES) iup_deltaN)BytesIOzfontTools.varlib.mutator) gI@g@O@gR@gU@gY@g \@g@_@gb@gi@)startc d}d}|jD]}|j}t|dr |jnd}|jj D]\}}||vr;t |tr+|||dd} t|d| z|j|<E||vsJt |dts^ d} t|D](\} } | t||| ddz } | d| z|| <*y)N) BlueValues OtherBlues FamilyBluesFamilyOtherBlues StemSnapH StemSnapV) BlueScale BlueShiftBlueFuzzStdHWStdVWvsindexrr) FDArrayPrivatehasattrr&rawDictitems isinstancelistr enumerate) topDictinterpolateFromDeltaspd_blend_listspd_blend_valuesfontDictpdr&keyvaluedeltaival_lists ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/varLib/mutator.pyinterpolate_cff2_PrivateDictr;3s NOOOO3   !(Y!7"**a****, 3JC&Jud,C-guQRyA")%(U*:"; 3'Za$-GE #,U#33KAxW%:7HQRL%QRRE'{U2E!H3 33c|j}|D]L}||}g}d}d}t|jD]\} } | dk(r>|j| dz }|dk7r!|j|j|| dz | dz}I| dk(sO|j |} d| z} |j| dz } | | | zdzz }|| zx}}||krJ|| z}|j||}|||}|j|xxt |z cc<|}|dz }||krJ|j|j||| dz}|dk7s(|j|j|d||_Oy)Nrr&rblend) CharStringsr.programextend getNumRegionsr)r/r0 glyphOrder charstringsgname charstring new_programr&last_ir8token num_regions numMastersnum_argsargiend_argstupleinext_tideltasr7s r:interpolate_cff2_charstringsrRPs%%K%-!'  !*"4"45 HAu !$,,QU3Q;&&z'9'9&1q5'IJQ'!(66w? _ %--a!e4Hz1A56$(8O36Xo${2G'//w?F1'6BE&&t,>,$FAID Xo"":#5#5fX#FGQ5 6 Q;   z11&': ;!,J K%-r<cv|j}t|}|d}d}d|vr5|dj}|d}t|j|j |} t |D]\} } t|| } |r7|jr|jj| } n| } t | }nd}|j|| }|j||jd}n t|jd}| d|z }|s|s|rtd| d|z| d<|r| d<t| || <y)aFUnlike 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.hmtxNHVARfvarrr)r?rtablerVarStoreaxesr.r- AdvWidthMapmappingrinitdrawboundsmaxtuple)varfontr/rClocrD boundsPenrT hvar_tablerVvarStoreInstancergidrEentry width_idx width_deltarF lsb_deltalsbs r:interpolate_cff2_metricsrlzsQ%%K*%I 6?DJ V_** v-j.A.A499cR +' UT%[! %%&22::5A  !"3I">?KK  '  "    #I)**1-.Ca3I  q%(["89aa,DK9'r<zduse fontTools.varLib.instancer.instantiateVariableFont instead for either full or partial instancingc E|s7t}|j||jdt|}|d}|jDcic]0}|j |j |j|jf2}}t||}d|vr?|dj} |jD cic]\} } | t| | | }} } |jD cic]\} } | t| d}} } tjd|d|vr(tjd|d} |dE|d j } t#|j%d d d }t'| j(j+Efd }|D]}| j(|}Ej-|| |\}}d\}}|D]k}t/||j}|s|j0}d |vr/|Ej-|| |\}}t3||j4}|t7||zz }mEj9||| |nd Ed|vr|d=d|vrtjd|d}|d}i}|j(D]V}t/||j}|st;|j0D]#\}}| |j%|d||zz||<%X|jD]\}}||xxt=|z cc<d|vrtjd|j?}|d} | j@jBd}!tE|!jFjH|j|}"|"jJ}#tM|!|#| jOtQ|!|#|tS||!|||!jTd=|!`#d|vrtjd|djV}$tE|$jF|j|}%|$jX}&|&D]^}'|'jZ}(|(t\vrt\|(\})}*t=|%|'j^}|s?ta||)|*t#||)|*|z`tjddD]4})|)|vr ||)jV}+t#|+dd s&|+jb}|jdD]},d}-|,jfjhD]i}.|.jjdk(rR|.jl}/|j|/j }0|.jn}1|.jp}2||0} |1| cxkr|2ksnd}-nd}-|-rin|-s|,jrjtdk(sJ|,jrjvD]4}'|'jx|+jzj||'j~_<6n|+`17d |vr|d jVjtd!k\rtjd"|d jV}3tE|3jF|j|}4t||4}5|5j||gd d#g|3`#d$|3_:|3j |3`Bd|3_:|3jsB|3js6|3js*|3js|3jtd$k\r |3js|d =d}6ErډEjjD]?}7t|7d%s|7jj}8td&|8D}6|6s?n|r|Ej+D]i}9E|9}7|7jr'|7jdxjtzc_O?|7jdkDsO|7jdxxtzcc<k|6r{tjd'g}:d(|vr |d(};|;jj}:n)td(};tj|;_J|;|d(<|:jd)|:jd*tt|g}<|jD]3}|}|jD]8}|>j|j|>j|j:d3|vr|d1jD?cgc]:}?|?j|>vr*|?jdk(r|?jd4k7r |?j<}@}?t|@ttt|d3jk(r|d3=|d1jD?cgc]!}?|?jd5ks|?j|>vr|?#c}?|d1jd d d6|vr.d7|vr*t=tdt|d6d8|d7_jd9|vrE|d9}At'tjD]\}B}CA|Bks C|d7_ln d:|d7_ld;|vr%d<|vr!td=t|d;d>|d<_mtjd?d@D] }D|D|vs|D= |Scc}wcc} } wcc} } wcc}wcc}?wcc}?w)AaNGenerate 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 rrVavarzNormalized location: %sgvarzMutating glyf/gvar tablesglyfrTvmtxmetricsNcr|jr |jj|fSd|fS)Nr) isCompositegetCompositeMaxpValuesmaxComponentDepth)namerqs r:z)instantiateVariableFont..sJDz--/J55d;MM  r<)r5)NNDSIGcvarzMutating cvt/cvar tableszcvt CFF2zMutating CFF2 tablerXMVARzMutating MVAR tablezMutating FeatureVariations)GSUBGPOSFeatureVariationsTrFiGDEFizMutating GDEF/GPOS/GSUB tablesrir@c3>K|]}|jdyw) GETVARIATIONN) startswith).0ops r: z*instantiateVariableFont..isSbmmN;Ssz1Adding IDEF to fpgm table for GETVARIATION opcodefpgmzPUSHB[000] 145zIDEF[ ]z NPUSHW[ ]  zENDF[ ]maxpmaxInstructionDefsmaxStackElementsrxzPruning name tableltagiwghtzOS/2iwdth slntpostiZzRemoving variable tables)rnr{rVrprUr}VVARSTAT)nrsaveseekrrYaxisTagminValue defaultValuemaxValuersegmentsr+rrloginforsgetattrgetsorted variationskeys_getCoordinatesAndControlsr coordinatesrendPtsr _setCoordinatesr.r getGlyphOrdercff topDictIndexrrX otVarStorer0r;desubroutinizerRrlr*rW ValueRecordValueTagrVarIdxsetattrrFeatureVariationRecord ConditionSetConditionTableFormat AxisIndexFilterRangeMinValueFilterRangeMaxValueFeatureTableSubstitutionVersionSubstitutionRecordFeature FeatureList FeatureRecord FeatureIndexr mergeTablesMarkGlyphSetsDef LigCaretListMarkAttachClassDef GlyphClassDef AttachListglyphsvaluesr)r@ getAssemblyanyru componentsflagsr numberOfContoursr r r Programappendstrlenrjoin fromAssemblyr_ axisNameID instancesaddsubfamilyNameIDpostscriptNameIDnamesnameID platformIDlangIDsetrangetagsmin usWeightClassOS2_WIDTH_CLASS_VALUES usWidthClass italicAngle)FralocationinplaceoverlapstreamrVarYrbmapskvrphMetricsvMetrics glyphnames glyphnamerr_ origCoordsrvarscalarr7gr{cvtrQr8crCr|r/ vsInstancerr0mvarrerecordsrecmvarTagtableTagitemNamerWrecordapplies conditionaxisIdxrMinMaxgdef instancermergeraddidefglyph instructions glyph_nameasmrargsrexcludenexcludedUnicodeLangIDsrpercent widthClasstagrqsF @r:instantiateVariableFontrs (  V A. 6?DIM SAAII ANNAJJ? ? SD S Hd +C v''=@YY[ITQq$QQ00II58YY[ ATQ1!!R( ( AC AHH &,  ,-vv6?**7;;v. 4@ OO "  $ MI3J!<<8XNK", J! @&sCHH55=!)(,(G(G%x) A&eZBE/6??  @  K8 L% M(  FO  +,vfo?? >C"31F!#//2 >1= & 1a 06A: =F1I >  >  %HAu Fgen $F % &'**, v((''*'(8(8(C(CTYYPST + A A$W.CD $W.CZP ':sC OOJ '    &'v$$-dmmTYYL"" CllGl*!-g!6 Hh-cjj9:E !)84u<  HH )*"$7" !''u148 ,,  77 FG#00??  ##q('11G"ii088G#77C#77CG A1OO"'#G 66>>*LLL!::MMC %%33C4D4DEM- .  #=$@WV_22::jH 12v$$%dmmTYYD w 27WI/?@ M!  (%%DL   &&!! *t/D/DG [['') Eui($}}88: SlSS   "iik 8 Z($$&$$Q'--1AA-++a/KKN&77N 8 DE W 6?D,,**,CF#D$,,.DL"GFO #$ 9CH  ?A KKLQYY<= > ? <#((4.01 9 !!#& W 6?D *A>RTU0V,V  "CHgd,>BC   %&)-3A1<<33 ,A KK)) * KK** + , W  !..&88w&1<<1+<VAS& "& )*c%WV_=Q=Q8S2T.UUFOV_**$ xx#~!8 $ a f/(/As8F;KT7R0S(T% #)*@*F*F*H#I - GZg~/9, - ,-GFO ( f/&)#s8F3CR/H&I#HH '(O '>  Nq TJ AV4&$ s$5m7m 'mm8?m&m!cddlm}ddl}|jdd}|j ddd |j d d d d|j ddddd|j dddd|j d}|j dddd |j d!d"dd# |j d$d%dd&|j |}|j}|js%tjj|dd'zn |j}||jrd(n|jrd)nd*+i}|jD]D} | jd,\} } t!| d-ksJt#| || j%d-<Ft,j/d/|t,j/d0t1||j21} t5| |d2|j63t,j/d4|| j9|y#t&t(f$r|j+d.| zYwxYw)5zInstantiate a variation fontr) configLoggerNzfonttools varLib.mutatorzInstantiate a variable font) descriptioninputz INPUT.ttfzInput variable TTF file.)metavarhelplocargszAXIS=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.)rnargsrz-oz--outputz OUTPUT.ttfz7Output instance TTF file (default: INPUT-instance.ttf).)rdefaultrz--no-recalc-timestamprecalc_timestamp store_falsez:Don't set the output font's timestamp to the current time.)destactionrF)requiredz-vz --verbose store_truezRun more verbosely.)r!rz-qz--quietzTurn verbosity off.z --no-overlaprz5Don't set OVERLAP_SIMPLE/OVERLAP_COMPOUND glyf flags.z -instance.ttfDEBUGERRORINFO)level=z$invalid location argument format: %rz Location: %szLoading variable font)recalcTimestampT)rrzSaving instance font %s) fontToolsrargparseArgumentParser add_argumentadd_mutually_exclusive_group parse_argsroutputospathsplitextverbosequietrsplitrfloatljust ValueErrorAssertionErrorerrorrrrrrrr) r rr,parser logging_groupoptions varfilenameoutfilerbargrvalras r:mainrDs^&  $ $"0M%F ;UV M    F    I  777GM k,5J i 3H   D  %G--K~~ %a(?: ^^ !//w'--wV CG Gyy~HCs8q= = %c C !  GHH^S!HH $%['2J2JKGGS$PHH &0 LLN+ G LL?#E F GsAH#I?I__main__)FT)N)=__doc__fontTools.misc.fixedToolsrrfontTools.misc.loggingToolsrfontTools.misc.roundToolsrfontTools.pens.boundsPenrfontTools.ttLibrr fontTools.ttLib.tablesr fontTools.ttLib.tables._g_l_y_fr r r fontTools.varLib.modelsrrrfontTools.varLib.mergerrfontTools.varLib.varStorerfontTools.varLib.mvarrfontTools.varLib.iuprfontTools.subset.cffr+os.pathr2loggingior getLoggerrrpercentsr.zipr8prevcurrhalfr;rRrlrrD__name__sysrargvexitdoctesttestmodfailedr<r:resD H9-.,,  27.*g23 F Xcr]HQRL!AK%OA|d 4K1 D#$4 % 3:'-T,'^,P PfGT z 388}q CHH_W__  % %&r<