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ÏŠã @sädZddlmZddlmZmZddlmZmZddl m Z m Z ddl m Z mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZmZmZdd lmZddl m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+m,Z,ddl-Z.ddl/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5m6Z6e/j7dƒZ8dZ9dd„Z:dd„Z;dd „Zd)d*„Z?d+d,„Z@e,d-d.d/d0d1d2d3gƒZAeAd4d5d6d7d8dd9�ZBeAd:d;dd?d9�ZCd@dA„ZDdBdC„ZEdDdE„ZFdydFdG„ZGdHdI„ZHdJdK„ZIdLdM„ZJdNdO„ZKe,dPdQdRdSdTdUdVdWdXdYg ƒZLdZd[„ZMd\d]„ZNdd^d_d`dadbdcdddedfœ ZOdgdh„ZPdidj„gd&fdkdl„ZQdmdj„fdndo„ZRdpdj„fdqdr„ZSGdsdt„dteTƒZUdzdudv„ZVeWdwk�ràddlXZXeYeXjZƒdk�rÈeXj[eVƒƒddl\Z\eXj[e\j]ƒj^ƒdS){aÆ Module for dealing with 'gvar'-style font variations, also known as run-time interpolation. The ideas here are very similar to MutatorMath. There is even code to read MutatorMath .designspace files in the varLib.designspace module. For now, if you run this file on a designspace file, it tries to find ttf-interpolatable files for the masters and build a variable-font from them. Such ttf-interpolatable and designspace files can be generated from a Glyphs source, eg., using noto-source as an example: $ fontmake -o ttf-interpolatable -g NotoSansArabic-MM.glyphs Then you can make a variable-font this way: $ fonttools varLib master_ufo/NotoSansArabic.designspace API *will* change in near future. é)ÚVector)ÚnoRoundÚotRound)ÚTagÚtostr)ÚTTFontÚnewTable)ÚAxisÚ NamedInstance)ÚGlyphCoordinates)ÚProgram)ÚTupleVariation)ÚotTables)Ú OTTableWriter)ÚbuilderÚmodelsÚvarStore)ÚVariationMerger)Ú MVAR_ENTRIES)Úiup_delta_optimize)ÚaddFeatureVariations)ÚDesignSpaceDocument)Úpartial)Ú OrderedDictÚ namedtupleN)Údeepcopy)Úpformaté)Ú VarLibErrorÚVarLibValidationErrorzfontTools.varLibz1com.github.fonttools.varLib.featureVarsFeatureTagc sdˆst‚tˆtƒst‚tjdƒtdƒ}|d}xjˆjƒD]^}tƒ}t|j ƒ|_ |j |j |j |_|_|_|j|j|dd�|_t|jƒ|_|jj|ƒq:Wx¬|D]¤}|j}d|jkræ|jsÌtd|›d�ƒ‚t|jƒ} t|jƒ| d<n|j} |j} t ƒ} |j| ƒ| _!| d k �r"t| ƒ} |j"| ƒ| _#‡fd d „|j$ƒDƒ| _%|j&j| ƒq¢Wd|k�sXt‚||d<|S) zÍ Add 'fvar' table to font. axes is an ordered dictionary of DesignspaceAxis objects. instances is list of dictionary objects with 'location', 'stylename', and possibly 'postscriptfontname' entries. zGenerating fvarÚfvarÚnameé)Z minNameIDÚenzInstance at location 'z’' must have a default English style name ('stylename' attribute on the instance element or a stylename element with an 'xml:lang="en"' attribute).Ncs&i|]\}}ˆ|j|ƒˆ|j“qS©)Ú map_backwardÚtag)Ú.0ÚkÚv)Úaxesr$ú>/tmp/pip-build-_d5lkt3n/fonttools/fontTools/varLib/__init__.pyú isz_add_fvar..)'ÚAssertionErrorÚ isinstancerÚlogÚinforÚvaluesr rr&ÚaxisTagÚminimumÚdefaultÚmaximumZminValueÚ defaultValueZmaxValueZaddMultilingualNameÚ labelNamesÚ axisNameIDÚintÚhiddenÚflagsr*ÚappendÚlocationÚlocalisedStyleNameÚ styleNamerÚdictrZpostScriptFontNamer ZsubfamilyNameIDZaddNameZpostscriptNameIDÚitemsÚ coordinatesÚ instances) Úfontr*rCr Z nameTableÚaÚaxisÚinstancerBr>ZpsnameÚinstr$)r*r+Ú _add_fvar8s@          rIcsD|st‚t|tƒst‚tjdƒtdƒ}d}�xä|jƒD�]Ö‰ddddddi}|jˆj<ˆj sbq8t ˆj ƒ}dd„|Dƒ}dd„|Dƒ}ˆj t |ƒkr°t d ˆj›d ˆj ›d �ƒ‚ˆjt|ƒkrØt d ˆj›d ˆj›d �ƒ‚ˆj|k�rþt d ˆj›dˆj›d�ƒ‚tt|ƒƒt|ƒk�r&t d ˆj›d�ƒ‚t |ƒ|k�rFt d ˆj›d�ƒ‚ˆj ˆjˆjf‰t‡fdd„ˆDƒƒ‰‡fdd„|Dƒ}‡fdd„|Dƒ}tdd„t||ƒDƒƒ�r¬q8d}|jt||ƒƒd|k�rØ|ddk�sÜt‚d|k�sø|ddk�søt‚d|ks8|d d!ks8t‚q8Wd|k�s"t‚|�s8tjdƒd}n||d<|S)"zX Add 'avar' table to font. axes is an ordered dictionary of AxisDescriptor objects. zGenerating avarÚavarFçð?gcSsg|] }|d‘qS)rr$)r'Úitemr$r$r+ú Žsz_add_avar..cSsg|] }|d‘qS)rr$)r'rLr$r$r+rM�szAxis 'z6': there must be a mapping for the axis minimum value z/ and it must be the lowest input mapping value.z6': there must be a mapping for the axis maximum value z0 and it must be the highest input mapping value.z6': there must be a mapping for the axis default value Ú.zO': All axis mapping input='...' values must be unique, but we found duplicates.z4': mapping output values must be in ascending order.c3s|]}ˆj|ƒVqdS)N)Ú map_forward)r'r))rFr$r+ú °sz_add_avar..csg|]}tj|ˆƒ‘qSr$)rÚnormalizeValue)r'r))Ú keys_tripler$r+rM²scsg|]}tj|ˆƒ‘qSr$)rrQ)r'r))Ú vals_tripler$r+rM³scss|]\}}||kVqdS)Nr$)r'r(r)r$r$r+rPµsTzNo need for avarNgð¿gð¿gð¿gð¿gð¿rKrKrK)r-r.rr/r0rr1Úsegmentsr&ÚmapÚsortedr3Úminrr!r5Úmaxr4ÚlenÚsetÚtupleÚallÚzipÚupdate)rDr*rJÚ interestingZcurverAÚkeysÚvalsr$)rFrRrSr+Ú _add_avarrsX    rbcCs>d|kr dSddlm}|d}dd„|jDƒ}|||ƒdS)NÚSTATé)ÚbuildStatTabler cSsg|]}t|j|jd�‘qS))r&r!)r@r2r8)r'rEr$r$r+rMÔsz_add_stat..)ZotlLib.builderrer*)rDr*reZ fvarTabler$r$r+Ú _add_statÉs  rfÚ _MasterDataÚglyfÚhMetricsÚvMetricsçà?Tcsd|dkrtdƒ‚tjdƒd|ks&t‚tdƒ}|d<|d}|jd}dd„|Dƒ}�x|jƒD�]ø‰|ˆjƒ} ‡fdd„|Dƒ} | |d jdkr¦d d„| Dƒ} |j | ƒ\} } d d„| Dƒ} d d„| Dƒ} | d}t j | ƒsòtj d ˆƒqb~ g|j ˆ<| j| ttjtd�d�}| j}t|ƒt|ƒk�s2t‚|d}|j}�xtt|d d…|d d…ƒƒD]ö\}\}}tdd„|jDƒƒ�r�| �r��qbt||ƒ}|�rFt||||d�}d|k�rFtdd„|Dƒƒ�rædgdgt|ƒd }t||ƒ}t|jƒƒ}|j|ƒ\}}t|ƒt|ƒ}|j|ƒ\}}t|ƒt|ƒ}||k�rF|}|j ˆj|ƒ�qbWqbWdS)Nrz&`tolerance` must be a positive number.zGenerating gvarÚgvarrhc Ss0g|](}t|d|djt|jdƒddƒƒ‘qS)rhÚhmtxÚvmtxÚmetricsN)rgroÚgetattrÚget)r'Úmr$r$r+rMãsz_add_gvar..cs g|]}|jjˆ|j|jƒ‘qSr$)rhZ_getCoordinatesAndControlsrirj)r'rr)Úglyphr$r+rMísrcSs*g|]"}|dk r"|djdkr"|nd‘qS)Nrr)ÚnumberOfContours)r'Údr$r$r+rMõscSsg|] }|d‘qS)rr$)r'rur$r$r+rMûscSsg|] }|d‘qS)rr$)r'rur$r$r+rMüsz+glyph %s has incompatible masters; skipping)Úroundcss|]}|dkVqdS)rNr$)r'r)r$r$r+rPsz_add_gvar..)Ú tolerancecss|]}|dkVqdS)Nr$)r'rur$r$r+rPs)rr) Ú ValueErrorr/r0r-rÚreverseMappingÚ getGlyphOrderÚ isCompositertÚ getSubModelrÚallEqualÚwarningÚ variationsZ getDeltasrr Ú __round__rvÚsupportsrYÚendPtsÚ enumerater]r\Úarrayr rrVr`Úcompiler<)rDÚ masterModelÚ master_ttfsrwÚoptimizerlrhZdefaultMasterIndexZ master_datasr{ZallDataÚmodelZ allCoordsZ allControlsÚcontrolÚdeltasr�Z origCoordsr‚ÚiÚdeltaÚsupportÚvarZ delta_optZvar_optÚ axis_tagsZ tupleDataZauxDataZunoptimized_lenZ optimized_lenr$)rsr+Ú _add_gvarÙs`       .     r‘cCsTxdD]}||kr||=qW|d}xdD]}t||d ƒq*Wd |_|djƒdS)NÚcvarúcvt ÚfpgmÚprepÚmaxpÚmaxTwilightPointsÚ maxStorageÚmaxFunctionDefsÚmaxInstructionDefsÚmaxStackElementsÚmaxSizeOfInstructionsrrrh)r’r“r”r•)r—r˜r™ršr›rœ)ÚsetattrZmaxZonesZ removeHinting)rDr&r–Úattrr$r$r+Ú_remove_TTHinting.s   rŸcsötjdƒd|kst‚xfdD]^‰‡fdd„|Dƒ}|s8qt|jˆƒddƒ‰t‡fdd „|Dƒƒrtjd ˆƒt|ƒdSqW|d }d d„|Dƒ}xx|jj ƒD]j\‰}‡fd d„|Dƒ}t|ƒsÄq |j |ƒt|ddƒ‰t‡fdd „|Dƒƒr tjdˆƒt|ƒdSq Wdd„|Dƒ}t j |ƒ}|�s0dSt j dd „|Dƒƒ�s\tjdƒt|ƒdSg} |j|td�\} } x\tt| dd…| dd…ƒƒD]:\} \} }tdd „| Dƒƒ�r¶�q’t|| ƒ}| j|ƒ�q’W| �ròtdƒ}|d<d|_| |_dS)NzMerging TT hintingr’r”r•csg|]}ˆ|kr|ˆj‘qSr$)Úprogram)r'rr)r&r$r+rMCsz$_merge_TTHinting..r c3s|]}|ˆkVqdS)Nr$)r'Úpgm)Úfont_pgmr$r+rPGsz#_merge_TTHinting..z:Masters have incompatible %s tables, hinting is discarded.rhcSsg|] }|d‘qS)rhr$)r'rrr$r$r+rMOscsg|]}t|jˆƒddƒ‘qS)r N)rprq)r'rh)r!r$r+rMRsc3s|]}|r|ˆkVqdS)Nr$)r'r¡)r¢r$r+rPYszMMasters have incompatible glyph programs in glyph '%s', hinting is discarded.cSs&g|]}d|krt|djƒnd‘qS)zcvt N)rr1)r'rrr$r$r+rMascss|]}t|ƒVqdS)N)rY)r'Úcr$r$r+rPisz;Masters have incompatible cvt tables, hinting is discarded.)rvrcss|]}|dkVqdS)rNr$)r'r)r$r$r+rPqs)r”r•)r/r0r-rprqÚanyr~rŸZglyphsrAÚexpandrZnonNoner}ÚgetDeltasAndSupportsrvrƒr]r\r r<rÚversionr)rDr†r‡Zall_pgmsZ font_glyfZ master_glyfsrsZall_cvsZ nonNone_cvsrr‹r�rŒr�rŽr�r’r$)r¢r!r&r+Ú_merge_TTHinting9sX        , r¨Ú_MetricsFieldsÚtableTagÚ metricsTagÚsb1Úsb2Ú advMappingÚ vOrigMappingÚHVARrmZLsbMapZRsbMapZ AdvWidthMap)rªr«r¬r­r®r¯ÚVVARrnZTsbMapZBsbMapZ AdvHeightMapZVOrgMapcCst||||tƒdS)N)Ú _add_VHVARÚ HVAR_FIELDS)rDr†r‡ÚaxisTagsr$r$r+Ú _add_HVAR†srµcCst||||tƒdS)N)r²Ú VVAR_FIELDS)rDr†r‡r´r$r$r+Ú _add_VVAR‰sr·cs.|j}||kst‚tjd|ƒt|ƒ}tt|ƒ}|ƒ}|_d|_|j ƒ} |j ‰‡fdd„|Dƒ} |dkr¤d|dkr¤dd„|Dƒ} d d„|Dƒ} t t | | ƒƒ} nd} t ||||| | | ƒ\} }}| |_|dkràt||jdƒnt||j|ƒ|dk �rt||j|ƒt||jdƒt||jdƒ|||<dS) Nz Generating icsg|]}|ˆj‘qSr$)ro)r'rr)r«r$r+rMšsz_add_VHVAR..r±ÚVORGrcSsg|]}|dj‘qS)r¸)ZVOriginRecords)r'rrr$r$r+rMžscSsg|]}|dj‘qS)r¸)ZdefaultVertOriginY)r'rrr$r$r+rMŸs)rªr-r/r0rrpÚotÚtableÚVersionrzr«Úlistr]Ú_get_advance_metricsÚVarStorer�r®r¯r¬r­)rDr†r‡r´Z tableFieldsrªZVHVARZ tableClassZvhvarÚ glyphOrderÚ advMetricsesÚvOrigMetricsesZ defaultYOrigsÚ metricsStoreÚadvanceMappingr¯r$)r«r+r²Œs8      r²csxi}i}x0|D](‰‡fdd„|Dƒ} |j| td�|ˆ<qWtjdd„|jƒDƒƒ} |rŒd} x0|D](‰‡fdd„|Dƒ} |j| td�|ˆ<q`Wd} | �rtt|jƒƒƒddd…} tj| |ƒ}t t t | ƒƒƒ}tj |gdd �}x"|D]}|j ||d td�qäW|jƒtj||gƒ} tj|ƒ}i‰x6|D].}||\}} |j| ƒ|j|td�ˆ|<�q,W|�r i‰x6|D].}||\}} |j| ƒ|j|td�ˆ|<�qnW|jƒ}|jƒ‰‡‡fd d„|Dƒ‰tjˆ|ƒ}|�rꇇfd d„|Dƒ‰d}d}| �rHtƒ}| j||ƒt |jƒƒ}tƒ}|j||ƒ|j||ƒt |jƒƒ}||k}|�rX| }d}n|}|�rntjˆ|ƒ}|||fS) Ncs$g|]}ˆ|kr|ˆdnd‘qS)rNr$)r'ro)rsr$r+rM»sz(_get_advance_metrics..)rvcss|]}t|dƒVqdS)rN)Úid)r'r)r$r$r+rP¾sz'_get_advance_metrics..Fcs$g|]\}}ˆ|kr|ˆn|‘qSr$r$)r'roZ defaultVOrig)rsr$r+rMÆsr)rˆrcsg|]}ˆˆ|‘qSr$r$)r'Úg)r®Úmapping2r$r+rMçscsg|]}ˆˆ|‘qSr$r$)r'rÅ)rÆÚvOrigMapr$r+rMës)r¦rvrr}r1ÚnextÚiterrZbuildVarRegionListr¼ÚrangerYZ buildVarDataZaddItemrrˆZ buildVarStorerÚOnlineVarStoreBuilderZ setSupportsZ storeDeltasÚfinishZbuildVarIdxMaprr…Z getAllData)rDr†r‡r´r¿rÀrÁZvhAdvanceDeltasAndSupportsZvOrigDeltasAndSupportsZ vhAdvancesZ singleModelZvOrigsZ directStorer�Z varTupleListZvarTupleIndexesZvarDataZ glyphNameZ storeBuilderr‹Z indirectStorerÃZ useDirectr¯ÚwriterZ directSizeZ indirectSizerÂr$)r®rsrÆrÇr+r½µst                   r½cs tjdƒtj|ƒ}g}d}d}d}dddœ} �xBttjƒdd„d�D�](\} \} ‰| |krâd}}| |krÞ|| }g}xL|D]D} | | ks¨| | kr´t| | ˆƒ| | kr´|jdƒq~|j| | ƒq~W|j |ƒ\} }|j | ƒ| }|dkrìqF‡fdd„|Dƒ}t j |ƒ�r|d d}}n|j |ƒ\}}t|ˆ|ƒ|dk�r@qFtjd | | ˆ|ƒtjƒ}| |_||_|j|ƒqFWd |k�s‚t‚|�r|jƒ}|jƒ}x|D]}||j|_�qžWtd ƒ}|d <tjƒ}|_d |_d |_||_d |_t|ƒ|_t|dd„d�|_dS)NzGenerating MVARi€)ZundsZundocSs|dS)Nrr$)Úkvr$r$r+Úsz_add_MVAR..)Úkeycsg|]}t|ˆƒ‘qSr$)rp)r'rº)ÚitemNamer$r+rM4sz_add_MVAR..rz %s: %s.%s %sÚMVARiécSs|jS)N)ÚValueTag)Úrr$r$r+rÏSsi€ÿÿi€ÿÿ) r/r0rrËrVrrArpr<r|ZsetModelrr}Z storeMastersr�r¹ZMetricsValueRecordrÔZVarIdxr-rÌrˆrrÒrºr»ZReservedr¾ZValueRecordSizerYZValueRecordCountZ ValueRecord)rDr†r‡r´Ú store_builderÚrecordsZ lastTableTagZ fontTableZtablesZ specialTagsr&rªÚmasterr‰Z master_valuesÚbaseZvarIdxZrecÚstoreÚmappingrÒZmvarr$)rÑr+Ú _add_MVARsd   &        rÜcCsbtjdƒt|||ƒ}|j||dgƒ|jjƒ}|js:dS|dj}|jdksRt ‚d|_||_ dS)NzGenerating BASEÚBASEii) r/r0rÚ mergeTablesrÖrÌÚVarDatarºr»r-r¾)rDr†r‡r´ÚmergerrÚrÙr$r$r+Ú _add_BASEVs    rác Csòtjdƒt|||ƒ}|j||dddgƒ|jjƒ}|js>dSy|dj}|jdksXt ‚Wn\t k r¶t dƒ|d<t dƒ}|d<t j ƒ}|_d|_d|_d|_d|_d|_YnXd|_||_|jƒ}|j|ƒd|krî|djj|ƒdS)NzMerging OpenType Layout tablesÚGSUBÚGDEFÚGPOSii)r/r0rrÞrÖrÌrßrºr»r-ÚKeyErrorrr¹rãZ GlyphClassDefZ AttachListZ LigCaretListZMarkAttachClassDefZMarkGlyphSetsDefr¾rˆZremap_device_varidxes) rDr‰Ú master_fontsr´ràrÚrãZ GDEFTableZ varidx_mapr$r$r+Ú _merge_OTLfs0       rçcsô‡fdd„}tjdƒdd„|jƒDƒ}g}x¶|D]®}g} x†|jD]|} i} xh| D]`} | d} | ddk rx|| | dƒ}nd }| d dk r˜|| | d ƒ}nd}|| }||f| |<qPW| j| ƒqBWd d„|jDƒ}|j| |fƒq2Wt|||ƒdS) Ncstj||iˆƒ|S)N)rÚnormalizeLocation)r!Úvalue)Úinternal_axis_supportsr$r+Ú normalizeˆs z/_add_GSUB_feature_variations..normalizez!Generating GSUB FeatureVariationscSsi|]\}}|j|“qSr$)r&)r'r!rFr$r$r+r,�sz0_add_GSUB_feature_variations..r!r3gð?r5cSsi|]\}}||“qSr$r$)r'r(r)r$r$r+r,¥sgð¿)r/r0rAZ conditionSetsr<Úsubsr)rDr*rêÚrulesÚ featureTagrër�Zconditional_subsZruleZregionZ conditionsÚspaceÚ conditionÚ axis_namer3r5r&rìr$)rêr+Ú_add_GSUB_feature_variations†s,       ròÚ_DesignSpaceDatar*rêÚbase_idxÚnormalized_master_locsÚmastersrCríÚrulesProcessingLastÚlibcCsPddlm}|jƒ}d|kr0ddlm}||ƒ|j||jƒ}|||||ƒdS)Nr)Úmerge_region_fontsÚCFF2)ÚconvertCFFtoCFF2)ZcffrùrzrûZreorderMastersry)ZvarFontr‰rærùr¿rûZordered_fonts_listr$r$r+Ú _add_CFF2¼s  rücsŽt|dƒr|}n tj|ƒ}|j}|s,tdƒ‚|j}tddddiffdddd iffd d dd iffd dddiffddddiffgƒ}|jsŽtdƒ‚tƒ}x¸t|jƒD]ª\}‰ˆj }|sÔˆj sÈtd|›d�ƒ‚ˆj }ˆ_ ||k�rˆj dkrö||dˆ_ ˆj �sBˆj j ||dƒn.ˆj �s,td|›d�ƒ‚ˆj �sBt |ƒˆj d<ˆ||<q Wtjdtdd„|jƒDƒƒƒ�x||D]ü}|j �pŽ|j�pŽd} |j} | dk�r°td| ›d�ƒ‚x2| jƒD]&}||k�rºtd|›d| ›d �ƒ‚�qºWxŒ|jƒD]€\}‰|| k�rˆjˆjƒ| |<nZˆj| |ƒ} ˆj| k�o8ˆjkn�sîtd| ›d!|›d"| ›d#ˆj›d$ˆj›d%� ƒ‚�qîW�qxWd&d„|Dƒ} tjd't| ƒƒi‰x:|jƒD].‰ˆjˆjˆjf} ‡fd(d„| Dƒˆˆj <�q¤Wtjd)tˆƒƒ‡fd*d„| Dƒ}tjd+t|ƒƒd}xDt|ƒD]8\}}td,d-„|jƒDƒƒ�r|dk �rHtd.ƒ‚|}�qW|dk�rdtd/ƒ‚tjd0|ƒt|ˆ|||||j|j|jƒ S)1NÚsourcesz*Designspace must have at least one source.ZweightÚwghtr#ZWeightÚwidthÚwdthZWidthZslantÚslntZSlantZopticalZopszz Optical SizeZitalicZitalZItalicz(Designspace must have at least one axis.zAxis at index z needs a tag.rrzAxes: %scSsg|] }|jƒ‘qSr$)Zasdict)r'rFr$r$r+rMõsz$load_designspace..ÚzSource or instance 'z' has no location.zLocation axis 'z' unknown for 'z'.z&' has out-of-range location for axis 'z': is mapped to z but must be in mapped range [z..z'] (NOTE: all values are in user-space).cSsg|] }|j‘qSr$)r=)r'Úor$r$r+rMszInternal master locations: %scsg|]}ˆj|ƒ‘qSr$)rO)r'r))rFr$r+rMszInternal axis supports: %scsg|]}tj|ˆƒ‘qSr$)rrè)r'rr)rêr$r+rMszNormalized master locations: %scss|]}|dkVqdS)rNr$)r'r)r$r$r+rP$sz#load_designspace..z/More than one base master found in Designspace.z5Base master not found; no master at default location?zIndex of base master: %s) ÚhasattrrÚfromfilerýrrCrr*rƒr!r&r7r^rr/r0rr1r?r=r`rArOr4r%r3r5r\rórír÷rø)Ú designspaceÚdsrörCZstandard_axis_mapr*Z axis_indexrñÚobjZobj_nameÚlocr)Zinternal_master_locsZtriplerõrôrŒrrr$)rFrêr+Úload_designspaceÇs           6    r rdééééérÓé ) é2g@O@éKgàU@édg \@é}é–éÈcCsèd|krœd|krLttdt|ddƒƒƒ}|dj|krLtjd|ƒ||d_d|krœtt|ddƒdƒ}ttj|tƒƒ}|dj |krœtjd |ƒ||d_ d |kräd |krätdt|d d ƒƒ}|d j |krätjd |ƒ||d _ dS)NzOS/2rþrièzSetting OS/2.usWeightClass = %srrrzSetting OS/2.usWidthClass = %srÚpostéZzSetting post.italicAngle = %si¦ÿÿÿ) rrXrWZ usWeightClassr/r0rZpiecewiseLinearMapÚWDTH_VALUE_TO_OS2_WIDTH_CLASSZ usWidthClassÚ italicAngle)rDr=Z weight_classZ widthValueZ widthClassrr$r$r+Úset_default_weight_width_slantKs$     rcCs|S)Nr$)Úsr$r$r+rÏdsrÏc sÖt|dƒr n tj|ƒ}t|ƒ‰tjdƒtjdƒt||ƒ}g}x@|D]8}y|j|jj j ƒWqFt k r||jdƒYqFXqFWt |ˆj ƒ}t|ˆjˆjƒ}d|kr´t|ˆjƒd|krÈt|ˆjƒ‡fdd„ˆjDƒ} d d„|jDƒ} tj| | d �} d | jˆj k�st‚tjd ƒd |k�r..)rA)r'r )rr$r+rM‹szbuild..cSsg|] }|j‘qSr$)r2)r'rFr$r$r+rMŽs)Z axisOrderrzBuilding variations tablesrÝrÒr°r±rnrãrärlrh)rˆr’râZrcltZrvrnrúzCFF rg@cSsi|]}|j|j“qSr$)r6r2)r'rFr$r$r+r,´szbuild..r )r=)*rrrr r/r0Ú load_mastersr<ÚreaderÚfiler!ÚAttributeErrorrrôrIr*rCrfrbrõrZVariationModelrÛr-rárÜrµr·rçr‘r¨rírørqÚFEAVAR_FEATURETAG_LIB_KEYr÷ròrêrüZ formatTypeZ extraNamesr)rÚ master_finderÚexcluderˆrær‡rØÚvfr rõr´r‰rîrr&r$)rr+Úbuilddsr                  r%cCs|S)Nr$)rr$r$r+rÏ¿scCstddlm}tjj|ƒ}||ƒ}|dkr8||ƒ}||ƒ}|d krRtƒ}|j|ƒn|d krdt|ƒ}n td |ƒ‚|S) Nr)Ú guessFileTypeÚTTXÚOTXÚTTFÚOTFÚWOFFÚWOFF2zInvalid master path: %r)r'r()r)r*r+r,)Z fontTools.ttxr&ÚosÚpathÚnormpathrZ importXMLr)r.r"r&Z master_pathÚtprDr$r$r+Ú _open_font¿s     r1cCs|S)Nr$)rr$r$r+rÏÕscCsDx4|jD]*}|jr|jdkrtd|jp(d›d�ƒ‚qW|jt|d�S)aéEnsure that all SourceDescriptor.font attributes have an appropriate TTFont object loaded, or else open TTFont objects from the SourceDescriptor.path attributes. The paths can point to either an OpenType font, a TTX file, or a UFO. In the latter case, use the provided master_finder callable to map from UFO paths to the respective master font binaries (e.g. .ttf, .otf or .ttx). Return list of master TTFont objects in the same order they are listed in the DesignSpaceDocument. NzDesignspace source 'z zV' specified a layer name but lacks the required TTFont object in the 'font' attribute.)r")rýZ layerNamerDrr!ZloadSourceFontsr1)rr"rØr$r$r+rÕs rc@seZdZdd„Zdd„ZdS)Ú MasterFindercCs ||_dS)N)Útemplate)Úselfr3r$r$r+Ú__init__ðszMasterFinder.__init__cCsNtjj|ƒ}tjj|ƒ\}}tjj|ƒ\}}|jj|||||d�}tjj|ƒS)N)ÚfullnameÚdirnameÚbasenameÚstemÚext)r-r.ÚabspathÚsplitÚsplitextr3Úformatr/)r4Zsrc_pathr6r7r8r9r:r.r$r$r+Ú__call__ós zMasterFinder.__call__N)Ú__name__Ú __module__Ú __qualname__r5r?r$r$r$r+r2îsr2c CsTddlm}ddlm}|dtjd�}|jdƒ|jddd d d d �|jd dddgdd�|jddddd�|jdddd�|jdd�}|jddd d!d"�|jd#d$d d%d"�|j|ƒ}||j rÂd&n |j rÌd'nd(d)�|j }t |j ƒ}t|||j|jd*�\}} } |j} | d k�r:|jd+k�rd,nd-} tjj|ƒdd.| } tjd/| ƒ|j| ƒd S)0z9Build a variable font from a designspace file and mastersr)ÚArgumentParser)Ú configLoggerZvarLib)ÚprogÚ descriptionrz-oZ OUTPUTFILEÚoutfileNz output file)ÚmetavarÚdestr4Úhelpz-xZTAGr#r<z exclude table)rHrIÚactionr4rJz --disable-iuprˆÚ store_falsezdo not perform IUP optimization)rIrKrJz--master-finderz$master_ttf_interpolatable/{stem}.ttfa°templated string used for finding binary font files given the source file names defined in the designspace document. The following special strings are defined: {fullname} is the absolute source file name; {basename} is the file name without its directory; {stem} is the basename without the file extension; {ext} is the source file extension; {dirname} is the directory of the absolute file name. The default value is "%(default)s".)r4rJF)Úrequiredz-vz --verboseÚ store_truezRun more verbosely.)rKrJz-qz--quietzTurn verbosity off.ÚDEBUGÚERRORÚINFO)Úlevel)r#rˆZOTTOZotfZttfz-VF.zSaving variation font %s)ÚargparserCZ fontToolsrDÚmainÚ__doc__Ú add_argumentÚadd_mutually_exclusive_groupÚ parse_argsÚverboseÚquietrr2r"r%r#rˆrGZ sfntVersionr-r.r=r/r0Úsave) ÚargsrCrDÚparserZ logging_groupÚoptionsZdesignspace_filenameÚfinderr$Ú_rGr:r$r$r+rTsj          rTÚ__main__)rkT)N)N)_rUZfontTools.misc.vectorrZfontTools.misc.roundToolsrrZfontTools.misc.textToolsrrZfontTools.ttLibrrZfontTools.ttLib.tables._f_v_a_rr r ZfontTools.ttLib.tables._g_l_y_fr Z fontTools.ttLib.tables.ttProgramr Z%fontTools.ttLib.tables.TupleVariationr ZfontTools.ttLib.tablesrr¹ZfontTools.ttLib.tables.otBaserZfontTools.varLibrrrZfontTools.varLib.mergerrZfontTools.varLib.mvarrZfontTools.varLib.iuprZfontTools.varLib.featureVarsrZfontTools.designspaceLibrÚ functoolsrÚ collectionsrrÚos.pathr-ÚloggingÚcopyrÚpprintrÚerrorsrrÚ getLoggerr/r!rIrbrfrgr‘rŸr¨r©r³r¶rµr·r²r½rÜrárçròrórür rrr%r1rÚobjectr2rTr@ÚsysrYÚargvÚexitÚdoctestÚtestmodÚfailedr$r$r$r+Ús                :W U D  * QO & x[ N