Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 2øªjïBã @sàdZddddddddd g Zd d lmZd d lmZdd„Zdd„Zddd„Zddd„Z dd„Z dd„Z dd„Z d dd„Z Gdd „d eƒZdd„Zd!dd„ZedkrÜd dlZd dlZeejƒd krÌejeƒƒejejƒjƒdS)"z%Variation fonts interpolation models.ÚnonNoneÚallNoneÚallEqualÚ allEqualToÚsubListÚnormalizeValueÚnormalizeLocationÚ supportScalarÚVariationModelé)ÚnoRoundé)ÚVariationModelErrorcCsdd„|DƒS)NcSsg|]}|dk r|‘qS)N©)Ú.0ÚlrrúsznonNone..r)ÚlstrrrrscCstdd„|DƒƒS)Ncss|]}|dkVqdS)Nr)rrrrrú szallNone..)Úall)rrrrrsNcs>ˆdkrt‡fdd„|DƒƒSˆˆƒ‰t‡‡fdd„|DƒƒS)Nc3s|]}ˆ|kVqdS)Nr)rÚitem)ÚrefrrrszallEqualTo..c3s|]}ˆˆ|ƒkVqdS)Nr)rr)ÚmappedÚmapperrrr s)r)rrrr)rrrrrsc Cs@|sdSt|ƒ}y t|ƒ}Wntk r0dSXt|||d�S)NT)r)ÚiterÚnextÚ StopIterationr)rrÚitÚfirstrrrr#s cCs(t|ƒt|ƒkst‚dd„t||ƒDƒS)NcSsg|]\}}|r|‘qSrr)rrÚtrrrr0szsubList..)ÚlenÚAssertionErrorÚzip)Útruthrrrrr.scCsŽ|\}}}||ko|knsBtd|d›d|d›d|d›�ƒ‚tt||ƒ|ƒ}||kr`d}n*||krz||||}n||||}|S)zØNormalizes value based on a min/default/max triple. >>> normalizeValue(400, (100, 400, 900)) 0.0 >>> normalizeValue(100, (100, 400, 900)) -1.0 >>> normalizeValue(650, (100, 400, 900)) 0.5 z8Invalid axis values, must be minimum, default, maximum: z3.3fz, g)Ú ValueErrorÚmaxÚmin)ÚvÚtripleÚlowerÚdefaultÚupperrrrr3s cCs<i}x2|jƒD]&\}}|j||dƒ}t||ƒ||<qW|S)aÒNormalizes location based on axis min/default/max values from axes. >>> axes = {"wght": (100, 400, 900)} >>> normalizeLocation({"wght": 400}, axes) {'wght': 0.0} >>> normalizeLocation({"wght": 100}, axes) {'wght': -1.0} >>> normalizeLocation({"wght": 900}, axes) {'wght': 1.0} >>> normalizeLocation({"wght": 650}, axes) {'wght': 0.5} >>> normalizeLocation({"wght": 1000}, axes) {'wght': 1.0} >>> normalizeLocation({"wght": 0}, axes) {'wght': -1.0} >>> axes = {"wght": (0, 0, 1000)} >>> normalizeLocation({"wght": 0}, axes) {'wght': 0.0} >>> normalizeLocation({"wght": -1}, axes) {'wght': 0.0} >>> normalizeLocation({"wght": 1000}, axes) {'wght': 1.0} >>> normalizeLocation({"wght": 500}, axes) {'wght': 0.5} >>> normalizeLocation({"wght": 1001}, axes) {'wght': 1.0} >>> axes = {"wght": (0, 1000, 1000)} >>> normalizeLocation({"wght": 0}, axes) {'wght': -1.0} >>> normalizeLocation({"wght": -1}, axes) {'wght': -1.0} >>> normalizeLocation({"wght": 500}, axes) {'wght': -0.5} >>> normalizeLocation({"wght": 1000}, axes) {'wght': 0.0} >>> normalizeLocation({"wght": 1001}, axes) {'wght': 0.0} r )ÚitemsÚgetr)ÚlocationÚaxesÚoutÚtagr(r'rrrrLs &Tc CsÊd}xÀ|jƒD]´\}\}}}|r\|dkr*q||ks||kr>> supportScalar({}, {}) 1.0 >>> supportScalar({'wght':.2}, {}) 1.0 >>> supportScalar({'wght':.2}, {'wght':(0,2,3)}) 0.1 >>> supportScalar({'wght':2.5}, {'wght':(0,2,4)}) 0.75 >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}) 0.75 >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}, ot=False) 0.375 >>> supportScalar({'wght':2.5, 'wdth':0}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}) 0.75 >>> supportScalar({'wght':2.5, 'wdth':.5}, {'wght':(0,2,4), 'wdth':(-1,0,+1)}) 0.75 gð?g)r,r-r!) r.ÚsupportZotÚscalarÚaxisr)Úpeakr+r'rrrrys* c@s¦eZdZdZd dd„Zdd„Zegfdd„ƒZd d „Zd d „Z d d„Z dd„Z e dœdd„Z e dœdd„Zdd„Zedd„ƒZdd„Ze dœdd„Ze dœdd„ZdS)!r a` Locations must be in normalized space. Ie. base master is at origin (0). >>> from pprint import pprint >>> locations = [ {'wght':100}, {'wght':-100}, {'wght':-180}, {'wdth':+.3}, {'wght':+120,'wdth':.3}, {'wght':+120,'wdth':.2}, {}, {'wght':+180,'wdth':.3}, {'wght':+180}, ] >>> model = VariationModel(locations, axisOrder=['wght']) >>> pprint(model.locations) [{}, {'wght': -100}, {'wght': -180}, {'wght': 100}, {'wght': 180}, {'wdth': 0.3}, {'wdth': 0.3, 'wght': 180}, {'wdth': 0.3, 'wght': 120}, {'wdth': 0.2, 'wght': 120}] >>> pprint(model.deltaWeights) [{}, {0: 1.0}, {0: 1.0}, {0: 1.0}, {0: 1.0}, {0: 1.0}, {0: 1.0, 4: 1.0, 5: 1.0}, {0: 1.0, 3: 0.75, 4: 0.25, 5: 1.0, 6: 0.6666666666666666}, {0: 1.0, 3: 0.75, 4: 0.25, 5: 0.6666666666666667, 6: 0.4444444444444445, 7: 0.6666666666666667}] Ncs¦ttdd„ˆDƒƒƒtˆƒkr&tdƒ‚ˆˆ_|dk r8|ngˆ_dd„ˆDƒ‰ˆjˆˆjd�}tˆ|d�ˆ_‡fdd„ˆDƒˆ_‡fd d„ˆjDƒˆ_ ˆj ƒiˆ_ dS) Ncss|]}tt|jƒƒƒVqdS)N)ÚtupleÚsortedr,)rrrrrr×sz*VariationModel.__init__..zLocations must be unique.cSsg|]}dd„|jƒDƒ‘qS)cSsi|]\}}|dkr||“qS)gr)rÚkr'rrrú Ýsz6VariationModel.__init__...)r,)rÚlocrrrrÝsz+VariationModel.__init__..)Ú axisOrder)Úkeycsg|]}ˆjj|ƒ‘qSr)Ú locationsÚindex)rr)Úselfrrräscsg|]}ˆj|ƒ‘qSr)r>)rr)r=rrrås) r Úsetr Ú origLocationsr;ÚgetMasterLocationsSortKeyFuncr7r=ÚmappingÚreverseMappingÚ_computeMasterSupportsÚ _subModels)r?r=r;ZkeyFuncr)r=r?rÚ__init__Ös zVariationModel.__init__cCsbd|kr||fStdd„|Dƒƒ}|jj|ƒ}|dkrTtt||jƒ|jƒ}||j|<|t||ƒfS)Ncss|]}|dk VqdS)Nr)rr'rrrrísz-VariationModel.getSubModel..)r6rFr-r rrAr;)r?r,r<ZsubModelrrrÚ getSubModelês  zVariationModel.getSubModelcCs˜i|krtdƒ‚i}xl|D]d}t|ƒdkr,qtt|ƒƒ}||}||krRdh||<|||ksptd|||fƒ‚||j|ƒqWdd„}|||ƒ}|S)NzBase master not found.r gz&Value "%s" in axisPoints["%s"] --> %scsdd„‰‡‡‡fdd„}|S)NcSs|dkr dS|dkrdSdS)Nr r éÿÿÿÿr r)r'rrrÚsignszJVariationModel.getMasterLocationsSortKeyFunc..getKey..signc s¢tˆƒ}‡fdd„ˆjƒDƒ}‡fdd„ˆDƒ}|j‡fdd„tˆjƒƒDƒƒ|t|ƒ t‡fdd„|Dƒƒt|ƒt‡‡fdd„|Dƒƒt‡fdd„|DƒƒfS) Ncs(g|] \}}|ˆkr|ˆ|kr|‘qSrr)rr4Úvalue)Ú axisPointsrrr sz]VariationModel.getMasterLocationsSortKeyFunc..getKey..key..csg|]}|ˆkr|‘qSrr)rr4)r:rrrscsg|]}|ˆkr|‘qSrr)rr4)r;rrrsc3s$|]}|ˆkrˆj|ƒndVqdS)iN)r>)rr4)r;rrrsz\VariationModel.getMasterLocationsSortKeyFunc..getKey..key..c3s|]}ˆˆ|ƒVqdS)Nr)rr4)r:rJrrrsc3s|]}tˆ|ƒVqdS)N)Úabs)rr4)r:rrr s)r r,Úextendr7Úkeysr6)r:ZrankZ onPointAxesZ orderedAxes)r;rLrJ)r:rr< s    zIVariationModel.getMasterLocationsSortKeyFunc..getKey..keyr)rLr;r<r)r;rLrJrÚgetKeysz.getKey)r r rrr!Úadd)r=r;rLr:r4rKrPÚretrrrrBôs     ! z,VariationModel.getMasterLocationsSortKeyFunccsj‡fdd„|Dƒ}‡fdd„|Dƒˆ_dd„ˆjDƒ‰‡fdd„ˆDƒˆ_‡fdd„ˆjDƒˆ_iˆ_|S)Ncsg|] }ˆ|‘qSrr)rÚidx)Ú master_listrrr,sz1VariationModel.reorderMasters..csg|]}ˆj|‘qSr)rA)rrS)r?rrr-scSsg|]}dd„|jƒDƒ‘qS)cSsi|]\}}|dkr||“qS)gr)rr8r'rrrr9/sz..)r,)rr:rrrr/scsg|]}ˆjj|ƒ‘qSr)r=r>)rr)r?rrr1scsg|]}ˆj|ƒ‘qSr)r>)rr)r=rrr2s)rArCr=rDrF)r?rTrCZnew_listr)r=rTr?rÚreorderMasters)szVariationModel.reorderMasterscCs²g|_|jƒ}�x”t|ƒD�]†\}}t|jƒƒ}�xb|d|…D�]P}t|jƒƒj|ƒsZq@d}xZ|jƒD]N\}\}} } ||ks°||d| kp¬|||dko¨| kn rhd}PqhW|sÀq@i} d} x¨|jƒD]œ}||d} ||ksît‚||\}}} || }}| |k�r&| }| |||}n || krÒ| }| || |}nqÒ|| k�rXi} |} || krÒ|||f| |<qÒWx| jƒD]\}}|||<�q|Wq@W|jj|ƒqW|j ƒdS)NTr FrI) ÚsupportsÚ_locationsToRegionsÚ enumerater@rOÚissubsetr,r!ÚappendÚ_computeDeltaWeights)r?ÚregionsÚiÚregionZlocAxesZ prev_regionZrelevantr4r)r5r+ZbestAxesZ bestRatioÚvalÚlocVZnewLowerZnewUpperZratior(rrrrE6sN "      z%VariationModel._computeMasterSupportsc CsÆ|j}i}i}xN|D]F}x@|jƒD]4\}}t||j||ƒƒ||<t||j||ƒƒ||<q"WqWg}x^|D]V}i} xB|jƒD]6\} } | dkržd| || f| | <qz|| | df| | <qzW|j| ƒqhW|S)Nr )r=r,r&r-r%rZ) r?r=ZminVZmaxVrr8r'r\r:r^r4r`rrrrWns   z"VariationModel._locationsToRegionscCshg|_x\t|jƒD]N\}}i}x4t|jd|…ƒD]\}}t||ƒ}|r2|||<q2W|jj|ƒqWdS)N)Ú deltaWeightsrXr=rVrrZ)r?r]r:Z deltaWeightÚjr2r3rrrr[„s  z#VariationModel._computeDeltaWeights)Úroundc Cs’t|ƒt|jƒkst‚|j}g}xlt|jƒD]^\}}|||}x:|jƒD].\}} | dkrh|||8}qJ|||| 8}qJW|j||ƒƒq,W|S)Nr )r rar!rDrXr,rZ) r?Ú masterValuesrcrCr0r]ÚweightsÚdeltarbZweightrrrÚ getDeltas�s zVariationModel.getDeltascCs"|j|ƒ\}}|j||d�|jfS)N)rc)rHrgrV)r?r,rcÚmodelrrrÚgetDeltasAndSupports�sz#VariationModel.getDeltasAndSupportscs‡fdd„|jDƒS)Ncsg|]}tˆ|ƒ‘qSr)r)rr2)r:rrr¢sz-VariationModel.getScalars..)rV)r?r:r)r:rÚ getScalars¡szVariationModel.getScalarscCsXd}t|ƒt|ƒkst‚x:t||ƒD],\}}|s2q$||}|dkrH|}q$||7}q$W|S)N)r r!r")ÚdeltasÚscalarsr'rfr3Z contributionrrrÚinterpolateFromDeltasAndScalars¤s z.VariationModel.interpolateFromDeltasAndScalarscCs|j|ƒ}|j||ƒS)N)rjrm)r?r:rkrlrrrÚinterpolateFromDeltas²s z$VariationModel.interpolateFromDeltascCs|j||d�}|j||ƒS)N)rc)rgrn)r?r:rdrcrkrrrÚinterpolateFromMasters¶sz%VariationModel.interpolateFromMasterscCs|j||d�}|j||ƒS)N)rc)rgrm)r?rdrlrcrkrrrÚ interpolateFromMastersAndScalarsºsz/VariationModel.interpolateFromMastersAndScalars)N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rGrHÚ staticmethodrBrUrErWr[r rgrirjrmrnrorprrrrr ©s +  4 8  cs¸|jƒ}|sˆSˆ|kr |ˆSt|ƒ}ˆ|kr@ˆ|||St|ƒ}ˆ|kr`ˆ|||St‡fdd„|Dƒƒ}t‡fdd„|Dƒƒ}||}||}|||ˆ|||S)Nc3s|]}|ˆkr|VqdS)Nr)rr8)r'rrrÌsz%piecewiseLinearMap..c3s|]}|ˆkr|VqdS)Nr)rr8)r'rrrÍs)rOr&r%)r'rCrOr8ÚaÚbÚvaZvbr)r'rÚpiecewiseLinearMap¿s ryc s\ddlm}ddl}|jdtjd�}|jdddd d �|jd d �}|jd ddtd�|jdddddd�|j |ƒ}||j d�ddl m }|j røddl m}|ƒ}|j|j ƒdd„|jDƒ}tdƒ||ƒ|jƒtdƒdd„|jDƒ}||ƒn4dd„ttd ƒtd!ƒd"ƒDƒ‰‡fd#d„|jDƒ}t|ƒ} td$ƒ|| jƒtd%ƒ|| jƒdS)&z*Normalize locations on a given designspacer )Ú configLoggerNzfonttools varLib.models)Ú descriptionz --loglevelZLEVELÚINFOz Logging level (defaults to INFO))Úmetavarr*ÚhelpT)Úrequiredz-dz --designspaceZ DESIGNSPACE)r}Útypez-lz --locationsZLOCATIONú+zFMaster locations as comma-separate coordinates. One must be all zeros.)r}Únargsr~)Úlevel)Úpprint)ÚDesignSpaceDocumentcSsg|] }|j‘qSr)r.)rÚsrrrr÷szmain..zOriginal locations:zNormalized locations:cSsg|] }|j‘qSr)r.)rr†rrrrüscSsg|] }t|ƒ‘qSr)Úchr)rÚcrrrrÿsÚAÚZr cs*g|]"}ttˆdd„|jdƒDƒƒƒ‘qS)css|]}t|ƒVqdS)N)Úfloat)rr'rrrrsz"main...ú,)Údictr"Úsplit)rr†)r/rrrszSorted locations:z Supports:)Z fontToolsrzÚargparseÚArgumentParserÚmainrtÚ add_argumentÚadd_mutually_exclusive_groupÚstrÚ parse_argsZloglevelr„Z designspaceZfontTools.designspaceLibr…ÚreadÚsourcesÚprintÚ normalizeÚrangeÚordr=r rV) Úargsrzr�ÚparserÚgroupr„r…ÚdocZlocsrhr)r/rr‘ÓsN           r‘Ú__main__)N)N)T)N)rtÚ__all__ZfontTools.misc.roundToolsr Úerrorsr rrrrrrrrÚobjectr ryr‘rqÚdoctestÚsysr ÚargvÚexitÚtestmodÚfailedrrrrÚs:    - 0 8