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ñ0ã@sÔdZddlmZmZddlmZddlmZddlm Z ddl m Z ddl Z ddl Z Gdd „d eƒZGd d „d eƒZd d „Zdd„Zdd„Zdd„Zddd„Zddd„ZedkrÐddl Z eƒZe jeeeƒƒƒdS)z¯ Tool to find wrong contour order between different masters, and other interpolatability (or lack thereof) issues. Call as: $ fonttools varLib.interpolatable font1 font2 ... é)Ú AbstractPenÚBasePen)Ú RecordingPen)Ú StatisticsPen)ÚOpenContourError)Ú OrderedDictNc@sNeZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dS)Ú PerContourPenNcCs(tj||ƒ||_||_d|_g|_dS)N)rÚ__init__Z _glyphsetÚ_PenÚ_penÚvalue)ÚselfZPenÚglyphset©rúD/tmp/pip-build-_d5lkt3n/fonttools/fontTools/varLib/interpolatable.pyr s  zPerContourPen.__init__cCs|jƒ|jj|ƒdS)N)Ú_newItemr ZmoveTo)r Zp0rrrÚ_moveToszPerContourPen._moveTocCs|jj|ƒdS)N)r ZlineTo)r Úp1rrrÚ_lineToszPerContourPen._lineTocCs|jj||ƒdS)N)r ZqCurveTo)r rÚp2rrrÚ _qCurveToOne!szPerContourPen._qCurveToOnecCs|jj|||ƒdS)N)r ZcurveTo)r rrZp3rrrÚ _curveToOne$szPerContourPen._curveToOnecCs|jjƒd|_dS)N)r Z closePath)r rrrÚ _closePath's zPerContourPen._closePathcCs|jjƒd|_dS)N)r ZendPath)r rrrÚ_endPath+s zPerContourPen._endPathcCs|jƒ|_}|jj|ƒdS)N)r r r Úappend)r Zpenrrrr/szPerContourPen._newItem)N) Ú__name__Ú __module__Ú __qualname__r rrrrrrrrrrrrs rc@seZdZdd„ZdS)ÚPerContourOrComponentPencCs|jƒ|jdj||ƒdS)Nééÿÿÿÿ)rr Ú addComponent)r Z glyphNameZtransformationrrrr!5sz%PerContourOrComponentPen.addComponentN)rrrr!rrrrr4srcCstdd„t||ƒDƒƒS)Ncss|]\}}||VqdS)Nr)Ú.0ÚaÚbrrrú ;sz_vdiff..)ÚtupleÚzip)Úv0Úv1rrrÚ_vdiff:sr*cCs"d}x|D]}|||7}q W|S)Nrr)ZvecÚvÚxrrrÚ_vlen>s r-cst‡fdd„t|ƒDƒƒS)Nc3s|]\}}ˆ||VqdS)Nr)r"ÚiÚj)ÚGrrr%Fsz!_matching_cost..)ÚsumÚ enumerate)r0Úmatchingr)r0rÚ_matching_costEsr4c Cs&t|ƒ}yBddlm}||ƒ\}}|tt|ƒƒkjƒs:t‚t|ƒt||ƒfStk r^YnXyFddl m }dg|}x |ƒj |ƒD]\}}|||<q†W|t||ƒfStk rºYnX|dkrÌt dƒ‚t jt|ƒƒ}tt|ƒƒ} t|| ƒ} x,|D]$} t|| ƒ} | | kröt| ƒ| } } qöW| | fS)Nr)Úlinear_sum_assignment)ÚMunkreséz4Install Python module 'munkres' or 'scipy >= 0.17.0')ÚlenZscipy.optimizer5ÚlistÚrangeÚallÚAssertionErrorr4Ú ImportErrorZmunkresr6ZcomputeÚ ExceptionÚ itertoolsÚ permutationsÚnext) r0Únr5ZrowsÚcolsr6ÚrowÚcolr@ÚbestZ best_costÚpZcostrrrÚ#min_cost_perfect_bipartite_matchingIs4         rHc#sL|dkr |}|dkr |djƒ}g}tƒ‰‡fdd„}�x|D�]}�yÆg}g}�xPt||ƒD�]@\}} ||kr‚||d| dœƒq^||} tt|d�} | j| ƒ| j} ~ g} g}|j|ƒ|j| ƒxÚt| ƒD]Î\}}|jt dd„|jDƒƒƒt |d�}y|j |ƒWn8t k �r@}z||| |d d œƒwÎWYdd}~XnXt |jƒd d }t|ƒt|jƒt|jƒt|jd ƒt|jd ƒt|j|ƒf}| j|ƒqÎWq^W�xDtt|dd…|d d…ƒƒD�] \}\}‰t|ƒtˆƒk�r||d||||d t|ƒtˆƒdœƒ|ˆk�r�qÆxÆtt|ˆƒƒD]´\}\}}||k�rH�q.t|ƒt|ƒk�rŠ||d|||||d t|ƒt|ƒdœƒ�q.xTtt||ƒƒD]B\}\}}||k�rš||d||||||d ||dœƒ�qš�qšW�q.W�qÆW�xtt|dd…|d d…ƒƒD]ø\}\}‰t|ƒtˆƒk�r0�q|�s:�q‡fdd„|Dƒ}t|ƒ\}}|ttt|ƒƒƒk�rž||d||||d ttt|ƒƒƒ|dœƒPd} t|t|ƒt|dƒd | dƒ}!|j|!ƒd}"|!|"k�r||d||||d |!|"dœƒ�qWWq>tk �rB}z||d| |dœƒWYdd}~Xq>Xq>WˆS)Nrcsˆj|gƒj|ƒdS)N)Ú setdefaultr)Z glyphnameZproblem)ÚproblemsrrÚ add_problemvsztest..add_problemÚmissing)ÚtypeÚmaster)rcss|]}|dVqdS)rNr)r"Z instructionrrrr%”sztest..Ú open_path)rNÚcontourrMgà?érÚ path_count)rMÚmaster_1Úmaster_2Úvalue_1Úvalue_2Ú node_count)rMÚpathrSrTrUrVÚnode_incompatibility)rMrXÚnoderSrTrUrVcsg|]‰‡fdd„ˆDƒ‘qS)csg|]}ttˆ|ƒƒ‘qSr)r-r*)r"r))r(rrú àsz#test...r)r")Úm1)r(rr[àsztest..Ú contour_orderiédéÚ high_costZ math_error)rMrNÚerrorr r )Úkeysrr'rrZdrawr rr2r&rZreplayrÚabsÚareaÚintZmeanXZmeanYZstddevXZstddevYZ correlationr8rHr9r:ÚroundÚ ValueError)#Ú glyphsetsÚglyphsÚnamesÚhistrKZ glyph_nameZ allVectorsZ allNodeTypesrÚnameÚglyphZ perContourPenZ contourPensZcontourVectorsZ nodeTypesÚixrPÚstatsÚeÚsizeZvectorr.Zm0ZpathIxZnodes1Znodes2ZnodeIxZn1Zn2Zcostsr3Z matching_costZupemZ item_costÚ thresholdr)r\rJrÚtestlsä         0       .   &   $rsc s�ddl}|jdtjd�}|jdddd�|jd d td d d �|j|ƒ}d}ddlm‰‡fdd„|j Dƒ}g}xN|j D]D}|j dƒr ddl m }|j ||ƒƒqvddlm}|j ||ƒƒqvWdd„|Dƒ} t| ||d�} |jrúddl} t| j| ƒƒ�nˆ�x„| jƒD�]v\} } td| ›d�ƒ�xX| D�]N}|ddk�rLtd|dƒ|ddk�rjtd|dƒ|ddk�rœtd|d |d!|d"|d#fƒ|dd$k�rÔtd%|d&|d |d!|d"|d#fƒ|dd'k�rtd(|d)|d&|d |d!|d"|d#fƒ|dd*k�rDtd+|d |d!|d"|d#fƒ|dd,k�r(td-|d!|d#|d |d"fƒ�q(W�qW| �rŒ| SdS).z/Test for interpolatability issues between fontsrNzfonttools varLib.interpolatable)Ú descriptionz--jsonÚ store_truezOutput report in JSON format)ÚactionÚhelpÚinputsÚFILEú+zInput TTF/UFO files)ÚmetavarrMÚnargsrw)Úbasenamecs g|]}ˆ|ƒjddƒd‘qS)Ú.rr)Úrsplit)r"Úfilename)r}rrr[!szmain..z.ufo)Ú UFOReader)ÚTTFontcSsg|] }|jƒ‘qSr)Z getGlyphSet)r"Úfontrrrr[.s)rirjzGlyph z was not compatible: rMrLz" Glyph was missing in master %srNrOz' Glyph has an open path in master %srRz* Path count differs: %i in %s, %i in %srUrSrVrTrWz5 Node count differs in path %i: %i in %s, %i in %srXrYz7 Node %o incompatible in path %i: %s in %s, %s in %srZr]z- Contour order differs: %s in %s, %s in %sr`zD Interpolation has high cost: cost of %s to %s = %i, threshold %i)ÚargparseÚArgumentParserÚmainÚ__doc__Ú add_argumentÚstrÚ parse_argsÚos.pathr}rxÚendswithZfontTools.ufoLibr�rZfontTools.ttLibr‚rsÚjsonÚprintÚdumpsÚitems)Úargsr„ÚparserrirjZfontsr€r�r‚rhrJr�rmZglyph_problemsrGr)r}rr†sŒ        r†Ú__main__)NN)N)r‡ZfontTools.pens.basePenrrZfontTools.pens.recordingPenrZfontTools.pens.statisticsPenrZfontTools.pens.momentsPenrÚ collectionsrr?Úsysrrr*r-r4rHrsr†rrJÚexitreÚboolrrrrÚs(    "#  h