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¢ddlmZddlmZmZddlmZmZddlm Z ddl m Z ddl m Z ddlmZddlZddlZddlZddlZejd ƒZe ejed ƒejd �Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z dd„Z!dd„Z"d d!„Z#d"d#„Z$d$d%„Z%ee d&d'�d(d)„ƒZ&e'eee(eeed*œej)d+ƒ_*d,eeeeed-d.„eeed/d.„d0œ Z+ee'e'd1d.„ee%e+ƒeeee,e,e'e'ee'd2d.„eed3œej)d4ƒ_*eee'e'e,e'e'e,e,e'eeeed5œej)d6ƒ_*eee'e'e,e'e'e,e,e'eeeed7œej)d8ƒ_*d,d9d.„eeeeed:œZ-d;d<„Z.eee'e e.eeeeee,e'e'e,e'e'e'e!eƒe!eƒe!e'ƒe!e'ƒe!eƒe!eƒe!e'ƒe!e,ƒe!e'ƒd=œej)d>ƒ_*eej)d>ƒƒd?d)„ƒZ&eee'e,e'd@d.„e'dAd.„e!e#ƒdBd.„dCœ ej)dDƒ_*ee#dEœej)dFƒ_*ej)dGƒ_*eedHœej)dIƒ_*eedJœej)dKƒ_*ee#e"dLœej)dMƒ_*eej)dMƒƒdNd)„ƒZ&dOd.„ej)dPƒ_*dQd.„ej)dRƒ_*dSd.„ej)dTƒ_*dUd.„ej)dVƒ_*dWdX„Z/GdYdZ„dZƒZ0eej)d[ƒƒd\d)„ƒZ&d]d^„Z1d_d`„Z2dadb„Z3dcdd„Z4dedf„Z5dgdh„Z6did.„e6djœej7_*dkd.„dld.„dmœej8_*e(dnd.„doœej9_*e(e"dpœej:_*e,e"dqœej;_*e,e#drœej<_*e$e(e"dsœej=_*e$e(e"dtœej>_*ee(e"duœej?_*dve$iej@_*e(e"dwœejA_*e$e'dxœejB_*ejC_*ejD_*ejE_*ejF_*ejG_*e!eƒe$dyœej)dzƒ_*ej)d{ƒ_*ej)d|ƒ_*ej)d}ƒ_*ej)d~ƒ_*ej)dƒ_*eej)d{ƒƒd€d)„ƒZ&eejHejIejJejKejLejMejNejOejPejQejRƒ d�d‚„ƒZSeejTejUejVejWƒdƒd„„ƒZXeejTejUejVejWƒd…d‚„ƒZSeejYejZƒd†d‚„ƒZSeej[ƒd‡d‚„ƒZSeej:ƒdˆd‚„ƒZSeej\ƒd‰d‚„ƒZSeej9ƒdŠd‚„ƒZSeej]ej^ƒd‹dŒ„ƒZ_eej`ƒd�dŒ„ƒZ_eej7ƒdŽdŒ„ƒZ_Gd�d�„d�eaƒZbGd‘d’„d’eaƒZcGd“d”„d”eaƒZdGd•d–„d–eaƒZeGd—d˜„d˜eaƒZfd�d˜d™gZgedšƒd�d›d™„ƒZhedœk�ržejiehƒƒdS)žé)Ú timestampNow)ÚttLibÚcffLib)ÚotTablesÚ_h_e_a_d)Ú DefaultTable)ÚTimer)ÚDecomposingRecordingPen)ÚreduceNzfontTools.mergez.timer)ÚloggerÚlevelcs|jddƒ‰‡‡fdd„}|S)zLReturns a decorator function that adds a new method to one or more classes.ÚallowDefaultTableFcslg}xbˆD]Z}||krq |j|ƒˆs6|tks6tdƒ‚|j|jksVtd|j|jfƒ‚t||j|ƒq WdS)NzOops, table class not found.z!Oops, class '%s' has method '%s'.)ÚappendrÚAssertionErrorÚ__name__Ú__dict__Úsetattr)ÚmethodÚdoneÚclazz)Ú allowDefaultÚclazzes©ú4/tmp/pip-build-_d5lkt3n/fonttools/fontTools/merge.pyÚwrappers  z_add_method..wrapper)Úget)rÚkwargsrr)rrrÚ _add_methods  rcs>t|ƒ}t|ƒ}t|ƒ‰t‡fdd„|Dƒƒs:td|ƒ‚ˆS)Nc3s|]}|ˆkVqdS)Nr)Ú.0Úitem)Úfirstrrú ,szequal..z"Expected all items to be equal: %s)ÚlistÚiterÚnextÚallr)ÚlstÚtr)r rÚequal(s "r(cCs tt|ƒƒS)N)r$r#)r&rrrr /sr cCstS)N)ÚNotImplemented)r&rrrÚ recalculate2sr*cCstƒS)N)r)r&rrrÚ current_time5sr+cCs ttj|ƒS)N)r ÚoperatorÚand_)r&rrrÚ bitwise_and8sr.cCs ttj|ƒS)N)r r,Úor_)r&rrrÚ bitwise_or;sr0cCst|ƒ}t|ƒt|ƒS)N)r"ÚsumÚlen)r&rrrÚavg_int>sr3cs‡fdd„}|S)zÉReturns a filter func that when called with a list, only calls func on the non-NotImplemented items of the list, and only so if there's at least one item remaining. Otherwise returns NotImplemented.csdd„|Dƒ}|rˆ|ƒStS)NcSsg|]}|tk r|‘qSr)r))rrrrrú Isz1onlyExisting..wrapper..)r))r&Úitems)ÚfuncrrrHszonlyExisting..wrapperr)r6rr)r6rÚ onlyExistingBs r7cCs g}x|D]}|j|ƒq W|S)N)Úextend)r&ÚlrrrrÚsumListsNs r:cCs i}x|D]}|j|ƒq W|S)N)Úupdate)r&ÚdrrrrÚsumDictsTs r=csdd„|Dƒ}|stSdd„|Dƒ}|s,dS|dj‰t‡fdd„|DƒƒsTt|ƒ‚ˆj}ˆƒ}i}tjtƒfdd„|DƒžŽ}x’|D]Љy |ˆ}WnHtk rÞy |d}Wn&tk rØtd ˆˆj fƒ‚YnXYnX|tkrêq†|‡fd d„|Dƒƒ}|tk r†||ˆ<q†W||_ |S) NcSsg|]}|tk r|‘qSr)r))rrrrrr4[sz mergeObjects..cSsg|]}|dk r|‘qS)Nr)rrrrrr4^src3s|]}t|ƒˆkVqdS)N)Útype)rr)rrrr!cszmergeObjects..css|]}t|ƒjƒVqdS)N)ÚvarsÚkeys)rÚtablerrrr!isÚ*z*Don't know how to merge key %s of class %sc3s|]}t|ˆtƒVqdS)N)Úgetattrr))rrA)Úkeyrrr!us) r)Ú __class__r%rÚmergeMapÚsetÚunionÚKeyErrorÚ Exceptionrr)r&ÚlogicÚ returnTableZ returnDictÚallKeysÚ mergeLogicÚvaluer)rrDrÚ mergeObjectsZs8     rPcs‡fdd„}|S)Ncs t|ƒ}d}xŽtˆdƒD]~}y ˆ|}WnBtk rly ˆd}Wn tk rftd|ƒ‚YnXYnXd|>‰|‡fdd„|Dƒƒ}|||>O}qW|S)NrÚsizerBzDon't know how to merge bit %séc3s|]}t|ˆ@ƒVqdS)N)Úbool)rr)Ú shiftedBitrrr!‹sz-mergeBits..wrapper..)r"ÚrangerIrJ)r&Z returnValueZ bitNumberrNZ mergedValue)Úbitmap)rTrrs  zmergeBits..wrapperr)rVrr)rVrÚ mergeBits}s rWT)r cCsHt|dƒstjd|jƒtS|j}t|tƒr<|j||j|ƒS||ƒSdS)NrFzDon't know how to merge '%s'.) ÚhasattrÚlogÚinfoÚtableTagr)rFÚ isinstanceÚdictrP)ÚselfÚmÚtablesrKrrrÚmerge’s  ra)rBr[Ú tableVersionZ numGlyphsZ maxStorageZmaxFunctionDefsZmaxInstructionDefsZmaxpécCsdS)Nrr)ÚbitrrrÚ³srecCsdS)Nrr)rdrrrre·s) rQrBrRééééé é éécCsdS)Nrr)r&rrrre¾scCsdS)Nrfr)r&rrrreÊs)r[rbZ fontRevisionZcheckSumAdjustmentZ magicNumberÚflagsZ unitsPerEmÚcreatedÚmodifiedZxMinZyMinZxMaxZyMaxZmacStyleZ lowestRecPPEMZfontDirectionHintZindexToLocFormatZglyphDataFormatÚhead)rBr[rbÚascentÚdescentÚlineGapZadvanceWidthMaxZminLeftSideBearingZminRightSideBearingZ xMaxExtentÚcaretSlopeRiseÚ caretSlopeRunÚ caretOffsetZnumberOfHMetricsZhhea)rBr[rbrrrsrtZadvanceHeightMaxZminTopSideBearingZminBottomSideBearingZ yMaxExtentrurvrwZnumberOfVMetricsZvheacCsdS)Nrr)rdrrrreós)rQrBrRrfrgéé cCs¤t|ƒ}tdd„|DƒƒrdSxdtt|ƒƒD]T}||d@rN||dM<q,||d@rl||dO<q,||dkr,d||<q,Wttƒ|ƒ}|d@r |d M}|S) Ncss|]}|dkVqdS)rNr)rrrrrr!ýsz!mergeOs2FsType..ré rfrxééýÿÿÿióÿÿÿ)r"r%rUr2rWÚos2FsTypeMergeBitMap)r&ÚiÚfsTyperrrÚmergeOs2FsTypeûs     r€)rBr[ÚversionZ xAvgCharWidthrZpanoseZulUnicodeRange1ZulUnicodeRange2ZulUnicodeRange3ZulUnicodeRange4ZfsFirstCharIndexZfsLastCharIndexZ sTypoAscenderZsTypoDescenderZ sTypoLineGapZ usWinAscentZ usWinDescentZulCodePageRange1ZulCodePageRange2ZsxHeightZ sCapHeightZ usDefaultCharZ usBreakCharZ usMaxContextZusLowerOpticalPointSizeZusUpperOpticalPointSizezOS/2cCsLtj|||ƒ|jdkr&|jdM_|jdkrH|jd@rH|jdM_|S)Nrfirgrxr{iÿüÿÿéûÿÿÿ)rrar�r)r^r_r`rrrra3s   cCsdS)Nrr)r&rrrreGscCsdS)Nrr)r&rrrreIscCsgS)Nr)r&rrrreKs) rBr[Z formatTypeZ isFixedPitchZ minMemType42Z maxMemType42Z minMemType1Z maxMemType1ÚmappingZ extraNamesÚpost)r[ZmetricsZvmtxZhmtx)r[ÚnamesÚname)rBr[Zloca)r[ÚglyphsÚ glyphOrderZglyfcCsVxFt|ƒD]:\}}x0|jjƒD]"}|r.|jƒ|jƒr|j|ƒqWq Wtj|||ƒS)N)Ú enumerater‡ÚvaluesZ removeHintingZ isCompositeÚexpandrra)r^r_r`r~rAÚgrrrracscCst|ƒS)N)r )r^r&rrrreqsÚprepcCst|ƒS)N)r )r^r&rrrrersZfpgmcCst|ƒS)N)r )r^r&rrrresszcvt cCst|ƒS)N)r )r^r&rrrretsZgaspcCsdt|ƒ}t|ƒ}||}||}|j|ƒ|j|ƒ|j|jkob|j|jkobt|dƒ pb|j|jkS)NÚheight)r ZdrawrOÚwidthrXrŽ)Z glyphSet1Z glyphSet2Zglyph1Zglyph2Zpen1Zpen2Zg1Zg2rrrÚ_glyphsAreSamevs    r�c@s"eZdZd d d d hZd ddhZdS)ÚCmapUnicodePlatEncodingsr{rgrRrrirzé N)r{rgrR)r{rrg)r{rr{)r{rri)rzrgr’)rzrr{)rzrri)rÚ __module__Ú __qualname__ÚBMPÚFullRepertoirerrrrr‘…s r‘ÚcmapcCs€g}x¢t|ƒD]–\}}d}d}xV|jD]L}|j|j|jf} | tjkrJ|}q&| tjkrZ|}q&tj d||j|j|jƒq&W|dk rŽ|j ||fƒq|dk r|j ||fƒqWi} i} t |dƒrÊdd„|j Dƒnd} �xþ|D]ö\}}xì|j jƒD]Þ\} }| j| dƒ}|dk�r|| | <|| |<qê||krê|j|j|ƒdk�r¨| dk �r˜| |}x2||fD]&}| |dk�rT|j |jƒ| |<�qTWt| || |||ƒ�r˜qê||j||<qê|j|||krêtj d| |ƒqêWqÖWdd„| jƒDƒ}g|_tjdƒ}t|ƒt| ƒk�r6|jd d ƒ}d |_d |_d |_| |_ |jj |ƒ|jd d ƒ}d |_d|_d |_||_ |jjd |ƒd |_t|jƒ|_|S)NzODropped cmap subtable from font [%s]: format %2s, platformID %2s, platEncID %2sÚfontscSsg|]}d‘qS)Nr)rÚfrrrr4¦szmerge..z4Dropped mapping from codepoint %#06X to glyphId '%s'cSsi|]\}}|dkr||“qS)iÿÿr)rÚuniÚgidrrrú Àszmerge..r—rzrgr’rr{rR)r‰r`ÚformatZ platformIDZ platEncIDr‘r•r–rYÚwarningrrXr˜r—r5rÚduplicateGlyphsPerFontZ getGlyphSetr�rZgetTableModuler2Z cmap_classesÚlanguageÚinsertrbZ numSubTables)r^r_r`Z cmapTablesZfontIdxrAZformat4Zformat12ÚsubtableZ propertiesr—ZfontIndexForGlyphZ glyphSetsršr›ZoldgidZ oldFontIdxÚidxZ cmapBmpOnlyÚmoduleZ cmapTablerrrra‰sr          cCst|ƒS)N)r:)r&rrrÚmergeLookupListsØsr¥cCs:|st‚tjƒ}d|_tdd„|Dƒƒ|_t|jƒ|_|S)NcSsg|]}|jr|j‘qSr)ÚLookupListIndex)rr9rrrr4àsz!mergeFeatures..)rrÚFeatureÚ FeatureParamsr¥r¦r2Ú LookupCount)r&r^rrrÚ mergeFeaturesÜs  rªcCsŠi}x@|D]8}x2|D]*}|j}||kr.g||<||j|jƒqWq Wg}x:t|jƒƒD]*}tjƒ}||_t||ƒ|_|j|ƒqXW|S)N)Ú FeatureTagrr§Úsortedr@rÚ FeatureRecordrª)r&r<r9r™ÚtagÚretÚrecrrrÚmergeFeatureListsäs  r±cCsV|st‚tdd„|Dƒƒst‚tjƒ}d|_d|_tdd„|Dƒƒ|_t|jƒ|_ |S)Ncss|]}|jdkVqdS)iÿÿN)ÚReqFeatureIndex)rr9rrrr!øsz!mergeLangSyses..iÿÿcSsg|]}|jr|j‘qSr)Ú FeatureIndex)rr9rrrr4ýsz"mergeLangSyses..) rr%rÚLangSysZ LookupOrderr²r±r³r2Ú FeatureCount)r&r^rrrÚmergeLangSysesôs r¶c Csä|st‚t|ƒdkr|dSi}xB|D]:}x4|jD]*}|j|krJg||j<||jj|jƒq2Wq&Wg}x:t|jƒƒD]*\}}tjƒ}t |ƒ|_||_|j|ƒqvWtj ƒ}||_t|ƒ|_ dd„|Dƒ}|rÚt |ƒ|_ nd|_ |S)NrRrcSsg|]}|jr|j‘qSr)ÚDefaultLangSys)rÚsrrrr4sz mergeScripts..) rr2Ú LangSysRecordZ LangSysTagrr´r¬r5rr¶ÚScriptZ LangSysCountr·) r&Z langSysesÚsrZlsrZ lsrecordsr®Z langSys_listr^Z dfltLangSysesrrrÚ mergeScriptss.        r¼cCsŠi}x@|D]8}x2|D]*}|j}||kr.g||<||j|jƒqWq Wg}x:t|jƒƒD]*}tjƒ}||_t||ƒ|_|j|ƒqXW|S)N)Ú ScriptTagrrºr¬r@rÚ ScriptRecordr¼)r&r<r9r¸r®r¯r°rrrÚmergeScriptRecordss  r¿cCsdS)Nr)r&rrrre.s)Z ScriptCountr¾cCsdS)Nr)r&rrrre2scCstt|ƒdd„d�S)NcSs|jS)N)Z BaseScriptTag)r¸rrrre4sz..)rD)r¬r:)r&rrrre4s)ZBaseScriptCountZBaseScriptRecordcCstt|ƒdd„d�S)NcSs|jS)N)r«)r¸rrrre9sz..)rD)r¬r:)r&rrrre9s)rµr­)r©ÚLookup)ÚFormatr‡)rÁZ classDefs)ÚCoverageZ LigGlyphCountZLigGlyph)rÂZ GlyphCountZ AttachPoint)ZMarkSetTableFormatZ MarkSetCountrÂrB)Z BaseTagCountZ BaselineTag)rBÚVersion)r[rAÚGDEFÚGSUBÚGPOSÚBASEÚJSTFÚMATHc Cs&t|ƒt|jƒkst‚�xútt||jƒƒD�]ä\}\}}|s>q*|dk rN|tk sbtd|d|fƒ‚d}d}�x¢|jjjD�]’}|j dkrŠqx�x~|j j gdd„|j j DƒD�]\} | dkrºqªdd„| j Dƒ} t| ƒdksÚt‚| rè| d} nx|�s\tjƒ}d|_tjƒ} |_d| _d| _g| _| j j|ƒ| j jd d „d �|jjjj|ƒ|jjjd7_|} |�sætjƒ} || _tjƒ}d|_d|_d|_| g|_|jj dk�rÄtj ƒ|j_ g|jj _d|jj _|jj jj|ƒ|jj jd7_|g| jjdd…<| jjd7_qªWqxWq*Wt!j"|||ƒ|S) Nz6Have duplicates to resolve for font %d but no GSUB: %srRZDFLTcSsg|] }|j‘qSr)r´)rr9rrrr4‰szmerge..cSsg|]}|jdkr|‘qS)Úlocl)r«)rÚvrrrr4‹srrÊcSs|jS)N)r«)rËrrrre˜szmerge..)rD)#r2rŸrr‰Úzipr)rAÚ ScriptListr¾r½rºr·r¹r³rr­r«r§r¨r©r¦rÚsortÚ FeatureListrµÚ SingleSubstrƒrÀZ LookupFlagZ LookupTypeZ SubTableCountÚSubTableÚ LookupListrra) r^r_r`r~rAZdupsZ synthFeatureZ synthLookupÚscriptZlangsysÚfeaturer™r¢rrrra~s^"$ &     cCsdS)Nr)r^Ú lookupMaprrrÚ mapLookupsµs rÖcCsjGdd„dtƒ}|jdkrdSt|jdƒs2i|j_|j|jjkr\||j|jƒ}||jj|j<|jj|jS)Nc@seZdZdd„ZdS)z/__merge_classify_context..ContextHelpercSsœ|jjdƒrd}d}nd}d}|jjdƒr0d}nd}||}||_||_||_||_|d|_|dkr||d|_|d |_ n|d kr˜|d |_|d |_ dS) NZSubstÚSubZPosÚChainÚÚ LookupRecordrRÚRuleÚRuleSetrfZ ClassRuleZClassSet) rÚendswithÚ startswithÚTypÚTyperØÚChainTyprÚrÛrÜ)r^ÚklassrÁrßràrØrárrrÚ__init__Ës(      z8__merge_classify_context..ContextHelper.__init__N)rr“r”rãrrrrÚ ContextHelperÊsrärRrfrgÚ_merge__ContextHelpers)rRrfrg)ÚobjectrÁrXrErå)r^räÚhelperrrrÚ__merge_classify_contextÄs  rècCs¾|jƒ}|jdkrtx¦t||jƒD]N}|s*q xBt||jƒD]2}|sBq8x&t||jƒD]}|sZqP||j|_qPWq8Wq WnF|jdkr¨x:t||jƒD]}|s–qŒ||j|_qŒWndsºtd|jƒ‚dS)NrRrfrgrzunknown format: %s)rRrf)rèrÁrCrÜrÛrÚr¦r)r^rÕÚcÚrsÚrZllrrrrÖðs$  cCs.|jdkr|jj|ƒnds*td|jƒ‚dS)NrRrzunknown format: %s)rÁZ ExtSubTablerÖr)r^rÕrrrrÖs cCs$x|jD]}|sq|j|ƒqWdS)N)rÑrÖ)r^rÕÚstrrrrÖs cCs$x|jD]}|sq|j|ƒqWdS)N)rÀrÖ)r^rÕr9rrrrÖs cs‡fdd„|jDƒ|_dS)Ncsg|] }ˆ|‘qSrr)rr~)rÕrrr4szmapLookups..)r¦)r^rÕr)rÕrrÖscCs0x*|jD] }| s|j rq|jj|ƒqWdS)N)r­r§rÖ)r^rÕr™rrrrÖs cs0‡fdd„|jDƒ|_|jdkr,ˆ|j|_dS)Ncsg|] }ˆ|‘qSrr)rr~)Ú featureMaprrr4'szmapFeatures..iÿÿ)r³r²)r^rír)rírÚ mapFeatures$s rîcCsB|jr|jj|ƒx*|jD] }| s|j r.q|jj|ƒqWdS)N)r·rîr¹r´)r^rír9rrrrî+s   cCs0x*|jD] }| s|j rq|jj|ƒqWdS)N)r¾rºrî)r^rír¸rrrrî3s c@s8eZdZGdd„deƒZdd„Zdd„Zgfdd„Zd S) ÚOptionsc@s eZdZdS)zOptions.UnknownOptionErrorN)rr“r”rrrrÚUnknownOptionError<srðcKsd|_d|_|jf|ŽdS)NF)ÚverboseÚtimingrG)r^rrrrrã?szOptions.__init__cKs>x8|jƒD],\}}t||ƒs*|jd|ƒ‚t|||ƒq WdS)NzUnknown option '%s')r5rXrðr)r^rÚkrËrrrrGFs z Options.setcCsêg}i}�xÎ|D�]Ä}|}|jdƒs0|j|ƒq|dd…}|jdƒ}d}|dkrx|jdƒrn|dd…} d} q¸|} d} n@|d|…} | dd kr¨| dd}| dd…} ||dd…} | jd d ƒ} t|| ƒ�sü|dksà| |krî|j|ƒqn|jd |ƒ‚t|| ƒ} t| tƒ�rt| ƒ} n²t| t ƒ�r2t | ƒ} nœt| t ƒ�rÎ| j d ƒ} | dgk�rXg} dd„| Dƒ} |dk�rv| } nX|dk�r�| } | j | ƒn>|dk�rÄ| } x.| D]} | | k�r¤| j | ƒ�q¤Wn d�sÎt‚| || <qW|jf|Ž|S)Nz--rfú=rRzno-rgFTz-+ú-Ú_zUnknown option '%s'ú,rÙcSs.g|]&}t|ƒr&|ddkr&t|dƒn|‘qS)rÚ 0123456789)r2Úint)rÚxrrrr4usz&Options.parse_opts..z+=z-=réÿÿÿÿrûrûrû)rÞrÚfindÚreplacerXrðrCr\rSrùr"Úsplitr8ÚremoverrG)r^ÚargvZignore_unknownr¯ÚoptsÚaZorig_ar~ÚoprórËÚovÚvvrúrrrÚ parse_optsLsf                              zOptions.parse_optsN)rr“r”rJrðrãrGrrrrrrï:srïc@s eZdZdZdd„Zdd„ZdS)Ú _AttendanceRecordingIdentityDictzVA dictionary-like object that records indices of items actually accessed from a list.cCs&||_dd„t|ƒDƒ|_tƒ|_dS)NcSsi|]\}}|t|ƒ“qSr)Úid)rr~rËrrrrœŽsz=_AttendanceRecordingIdentityDict.__init__..)r9r‰r<rGr¸)r^r&rrrrãŒsz)_AttendanceRecordingIdentityDict.__init__cCs|jj|jt|ƒƒ|S)N)r¸Úaddr<r)r^rËrrrÚ __getitem__‘sz,_AttendanceRecordingIdentityDict.__getitem__N)rr“r”Ú__doc__rãr rrrrrˆsrc@s eZdZdZdd„Zdd„ZdS)Ú_GregariousIdentityDictzoA dictionary-like object that welcomes guests without reservations and adds them to the end of the guest list.cCs||_tdd„|Dƒƒ|_dS)Ncss|]}t|ƒVqdS)N)r)rrËrrrr!›sz3_GregariousIdentityDict.__init__..)r9rGr¸)r^r&rrrrã™sz _GregariousIdentityDict.__init__cCs.t|ƒ|jkr*|jjt|ƒƒ|jj|ƒ|S)N)rr¸r r9r)r^rËrrrr �s z#_GregariousIdentityDict.__getitem__N)rr“r”r rãr rrrrr •sr c@s2eZdZdZd dd„Zdd„Zdd„Zd d „ZdS) Ú_NonhashableDictz3A dictionary-like object mapping objects to values.NcCs8|dkrdd„t|ƒDƒ|_ndd„t||ƒDƒ|_dS)NcSsi|]\}}|t|ƒ“qSr)r)rr~rËrrrrœ¨sz-_NonhashableDict.__init__..cSsi|]\}}|t|ƒ“qSr)r)rrórËrrrrœªs)r‰r<rÌ)r^r@rŠrrrrã¦sz_NonhashableDict.__init__cCs|jt|ƒS)N)r<r)r^rórrrr ¬sz_NonhashableDict.__getitem__cCs||jt|ƒ<dS)N)r<r)r^rórËrrrÚ __setitem__¯sz_NonhashableDict.__setitem__cCs|jt|ƒ=dS)N)r<r)r^rórrrÚ __delitem__²sz_NonhashableDict.__delitem__)N)rr“r”r rãr rrrrrrr £s  r c@sBeZdZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚMergeraÌFont merger. This class merges multiple files into a single OpenType font, taking into account complexities such as OpenType layout (``GSUB``/``GPOS``) tables and cross-font metrics (e.g. ``hhea.ascent`` is set to the maximum value across all the fonts). If multiple glyphs map to the same Unicode value, and the glyphs are considered sufficiently different (that is, they differ in any of paths, widths, or height), then subsequent glyphs are renamed and a lookup in the ``locl`` feature will be created to disambiguate them. For example, if the arguments are an Arabic font and a Latin font and both contain a set of parentheses, the Latin glyphs will be renamed to ``parenleft#1`` and ``parenright#1``, and a lookup will be inserted into the to ``locl`` feature (creating it if necessary) under the ``latn`` script to substitute ``parenleft`` with ``parenleft#1`` etc. Restrictions: - All fonts must currently have TrueType outlines (``glyf`` table). Merging fonts with CFF outlines is not supported. - All fonts must have the same units per em. - If duplicate glyph disambiguation takes place as described above then the fonts must have a ``GSUB`` table. Attributes: options: Currently unused. NcCs|s tƒ}||_dS)N)rïÚoptions)r^rrrrrãÓszMerger.__init__c s¦tjƒ}dd„|Dƒ}dd„|Dƒ}|j|ƒ}dd„|Dƒ}x t||ƒD]\}}|j|ƒqHW|j|ƒx|D]}|j|ƒqnW||_dd„|Dƒ|_tt j dd„|Dƒt ƒƒ}|j dƒd |krÚ|j d ƒd gt |ƒ}d |krú|j d ƒd gt |ƒ}x”|D]Œ‰t d ˆƒ�t‡fd d„|Dƒ} tjd ˆƒtjˆƒ} | ˆƒj|| ƒ} | tk �rt| dk �rt| |ˆ<tjdˆƒn tjdˆƒWdQRX�qW|`|`|j|ƒ|S)zÏMerges fonts together. Args: fontfiles: A list of file names to be merged Returns: A :class:`fontTools.ttLib.TTFont` object. Call the ``save`` method on this to write it out to an OTF file. cSsg|]}tj|ƒ‘qSr)rÚTTFont)rÚfontfilerrrr4ész Merger.merge..cSsg|] }|jƒ‘qSr)Z getGlyphOrder)rÚfontrrrr4êscSsg|]}tj|ƒ‘qSr)rr)rrrrrr4ïscSsg|]}i‘qSrr)rrörrrr4øscss|]}t|jƒƒVqdS)N)r"r@)rrrrrr!úszMerger.merge..Z GlyphOrderrÅr—z merge '%s'csg|]}|jˆtƒ‘qSr)rr))rr)r®rrr4sz Merging '%s'.Fz Merged '%s'.z Dropped '%s'.N)rrÚ_mergeGlyphOrdersrÌZ setGlyphOrderÚ _preMerger˜rŸr rGrHrÿr"ÚtimerrYrZÚ getTableClassrar)Ú _postMerge) r^Z fontfilesÚmegar˜Ú glyphOrdersZmegaGlyphOrderrrˆZallTagsr`rrAr)r®rraÚsD           z Merger.mergecCsŽi}x||D]t}xnt|ƒD]b\}}||krr||}x |dt|ƒ|krP|d7}q2W|||<|dt|ƒ7}|||<d||<qWq Wt|jƒƒS)zdModifies passed-in glyphOrders to reflect new glyph names. Returns glyphOrder for the merged font.ú#rR)r‰Úreprr"r@)r^rrrˆr~Z glyphNameÚnrrrrs  zMerger._mergeGlyphOrderscsºtjtƒfdd„|DƒžŽ}x˜|D]�‰y |ˆ}WnJtk r|y |d}Wn(tk rvtdˆ|jjfƒ‚YnXYnX|tkrˆq"|‡fdd„|Dƒƒ}|tk r"t|ˆ|ƒq"W|S)Ncss"|]}|tk rt|ƒjƒVqdS)N)r)r?r@)rrArrrr!/sz&Merger.mergeObjects..rBz*Don't know how to merge key %s of class %sc3s|]}t|ˆtƒVqdS)N)rCr))rrA)rDrrr!;s)rGrHrIrJrErr)r)r^rLrKr`rMrNrOr)rDrrP+s    zMerger.mergeObjectscCs¬|jdƒ}|jdƒ}|jdƒ}xˆ||gD]|}|s2q(|jjrndd„t|jjjƒDƒ}|jjj|ƒ|jjj|ƒ|jjr(|jjr(dd„t|jjjƒDƒ}|jjj |ƒq(WdS)NrÄrÅrÆcSsi|]\}}||“qSrr)rr~rËrrrrœMsz$Merger._preMerge..cSsi|]\}}||“qSrr)rr~rËrrrrœRs) rrArÒr‰rÀrÖrÏrÍr­rî)r^rrÄrÅrÆr'rÕrírrrrAs   zMerger._preMergecs |jdƒ}|jdƒ}|jdƒ}�xz||gD�]l}|s6q*|jjrÖ|jjrÖt|jjjƒ}|jjj|ƒt|jjjƒ}|jjj|ƒ|j‰‡fdd„t |jjjƒDƒ|jj_t |jjjƒ}|jjj|ƒt |jjjƒ|jj_ |jj r*t|jj jƒ}|jjj|ƒ|jj j|ƒt|jj jƒ}|jjj|ƒ|jj j|ƒ|j‰‡fdd„t |jj jƒDƒ|jj _t |jj jƒ}|jjj|ƒ|jj j|ƒt |jj jƒ|jj _q*WdS)NrÄrÅrÆcsg|]\}}|ˆkr|‘qSrr)rr~r™)Ú usedIndicesrrr4osz%Merger._postMerge..csg|]\}}|ˆkr|‘qSrr)rr~r9)rrrr4…s)rrArÏrÍr r­rîrr¸r‰r r2rµrÒrÀrÖr©)r^rrÄrÅrÆr'rírÕr)rrrXs:   ""zMerger._postMerge)N) rr“r”r rãrarrPrrrrrrrµs ArÚmainz%make one with everything (TOTAL TIME)c CsÀddlm}|dkr"tjdd…}tƒ}|j|ƒ}t|ƒdkrPtdtjd�dS||j r^t j nt j d�|j r~tjjt jƒndtj_t|d �}|j|ƒ}d }td ƒ�|j|ƒWdQRXdS) zMerge multiple fonts into oner)Ú configLoggerNrRzusage: pyftmerge font...)Úfile)r T)rz merged.ttfzcompile and save font)Ú fontToolsr!Úsysrrïrr2ÚprintÚstderrrñÚloggingÚINFOÚWARNINGròrr ÚsetLevelÚDEBUGÚdisabledrraÚsave)Úargsr!rZmergerrÚoutfilerrrr ˜s"      Ú__main__)N)jZfontTools.misc.timeToolsrr#rrZfontTools.ttLib.tablesrrZ#fontTools.ttLib.tables.DefaultTablerZfontTools.misc.loggingToolsrZfontTools.pens.recordingPenr Ú functoolsr r$Útimer,r'Ú getLoggerrYrr(rrr(r r*r+r.r0r3r7r:r=rPrWraÚmaxr1rrFZheadFlagsMergeBitMapÚminr}r€r�r‘r¥rªr±r¶r¼r¿rÍZBaseScriptListrÏrÒrÂÚClassDefZ LigCaretListZ AttachListZMarkGlyphSetsDefZAxisZ BaseTagListrÄrÅrÆrÇrÈrÉrÐZ MultipleSubstZAlternateSubstZ LigatureSubstZReverseChainSingleSubstZ SinglePosZPairPosZ CursivePosZ MarkBasePosZ MarkLigPosZ MarkMarkPosrÖZ ContextSubstZChainContextSubstZ ContextPosZChainContextPosrèZExtensionSubstZ ExtensionPosrÀr§r·r´rîrºrærïrr r rÚ__all__r ÚexitrrrrÚsÊ       # O          4 L7)N _