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ùAã@sœddlmZmZddlmZddlmZddlm Z m Z m Z m Z ddl mZddlmZdd„ZGd d „d eƒZed œd d „Zeej_dd„Zeej_Gdd„deƒZddeƒfdd„Zeej_dd„Z e ej_!dd„Z"dd„Z#dd„Z$e$ej%_&e$ej'_&dd„Z(d d!„Z)e)ej%_*e)ej'_*Gd"d#„d#eƒZ+Gd$d%„d%e,ƒZ-d&d'„Z.e.ej_/d-d)d*„Z0e1d+k�r˜dd(l2Z2e3e2j4ƒd,k�r€e2j5e0ƒƒdd(l6Z6e2j5e6j7ƒj8ƒd(S).é)ÚnoRoundÚotRound)ÚotTables)Ú supportScalar)ÚbuildVarRegionListÚ buildVarStoreÚbuildVarRegionÚ buildVarData)Úpartial)Ú defaultdictcCstt|jƒdd„d�ƒS)NcSs|dS)Nr©)Úkvr r ú>/tmp/pip-build-_d5lkt3n/fonttools/fontTools/varLib/varStore.pyÚ sz!_getLocationKey..)Úkey)ÚtupleÚsortedÚitems)Úlocr r rÚ_getLocationKey src@sLeZdZdd„Zdd„Zdd„Zddd „Zd d „Zd d „Ze dœdd„Z dS)ÚOnlineVarStoreBuildercCsN||_i|_tg|ƒ|_t|jgƒ|_d|_d|_d|_i|_ i|_ i|_ dS)N) Ú _axisTagsÚ _regionMaprÚ _regionListrÚ_storeÚ_dataÚ_modelÚ _supportsÚ_varDataIndicesÚ_varDataCachesÚ_cache)ÚselfZaxisTagsr r rÚ__init__s zOnlineVarStoreBuilder.__init__cCs|j|jƒ||_dS)N)Ú setSupportsÚsupportsr)r!Úmodelr r rÚsetModels zOnlineVarStoreBuilder.setModelcCs2d|_t|ƒ|_|jds"|jd=i|_d|_dS)Nr)rÚlistrr r)r!r$r r rr# s   z!OnlineVarStoreBuilder.setSupportsTcCsPt|jjƒ|j_t|jjƒ|j_x(|jjD]}t|jƒ|_|j |d�q*W|jS)N)Úoptimize) ÚlenrÚRegionÚ RegionCountrÚVarDataÚ VarDataCountÚItemÚ ItemCountÚcalculateNumShorts)r!r(Údatar r rÚfinish(s  zOnlineVarStoreBuilder.finishc Cs,|j}|j}|j}g}xZ|D]R}t|ƒ}|j|ƒ}|dkrdt||jƒ}t|jƒ}||<|jj |ƒ|j |ƒqWt |ƒ}|j j|ƒ} | dk rÂ| |_ |j j| |_|j||_t|jjƒdkrÂd} | dk�r(t|gdd�|_t|j jƒ|_ |j jj |jƒ|j |j |<||jk�ri|j|<|j||_dS)NiÿÿF)r()rrrrÚgetrrr)r*ÚappendrrÚ_outerrr,rrr r.r ) r!Ú regionMapÚ regionListÚregionsÚ regionIndicesZregionrÚidxZ varRegionZ varDataIdxr r rÚ _add_VarData0s8          z"OnlineVarStoreBuilder._add_VarDatacCs,|jj|td�}|jdƒ}||j|td�fS)N)Úroundr)rZ getDeltasr<ÚpopÚ storeDeltasr)r!Z master_valuesÚdeltasÚbaser r rÚ storeMastersTs z"OnlineVarStoreBuilder.storeMasters)r<csЇfdd„|Dƒ}t|ƒt|jƒdkr:t|dd…ƒ}nt|ƒt|jƒksPt‚t|ƒ}|jj|ƒ}|dk rp|S|js~|jƒt|jjƒ}|dkr¤|jƒ|j |ƒS|jj |t d�|j d>|}||j|<|S)Ncsg|] }ˆ|ƒ‘qSr r )Ú.0Úd)r<r rú Zsz5OnlineVarStoreBuilder.storeDeltas..éiÿÿ)r<é) r)rrÚAssertionErrorr r3rr;r.r>ÚaddItemrr5)r!r?r<ÚvarIdxÚinnerr )r<rr>Ys$    z!OnlineVarStoreBuilder.storeDeltasN)T) Ú__name__Ú __module__Ú __qualname__r"r&r#r2r;rAr<r>r r r rrs  $r)r<csz‡fdd„|Dƒ}|j}t|ƒ}|d|kr>t|dd…ƒ}n||ksRt||fƒ‚t|ƒ}|jjt|ƒƒt|jƒ|_dS)Ncsg|] }ˆ|ƒ‘qSr r )rBrC)r<r rrDssz#VarData_addItem..rE)ÚVarRegionCountr)rrGr.r4r'r/)r!r?r<ZcountUsZ countThemr )r<rÚVarData_addItemrs rOcs‡fdd„t|jƒDƒS)Ncs2i|]*\}}|jdkr|j|j|jfˆ|j“qS)r)Z PeakCoordZ StartCoordZEndCoordZaxisTag)rBÚiÚreg)Ú fvar_axesr rú ‚sz)VarRegion_get_support..)Ú enumerateZ VarRegionAxis)r!rRr )rRrÚVarRegion_get_support�s rUc@sLeZdZifdd„Zdd„Zdd„Zdd„Zed d „ƒZd d „Z d d„Z dS)ÚVarStoreInstancercCsL||_|dks|jdkst‚|r&|jng|_|r8|jjng|_|j|ƒdS)NrE) rRZFormatrGr,Ú_varDataÚ VarRegionListr*Ú_regionsÚ setLocation)r!ZvarstorerRÚlocationr r rr"Œs zVarStoreInstancer.__init__cCst|ƒ|_|jƒdS)N)Údictr[Ú _clearCaches)r!r[r r rrZ“s zVarStoreInstancer.setLocationcCs i|_dS)N)Ú_scalars)r!r r rr]—szVarStoreInstancer._clearCachescCs@|jj|ƒ}|dkr<|j|j|jƒ}t|j|ƒ}||j|<|S)N)r^r3rYÚ get_supportrRrr[)r!Ú regionIdxZscalarZsupportr r rÚ _getScalaršs    zVarStoreInstancer._getScalarcCs2d}x(t||ƒD]\}}|sq|||7}qW|S)Ng)Úzip)r?ÚscalarsÚdeltarCÚsr r rÚinterpolateFromDeltasAndScalars¢s z1VarStoreInstancer.interpolateFromDeltasAndScalarscsJ|d?|d@}}ˆj}‡fdd„||jDƒ}||j|}ˆj||ƒS)NrFiÿÿcsg|]}ˆj|ƒ‘qSr )ra)rBÚri)r!r rrD­sz1VarStoreInstancer.__getitem__..)rWÚVarRegionIndexr.rf)r!ZvaridxÚmajorÚminorÚvarDatarcr?r )r!rÚ __getitem__ªs zVarStoreInstancer.__getitem__cs*ˆj}‡fdd„||jDƒ}ˆj||ƒS)Ncsg|]}ˆj|ƒ‘qSr )ra)rBrg)r!r rrD³sz;VarStoreInstancer.interpolateFromDeltas..)rWrhrf)r!Z varDataIndexr?rkrcr )r!rÚinterpolateFromDeltas±s z'VarStoreInstancer.interpolateFromDeltasN) rKrLrMr"rZr]raÚ staticmethodrfrlrmr r r rrVŠs  rVTFcCsœi}xF|D]>}|d?}|d@}|j|ƒ} | dkr>tƒ} ||<| j|ƒq W~|j} g} i} �xt| ƒD�]\}} |j|ƒ}|dkr†qht| ƒ}| j| ƒ| j}g}|dkrö|röx¬tt|ƒƒD]4}|j||krÔ||ndgt||ƒƒ|| |<q¼Wnf|dk�rt |ƒt ||ƒ}nt |ƒ}x<|D]4}t|ƒ}|j||ƒ|d>|| |d>|<�q$W|| _t| jƒ| _ | j |d�qhW| |_t|jƒ|_ |j ƒ| S)NrFiÿÿr)r()r3ÚsetÚaddr,rTr)r4r.Úrangerr/r0r-Ú prune_regions)r!ZvarIdxesr(ZretainFirstMapZadvIdxesÚusedrIrirjrCrkZ newVarDataZ varDataMapr1Z usedMinorsZnewMajorrZnewItemsZminorsZnewMinorr r rÚVarStore_subset_varidxes¾sL     (    rtcsžtƒ}x|jD]}|j|jƒqW|j}|j}g}i‰x*t|ƒD]}t|ƒˆ|<|j||ƒq@W||_t|jƒ|_ x$|jD]}‡fdd„|jDƒ|_q|WdS)zRemove unused VarRegions.csg|] }ˆ|‘qSr r )rBrP)r6r rrD sz*VarStore_prune_regions..N) ror,ÚupdaterhrXr*rr)r4r+)r!Z usedRegionsr1r7r8Z newRegionsrPr )r6rÚVarStore_prune_regions÷s    rvcCs´t|ƒtjkr||ƒn˜t|tƒr|jƒdS)z6Add VarIdx in this Device table (if any) to the set s.i€rFN)Ú DeltaFormatrpÚ StartSizeÚEndSize)r!rer r rÚ_Device_recordVarIdx's r‡cCstt|d�}t||ƒdS)N)re)r r‡r{)r!ZvaridxesZadderr r rÚObject_collect_device_varidxes,s rˆcCsTt|ƒ|krdS|jt|ƒƒ|jdkrP||jd>|j}|d?|_|d@|_dS)z9Map VarIdx in this Device table (if any) through mapping.Ni€rFiÿÿ)Úidrpr„r…r†)r!ÚmappingÚdonerIr r rÚ_Device_mapVarIdx3s   rŒcCstt|tƒd�}t||ƒdS)N)rŠr‹)r rŒror{)r!Z varidxes_mapZmapperr r rÚObject_remap_device_varidxes=sr�c@s€eZdZdd„Zdd„Zdd„Zdd„ZeeƒZed d „ƒZ d d „Z d d„Z dd„Z dd„Z edd„ƒZedd„ƒZdd„ZdS)Ú _EncodingcCs*||_|j|ƒ|_|j|ƒ|_tƒ|_dS)N)ÚcharsÚ _popcountÚwidthÚ_characteristic_overheadÚoverheadror)r!r�r r rr"Gs  z_Encoding.__init__cCs|jj|ƒdS)N)rrp)r!Úrowr r rr4Msz_Encoding.appendcCs|jj|ƒdS)N)rru)r!Úlstr r rÚextendPsz_Encoding.extendcCs$t|jƒ}td|jd||jƒS)zxMaximum number of bytes that can be added to characteristic while still being beneficial to merge it into another one.rrE)r)rÚmaxr“r‘)r!Úcountr r rÚget_roomSs z_Encoding.get_roomcCs$t|jƒ}td|j||jdƒS)zKMaximum possible byte gain from merging this into another characteristic.rrE)r)rr—r“r‘)r!r˜r r rÚgainZs z_Encoding.gaincCs |j|jfS)N)r‘r�)r!r r rÚsort_keyasz_Encoding.sort_keycCs t|jƒS)N)r)r)r!r r rÚ__len__dsz_Encoding.__len__cCs||j@ S)N)r�)r!r�r r rÚ can_encodegsz_Encoding.can_encodecCs|j|j|j@ƒS)N)r�r�)r!Úotherr r rÚ__sub__jsz_Encoding.__sub__cCst|ƒjdƒS)NÚ1)Úbinr˜)Únr r rr�msz_Encoding._popcountcCs*d}x |r$|d@r|d7}|dL}qW|S)zIReturns overhead in bytes of encoding this characteristic as a VarData.éééér )r�Úcr r rr’ss  z"_Encoding._characteristic_overheadcCsZd|_xNt|jd|j|jdƒD].}x"||D]}|j|jƒr2Pq2Wd}||_q$WdS)NrE)Úbest_new_encodingrqr‘Úroomr�r�)r!Ú done_by_widthZ new_widthZ new_encodingr r rÚ _find_yourself_best_new_encoding~s" z*_Encoding._find_yourself_best_new_encodingN)rKrLrMr"r4r–r™Úpropertyr©ršr›rœr�rŸrnr�r’r«r r r rrŽEs   rŽc@s(eZdZdd„Zdd„Zedd„ƒZdS)Ú _EncodingDictcCst|ƒ}||<|S)N)rŽ)r!r�Úrr r rÚ __missing__‹sz_EncodingDict.__missing__cCs|j|ƒ}||j|ƒdS)N)Ú_row_characteristicsr4)r!r”r�r r rÚadd_row�s z_EncodingDict.add_rowcCsÊd}d}d}xb|D]Z}|r"||7}d |ko4dknsF||d7}d|koXdknsdd }P|d K}qW|rÆd}d}xH|D]@}|r–||d 7}d|ko¨dknsº||d 7}|d K}q‚W|S)z+Returns encoding characteristics for a row.FrrEé€ér¥i€iÿTr¦éé i€ÿÿÿi€ÿÿi€ÿÿr )r”Z longWordsr�rPÚvr r rr°“s,       z"_EncodingDict._row_characteristicsN)rKrLrMr¯r±rnr°r r r rr­‰sr­cCs¦t|jjƒ}dg|}i}tƒ}x†t|jƒD]x\}}|j}xht|jƒD]Z\}} t|ƒ} x&t || ƒD]\} } | | | 7<qbWt | ƒ} |j | ƒ| ||d>|<qFWq,Wt |j ƒtjdd�}ttƒ} g}x.|D]&}|jsê| |jj|ƒqÎ|j|ƒqÎW|jtjd�x|D]}|j| ƒ�q W�xn|�r�|jƒ}d}d}xæt|ƒD]Ú\}}|j|jB}tj|ƒ}tj|ƒ}|j |j|||jt|ƒ||jt|ƒ}|jdk�r²dn|j |jj|jt|ƒ}|jdk�ràdn|j |jj|jt|ƒ}||}||k�rD|}||}�qDW|dk�r>| |jj|ƒnN||}|j|jB}t|ƒ}|j|jƒ|j|jƒ|j| ƒ||=|j|ƒ�q$Wi}t| j ƒgƒ}|jtj d�g|_xvt|ƒD]j\}}t!jƒ}|jj|ƒt"|ƒ|_t|jƒ|_#t |jƒ|_x(t|jƒD]\}} |d>||| <�q W�qÂWi}x"|jƒD]\}} || ||<�q>W|j$ƒt|jjƒ|j_%t|jƒ|_&x$|jD]}t|jƒ|_'|j(ƒ�q„W|S)z@Optimize storage. Returns mapping from old VarIdxes to new ones.rrFT)rÚreverse)rN))r)rXr*r­rTr,rhr.r'rbrr±rr€rŽrœr ršr‘r4Úsortr™r«r=r�r�r’r“r¨r–rÚsumr›ryrqrNrrr+r-r/r()r!r¢ZzeroesZ front_mappingÚ encodingsrir1r9rjÚitemr”r`r¶rªÚtodoÚencodingZbest_idxZ best_gainrPZother_encodingZcombined_charsZcombined_widthZcombined_overheadZ combined_gainZ this_gainZ other_gainZ separate_gainZcombined_encodingZ back_mappingÚ varidx_mapÚkr r rÚVarStore_optimize²s”         6             rÀNcCs&ddlm}ddlm}ddlm}ddlm}|dtj d�}|j dƒ|j d d d �|j |ƒ}|d d �|j }|j }||ƒ} | d} | jj} |ƒ} | j| | ƒt| jƒƒ} td| ƒ| jƒ}| jj|ƒd| krä| djj|ƒ|ƒ} | j| | ƒt| jƒƒ} td| ƒ|dk �r"| j|ƒdS)z&Optimize a font's GDEF variation storer)ÚArgumentParser)Ú configLogger)ÚTTFont)Ú OTTableWriterzvarLib.varStore)ÚprogÚ descriptionÚfontfileÚoutfileú?)ÚnargsÚINFO)ÚlevelÚGDEFzBefore: %7d bytesÚGPOSzAfter: %7d bytesN)ÚargparserÁZ fontToolsrÂZfontTools.ttLibrÃZfontTools.ttLib.tables.otBaserÄÚmainÚ__doc__Ú add_argumentÚ parse_argsrÇrÈÚtableÚVarStoreÚcompiler)Z getAllDataÚprintr(Úremap_device_varidxesÚsave)ÚargsrÁrÂrÃrÄÚparserÚoptionsrÇrÈÚfontZgdefÚstoreÚwriterÚsizer¾r r rrÐ/s8               rÐÚ__main__rE)N)9ZfontTools.misc.roundToolsrrZfontTools.ttLib.tablesrryZfontTools.varLib.modelsrZfontTools.varLib.builderrrrr Ú functoolsr Ú collectionsr rÚobjectrr<rOr,rHrUZ VarRegionr_rVrortrÕZsubset_varidxesrvrrr{r‡rˆrÍZcollect_device_varidxesrÎrŒr�rØrŽr\r­rÀr(rÐrKÚsysr)ÚargvÚexitÚdoctestÚtestmodÚfailedr r r rÚsH    d 47 D)z *