U
    Q»{j¥°  ã                   @   sv  d Z ddlT ddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$Z$ddl%Z%e$ &d¡Z'dZ(dZ)dZ*dZ+G dd„ dƒZ,d'de(e)e+dg dœdd„Z-ee-ƒdd„ ƒZ.d d!„ Z/d"d#„ Z0d(d$d%„Z1e2d&k�rrddl3Z3e1ƒ Z4e3 5e6e7e4ƒƒ¡ dS ))z¯
Tool to find wrong contour order between different masters, and
other interpolatability (or lack thereof) issues.

Call as:
$ fonttools varLib.interpolatable font1 font2 ...
é   )Ú*)Útest_contour_order)Útest_starting_pointé    )ÚRecordingPenÚDecomposingRecordingPenÚlerpRecordings)ÚTransformPen)ÚStatisticsPenÚStatisticsControlPen)ÚOpenContourError)ÚpiecewiseLinearMapÚnormalizeLocation)ÚfloatToFixedToStr)Ú	Transform)Údefaultdict)ÚSimpleNamespace)Úwraps)Úpformat)ÚsqrtÚatan2ÚpiNzfontTools.varLib.interpolatablegffffffî?g      à?gü©ñÒMb`?iè  c                   @   s2   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	d
„ZdS )ÚGlyph)	Ú
recordingsÚ
greenStatsÚcontrolStatsÚgreenVectorsÚcontrolVectorsÚ	nodeTypesÚisomorphismsÚpointsÚopenContoursc                 C   s,   || _ | jD ]}t| |g ƒ q|  |¡ d S ©N)ÚnameÚITEMSÚsetattrÚ	_populate)ÚselfÚ	glyphnameÚglyphsetÚitem© r+   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fontTools/varLib/interpolatable.pyÚ__init__4   s    
zGlyph.__init__c                 C   s2   | j D ]&}tt| |ƒƒ|krt| |ƒ d ¡ qd S r"   )r$   ÚlenÚgetattrÚappend)r'   Úixr*   r+   r+   r,   Ú_fill_in:   s    
zGlyph._fill_inc                 C   sâ  || j  }|d k| _| jrd S tt|d�}z|j|dd� W n tk
rZ   | |¡ Y nX |j| _~t| jƒD �]j\}}dd„ |jD ƒ}| j	 
|¡ t|d�}t|d�}z$| |¡ | |¡ | j 
d¡ W nB tk
�r }	 z"| j 
d¡ |  |¡ W Y ¢qpW 5 d }	~	X Y nX | j 
|¡ | j 
|¡ | j 
t|ƒ¡ | j 
t|ƒ¡ |d dk�rd|  |¡ qp|d d	k�svt‚|d
 dk�sˆt‚tƒ }
t|
dƒ}| |¡ | j 
|
j¡ g }| j 
|¡ t|
j|dƒ t|
j|dƒ qpd S )N©r)   T)ZoutputImpliedClosingLinec                 S   s   g | ]\}}|‘qS r+   r+   )Ú.0ÚopÚargr+   r+   r,   Ú
<listcomp>N   s     z#Glyph._populate.<locals>.<listcomp>Fr   ZaddComponentZmoveToéÿÿÿÿ)Z	closePathZendPath)r#   Údoesnt_existZPerContourOrComponentPenr   ÚdrawÚ	TypeErrorÚvaluer   Ú	enumerater   r0   r
   r   Úreplayr!   r   r2   r   r   r   Úcontour_vector_from_statsr   ÚAssertionErrorZSimpleRecordingPointPenZSegmentToPointPenr    r   Zadd_isomorphisms)r'   r)   ÚglyphZperContourPenr1   Úcontourr   r   r   Úer    Ú	converterr   r+   r+   r,   r&   ?   sR    









zGlyph._populateNc                 C   s4   |d kr | j D ]}| |¡ qn| j |  |¡ d S r"   )r   r:   )r'   ÚpenZcountor_idxrB   r+   r+   r,   r:   w   s    
z
Glyph.draw)N)Ú__name__Ú
__module__Ú__qualname__r$   r-   r2   r&   r:   r+   r+   r+   r,   r   '   s
   8r   F)Ú	locationsÚ	toleranceÚ	kinkinessÚupemÚshow_allÚdiscrete_axesc          V      #   sr
  |dkr|d9 }d|  kr$dks*n t ‚|dkr:|d9 }d|ksFt ‚|pVdd„ ˆD ƒ}|d krndd„ ˆD ƒ}tˆ||	d	�\‰}
‡‡fd
d„}|D �	]Ø‰ t dˆ ¡ ‡ fdd„ˆD ƒ}tdd„ |D ƒƒdkrÎq’tt|ˆ|ƒƒD ]t\}\}}}|j�r|sÞˆ tj	||dœfV  qÞd}t|j
ƒD ].\}}|�s.�qd}ˆ tj|||dœfV  �q|rÞqÞqÞd gtˆƒ }|
D �	]}|| }|d k�sf|j�sŠ�qf||ˆ ƒ}|d k�r¢�qf|| }|d k�sf|j�sÀ�qf|j‰|j}t|ƒtˆƒk�rˆ tj|| || ||t|ƒtˆƒdœfV  �qf|ˆk�rÜtt|ˆƒƒD ]´\}\}}||k�r@�q&t|ƒt|ƒk�r„ˆ tj||| || ||t|ƒt|ƒdœfV  �q&tt||ƒƒD ]D\}\}}||k�r’ˆ tj|||| || ||||dœ	fV  �q’�q’�q&t||ƒ\} }!| |k �r.ˆ tj|| || ||ttt|!ƒƒƒ|!| dœfV  |!||< |j}"|j‰|j}#|j‰|j}$|j‰|| }!|!d k	�r ˆ�r ‡fdd„|!D ƒ‰‡fdd„|!D ƒ‰‡fdd„|!D ƒ‰g }%t|$ˆƒD ]T\}&}'z(tƒ }(tt|&j|'jƒƒ|(_|% |(¡ W n  tk
�rþ   |% d ¡ Y nX �q®tt|"ˆƒƒD �]\}\})}*|)d k�s|*d k�st|)ƒdk�st|)ƒt|*ƒk�rX�qt|||||!ƒ\} }+},| |k �r¢ˆ tj||| || ||d|+|,| dœ
fV  |%| }-|-�r|#| d dk ˆ| d dk k�rtd d�}.|- |.¡ t |.ƒ}/|#| }0ˆ| }1|0d |0d  }2|1d |1d  }3|/d |/d  }4ttj!tj"fƒD ]Ö\}5}6|5�r\t#|2|3ƒ}7�q>nt$|2|3 ƒ}7t %d|6|4|7|2|3¡ |5�s”|7| |4d k�s¬|5�r>d|7|  |4k �r>z|5�r¾|7|4 } n|4|7 } W n t&k
�râ   d} Y nX t %d| ¡ ˆ |6||| || ||| dœfV  �q>�q|j'}|j'‰|| d k	�rPˆ�rP‡fd d„|| D ƒ‰d!}8|t( t) | }9tt|ˆƒƒD �]Ì\}\})}*|)d k�sr|*d k�srt|)ƒdk�srt|)ƒt|*ƒk�r¸�qrtt|)ƒƒD �]v}:|)|: };|*|: }<|;d �rÄ|<d �sò�qÄ|)|:d  }=|*|:d  }>|)|:d t|)ƒ  }?|*|:d t|*ƒ  }@|=d �rJ|>d �rJ�qÄ|=d �rb|>d �rb�qÄt*|;d Ž };t*|<d Ž }<t*|=d Ž }=t*|>d Ž }>t*|?d Ž }?t*|@d Ž }@|;|= }A|?|; }B|<|> }C|@|< }D|Aj+|Bj, |Aj,|Bj+  }E|Cj+|Dj, |Cj,|Dj+  }Fz,|Et-|Aƒt-|Bƒ  }E|Ft-|Cƒt-|Dƒ  }FW n t&k
�rB   Y �qÄY nX t-|Eƒ|8k�sÄt-|Fƒ|8k�rd�qÄ|Aj+|Bj+ |Aj,|Bj,  }G|Cj+|Dj+ |Cj,|Dj,  }H|Gdk �sÄ|Hdk �r¬�qÄt-|Aƒt-|Aƒt-|Bƒ  }It-|Cƒt-|Cƒt-|Dƒ  }Jt-|I|J ƒ}Kt-|Kƒ|8k �rú�qÄ|;|< d" }L|=|> d" }M|?|@ d" }N|L|M }O|N|L }P|Oj+|Pj, |Oj,|Pj+  }Qz|Qt-|Oƒt-|Pƒ  }QW n t&k
�	rz   Y �qÄY nX t-|Qƒ||  |8k�	r–�qÄ|Qt-|Oƒ t-|Pƒ }Rt-|O|P ƒ}St-|R|S ƒ}T|T|9k �	rÐ�qÄ|T|S }U|U|8k�	ræ�qÄ|8t-|Qƒ|  } t %d#|T|U|Q|K¡ t %d| ¡ ˆ tj.||| || |||:| d$œfV  �qÄ�qr|�rfˆ tj/|| || ||d%œfV  �qfq’d S )&Né
   g{®Gáz„?r   r   c                 S   s   g | ]}t |ƒ‘qS r+   )Úrepr)r4   Úgr+   r+   r,   r7   “   s     ztest_gen.<locals>.<listcomp>c                 S   s   h | ]}|  ¡ D ]}|’qqS r+   ©Úkeys)r4   r)   rQ   r+   r+   r,   Ú	<setcomp>˜   s     
  ztest_gen.<locals>.<setcomp>©rN   c                    sJ   | d krd S ˆ|  } | d kr d S ˆ|  d k	rFˆ |  | d krFˆ|  } q | S r"   r+   )Úir(   )Ú	glyphsetsÚparentsr+   r,   Úgrand_parentž   s    
ztest_gen.<locals>.grand_parentzTesting glyph %sc                    s   g | ]}t ˆ |ƒ‘qS r+   )r   )r4   r)   )Ú
glyph_namer+   r,   r7   ª   s     c                 S   s   g | ]}|d k	rd‘qS )Nr   r+   )r4   rA   r+   r+   r,   r7   «   s      )ÚtypeÚmasterÚ
master_idxFT)r[   r\   r]   rB   )r[   Úmaster_1Úmaster_2Úmaster_1_idxÚmaster_2_idxÚvalue_1Úvalue_2)r[   Úpathr^   r_   r`   ra   rb   rc   )	r[   rd   Únoder^   r_   r`   ra   rb   rc   )r[   r^   r_   r`   ra   rb   rc   rJ   c                    s   g | ]}ˆ | ‘qS r+   r+   ©r4   rV   )Úm1Isomorphismsr+   r,   r7   9  s     c                    s   g | ]}ˆ | ‘qS r+   r+   rf   )Ú	m1Vectorsr+   r,   r7   :  s     c                    s   g | ]}ˆ | ‘qS r+   r+   rf   )Ú
recording1r+   r,   r7   ;  s     )
r[   rB   r^   r_   r`   ra   rb   rc   ÚreversedrJ   r3   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggñhãˆµøä>ztolerance %g)r[   rB   r^   r_   r`   ra   rJ   c                    s   g | ]}ˆ | ‘qS r+   r+   rf   )Úm1r+   r,   r7   ³  s     gš™™™™™¹?é   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)r[   rB   r^   r_   r`   ra   r<   rJ   )r[   r^   r_   r`   ra   )0r@   Zfind_parents_and_orderÚlogÚinfor.   r=   Úzipr9   ÚInterpolatableProblemÚMISSINGr!   Ú	OPEN_PATHr   Ú
PATH_COUNTÚ
NODE_COUNTÚNODE_INCOMPATIBILITYr   ÚCONTOUR_ORDERÚlistÚranger   r   r   r   r   r<   r0   Ú
ValueErrorr   ÚWRONG_START_POINTr
   r>   r?   ÚUNDERWEIGHTÚ
OVERWEIGHTÚmaxr   ÚdebugÚZeroDivisionErrorr    ÚDEFAULT_KINKINESS_LENGTHÚDEFAULT_KINKINESSÚcomplexÚrealÚimagÚabsÚKINKÚNOTHING)VrW   ÚglyphsÚnamesÚignore_missingrI   rJ   rK   rL   rM   rN   ÚorderrY   Z	allGlyphsr]   rA   r)   r#   Zhas_openr1   ÚopenZ	matchingsZm1idxZglyph1Zm0idxZglyph0Zm0ZpathIxZnodes1Znodes2ZnodeIxZn1Zn2Zthis_toleranceZmatchingZm0IsomorphismsZ	m0VectorsZ
recording0ZmidRecordingZc0Úc1ÚrZcontour0Zcontour1Zproposed_pointÚreverserB   ZmidStatsZ	midVectorZm0VecZm1VecZsize0Zsize1ZmidSizeZ
overweightZproblem_typeZexpectedSizeÚtZdeviation_thresholdrV   Zpt0Zpt1Zpt0_prevZpt1_prevZpt0_nextZpt1_nextZd0_prevZd0_nextZd1_prevZd1_nextZsin0Zsin1Zdot0Zdot1Zr0Úr1Zr_diffÚmidZmid_prevZmid_nextZmid_d0Zmid_d1Zsin_midÚcrossZarc_lenZ	deviationZdeviation_ratior+   )rZ   rW   rk   rg   rh   rX   ri   r,   Útest_gen   s–     ÿ



ÿýþüþ
	


ùþ

øþ
÷þ
øþÿÿÿÿþ
ýü    ÿ

öþ(

þÿ
ú
ÿÿþþ

ùþÿÿþ
ýü

ûøþûþr”   c                  O   s.   t tƒ}t| |ŽD ]\}}||  |¡ q|S r"   )r   rw   r”   r0   )ÚargsÚkwargsÚproblemsr(   Úproblemr+   r+   r,   ÚtestI  s    r™   c                 C   sB   | |krd S ||  || < t ||  dg ƒD ]}t|j|||ƒ q(d S )NÚ
components)r/   ÚrecursivelyAddGlyphZ	glyphName)r(   r)   Z
ttGlyphSetÚglyfÚ	componentr+   r+   r,   r›   Q  s
    r›   c                 C   s"   t j | ¡}|rt j|dd� | S )NT)Úexist_ok)Úosrd   ÚdirnameÚmakedirs)rd   r    r+   r+   r,   Úensure_parent_dirZ  s    r¢   c           W         sv  ddl }ddl}|jdtjd�}|jdddd� |jd	d
dd� |jddtdt d� |jddtdt d� |jdd
dd� |jdddd� |jdddd� |jdddd� |jdd
dd� |jdddd� |jdd
dd� |jdd t	d!d"d#� |jd$d%t	d&d'd(� |jd)d*d
d+d� |jd,d
d-d� | 
| ¡} dd.lm} || j�rJd/nd0d1� | j�rd|d2d1� | j�rv| j ¡ nd}dd3lm} g }g }g }	tƒ ‰t}
t| jƒ}t| jƒd4k�rd}| jd  d5¡�rXdd6lm} | | jd ¡}d7d8„ |jD ƒ| _d9d8„ |jD ƒ}	d:d;„ |jD ƒ‰‡fd<d=„|jD ƒ‰d>d=„ |jD ƒ‰‡fd?d=„ˆ ¡ D ƒ‰�nº| jd  d@¡�rddAlm }m!} || jd ƒ}|j"}
||ƒ}dBd8„ |jD ƒ}dCd8„ |D ƒ}g | _dDd8„ |jD ƒ}	dEd=„ |jD ƒ‰dFd=„ |jD ƒ‰‡fdGd=„ˆ ¡ D ƒ‰�n| jd  dH¡�s(| jd  dI¡�rddJl#m$} || jd ƒ}|dK j%}
|dL }i ‰|jD ]}|j&|j'|j(dMœˆ|j)< �q^dN}dO|k�r |dO }t*|j+dPdƒ�r¸dQd=„ ˆD ƒ‰dR}nH|j, ¡ D ]<\}}ˆ|  -¡ }| ¡ D ]\}}t.||ƒˆ| |< �qÞ�qÂi }t/t0ƒ}dS|k�rÜ|dS }|dT }|dk�r>t1|j2 3¡ ƒ}|D ]”} |j2|  D ]‚}!i }"g }#t1|!j ¡ ƒD ](\}$}%|%d4 |"|$< |# 4|$|%d4 f¡ �qjt|#ƒ}&|&|k�rº|j5|"dRdNdU�||&< t6| ||& ||& |ƒ �qP�qB�nŽdV|k�rj|dL j}'|dV j7j8d }(|(j9})|dk�rt1|) 3¡ ƒ}|D �]F} |)|  }*|*j:}+t*|+dWdƒh},t*|+dWdƒ}-d}.t;|*j<ƒD ]>}/|/dXk�rv|, =|-¡ n|/dWk�r”t>|.t?ƒ�s�t@‚|.}-|/}.�q\tA|+dYƒ�s¬�q |+jBjC}0|,D ]¬}-|0jD|- }1|1jED ]”}2|0jFjG|2 }3i }"g }#t;|3jHƒD ]0\}4}|'|4 j)}$|jI}%|%|"|$< |# 4|$|%f¡ �qît|#ƒ}&|&|k�rF|j5|"dRdNdU�||&< ||& ‰||& |  ˆ| < �qÌ�q¸�q dZg}| 5¡ g}i g}	d[d=„ t1ˆ 3¡ ƒD ƒ‰t1| 3¡ d\d]„ d^�D ]Z}&d_d` J‡fdadb„|&D ƒ¡ d_ }5|�rÜ|5dc7 }5| 4|5¡ | 4||& ¡ |	 4t0|&ƒ¡ �qªdR| _Kg | _|	�s&ddd8„ |D ƒ}	| jD ]Š}6|6 de¡�rrddflLmM}7 |7|6ƒ}tNƒ }8| O|8¡ |8j%}
| 4|¡ n(ddJl#m$} ||6ƒ}|dK j%}
| 4|¡ | 4||6ƒ Pdgd4¡d ¡ �q,t|ƒdhk �rÔtQ Rdi¡ dS g }|D ]<}tA|djƒ�rö| 5¡ ‰n|‰| 4‡fdkd=„ˆ 3¡ D ƒ¡ �qÜ| jS�rnt| jSƒ‰ ‡ fdld8„tT||ƒD ƒ}‡ fdmd8„tT||	ƒD ƒ}	‡ fdnd8„|D ƒ}|�sŠt1tdod8„ |D ƒƒƒ}t|ƒ}9|D ]4‰tˆ 3¡ ƒ}:|9|: };|;�r–|;D ]}<dˆ|<< �q¸�q–‡‡fdpd8„|	D ƒ}	| jU�pêt}=| jVdk	�rþ| jVnt}>�z$tQ Wdqt|ƒ¡ tQ WdrtX|	ƒ¡ tY||||	|
| jK|=|>| jZˆds�
}?t/t[ƒ}@| j\dk�	r`|j]nt^t_| j\ƒdtƒ}A| j`�sÚ| ja�	r¼ddla}B|?D ]\} }C|@|   4|C¡ �	qŒtb|B c|@¡|Adu� �qød}D|?D �]\} }E|@|   4|E¡ | |Dk�
rtbdv| › dw�|Adu� | }Dd}Fdx|Ek�
r|Edx fn|Edy |Edz f}G|G|Fk�
rnd{|Ek�
rD|Ed{ fn|Ed| |Ed} f}Htbd~d J|H¡ |Adu� |G}F|Ed€ tdjek�
r–tbd�|Ed{  |Adu� �	qÄ|Ed€ tdjfk�
r¾tbd‚|Ed{  |Adu� �	qÄ|Ed€ tdjgk�
rútbdƒ|Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tdjhk�r<tbd†|Ed‡ |Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tdjik�r„tbdˆ|Ed‰ |Ed‡ |Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tdjjk�rÀtbdŠ|Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tdjkk�rtbd‹|EdŒ |Ed„ |Ed| |Ed… |Ed} |Ed� f |Adu� nÎ|Ed€ tdjlk�r:tbdŽ|EdŒ |Ed| |Ed} f |Adu� nš|Ed€ tdjmk�rntbd�|EdŒ |Ed| |Ed} f |Adu� nf|Ed€ tdjnk�r¨tbd�|EdŒ |Ed‘ |Ed| |Ed} f |Adu� n,|Ed€ tdjok�	rÄtbd’|Ed| |Ed} f |Adu� �	qÄn|?D ]\} }C|@|   4|C¡ �qÞtp|@ƒ}@d“D ]Æ}Et*| |Eƒ}I|Idk�r �qtQ Wd”|E q¡ |I¡ d4d•lrms}Jmt}K |Ed–k�rP|Jn|K}L|Lt_|Iƒ||d—��\}M|Mju||=|>d˜� |@�rˆ|M v|@¡ |M w|@¡ |@�s¨| j`�s¨|M x¡  |@�r¾|M y¡  |M z¡  W 5 Q R X �q| j{�r&tQ Wd™| j{¡ d4dšlrm|}N g }Oi }P|N|O||d—��b}Q|Qju|dN|=|>d›� |@ ¡ D ]*\}R}S|R|Pt|Oƒ< |Qjw|R|SidNdNdœ� �q |@�sb| j`�sb|Q x¡  W 5 Q R X ddl}}Tt^t_| j{ƒd�ƒ�œ}A|A ~dž¡ |A ~dŸ¡ |A ~d ¡ t;|OƒD ]d\}U}Q|U|Pk�rÚ|A ~d¡|P|U › d¢� d£¡¡ |A ~d¤ d£¡¡ |A ~|T €|Q¡¡ |A ~d¥¡ |A ~d¦¡ �q¬|A ~d§¡ W 5 Q R X W n> t�k
�rf }V z|V j‚|7  _‚tQ ƒ|V¡ ‚ W 5 d}V~VX Y nX |@�rr|@S dS )¨z/Test for interpolatability issues between fontsr   Nzfonttools varLib.interpolatable)Údescriptionz--glyphsÚstorez&Space-separate name of glyphs to check)ÚactionÚhelpz
--show-allÚ
store_truez3Show all glyph pairs, even if no problems are foundz--tolerancez,Error tolerance. Between 0 and 1. Default %s)r¥   r[   r¦   z--kinkinessz)How aggressively report kinks. Default %sz--jsonzOutput report in JSON formatz--pdfzOutput report in PDF formatz--psz"Output report in PostScript formatz--htmlzOutput report in HTML formatz--quietz%Only exit with code 1 or 0, no outputz--outputz3Output file for the problem report; Default: stdoutz--ignore-missingz<Will not report glyphs missing from sparse masters as errorsÚinputsÚFILEú+zSInput a single variable font / DesignSpace / Glyphs file, or multiple TTF/UFO files)Úmetavarr[   Únargsr¦   z--nameÚNAMEr0   zGName of the master to use in the report. If not provided, all are used.)r«   r[   r¥   r¦   z-vz	--verbosezRun verbosely.z--debugzRun with debug output.)ÚconfigLoggerÚINFOÚWARNING)ÚlevelÚDEBUG)Úbasenamer   z.designspace)ÚDesignSpaceDocumentc                 S   s   g | ]
}|j ‘qS r+   )rd   ©r4   r\   r+   r+   r,   r7   Î  s     zmain.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r+   ©Úlocationrµ   r+   r+   r,   r7   Ï  s     c                 S   s   h | ]}t |d ƒs|j’qS )Úminimum)Úhasattrr#   ©r4   Úar+   r+   r,   rT   Ð  s    
 zmain.<locals>.<setcomp>c                    s*   i | ]"}|j ˆ kr|j |j|j|jf“qS r+   ©r#   r¸   ÚdefaultÚmaximumrº   rU   r+   r,   Ú
<dictcomp>Ó  s   
þ zmain.<locals>.<dictcomp>c                 S   s   i | ]}|j |j“qS r+   ©r#   Úmaprº   r+   r+   r,   r¿   Ø  s      c                    s*   i | ]"\‰ }ˆ t ‡‡ fd d„|D ƒƒ“qS )c                 3   s    | ]}t |tˆ ˆ ƒƒV  qd S r"   ©r   Údict©r4   Úv©Úaxis_mappingsÚkr+   r,   Ú	<genexpr>Ú  s     ú"main.<locals>.<dictcomp>.<genexpr>©Útuple©r4   Zvv©rÇ   ©rÈ   r,   r¿   Ù  s   ÿ )z.glyphsz.glyphspackage)ÚGSFontÚto_designspacec                 S   s   g | ]
}|j ‘qS r+   )Úfont)r4   Úsourcer+   r+   r,   r7   ä  s     c                 S   s    g | ]}d |j j|j jf ‘qS )z%s-%s)rn   Z
familyNameZ	styleName)r4   Úfr+   r+   r,   r7   å  s     c                 S   s   g | ]
}|j ‘qS r+   r¶   rµ   r+   r+   r,   r7   ç  s     c                 S   s    i | ]}|j |j|j|jf“qS r+   r¼   rº   r+   r+   r,   r¿   è  s     c                 S   s   i | ]}|j |j“qS r+   rÀ   rº   r+   r+   r,   r¿   ë  s      c                    s*   i | ]"\‰ }ˆ t ‡‡ fd d„|D ƒƒ“qS )c                 3   s    | ]}t |tˆ ˆ ƒƒV  qd S r"   rÂ   rÄ   rÆ   r+   r,   rÉ   í  s     rÊ   rË   rÍ   rÎ   rÏ   r,   r¿   ì  s   ÿ z.ttfz.otf)ÚTTFontÚheadÚfvar©r8   r   r   FÚavarZVarStorec                 S   s   i | ]}|d dddœ“qS )r8   r   r   rØ   r+   )r4   Útagr+   r+   r,   r¿     s      TÚgvarrœ   )r·   Ú
normalizedZrecalcBoundsZCFF2ÚvsindexÚblendÚvstorez''c                 S   s   i | ]
}|d “qS )rØ   r+   rº   r+   r+   r,   r¿   d  s      c                 S   s   t | ƒ| fS r"   )r.   )rÅ   r+   r+   r,   Ú<lambda>e  ó    zmain.<locals>.<lambda>)Úkeyú'ú c                 3   s.   | ]&\}}d |t t|ˆ | ƒdƒf V  qdS )z%s=%sé   N)r   r   ©r4   rÈ   rÅ   )ÚaxisMappingr+   r,   rÉ   h  s   ù ÿþÿzmain.<locals>.<genexpr>z (normalized)c                 S   s   g | ]}i ‘qS r+   r+   )r4   Ú_r+   r+   r,   r7   ~  s     z.ufo)Ú	UFOReaderÚ.rl   z9Font file does not seem to be variable. Nothing to check.ÚgetGlyphSetc                    s   i | ]}|ˆ | “qS r+   r+   )r4   rÈ   r3   r+   r,   r¿   œ  s      c                    s   g | ]\}}|ˆ kr|‘qS r+   r+   )r4   r#   r)   ©Úaccepted_namesr+   r,   r7      s   þc                    s   g | ]\}}|ˆ kr|‘qS r+   r+   )r4   r#   r·   rì   r+   r,   r7   ¥  s   þc                    s   g | ]}|ˆ kr|‘qS r+   r+   )r4   r#   rì   r+   r,   r7   ª  s      c                 S   s   g | ]}|  ¡ D ]}|‘qqS r+   rR   )r4   r)   Úgnr+   r+   r,   r7   ­  s     
  c                    s,   g | ]$}t |ˆ ƒ‡fd d„| ¡ D ƒ–‘qS )c                    s   i | ]\}}|ˆ kr||“qS r+   r+   ræ   rU   r+   r,   r¿   »  s       z#main.<locals>.<listcomp>.<dictcomp>)r   Úitems)r4   Úloc)Úaxis_triplesrN   r+   r,   r7   ¸  s   ýþzRunning on %d glyphsetszLocations: %s)	rˆ   r‰   rI   rL   rŠ   rJ   rK   rM   rN   Úw)ÚfilezGlyph z was not compatible:r]   r`   ra   r\   r^   r_   z  Masters: %s:z, r[   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %srb   rc   z5    Node count differs in path %i: %i in %s, %i in %srd   z7    Node %o incompatible in path %i: %s in %s, %s in %sre   z-    Contour order differs: %s in %s, %s in %szD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srB   rj   z3    Contour %d interpolation is underweight: %s, %sz2    Contour %d interpolation is overweight: %s, %sz'    Contour %d has a kink at %s: %s, %sr<   z    Showing %s and %s)ÚpsZpdfzWriting %s to %s)ÚInterpolatablePSÚInterpolatablePDFrô   )rW   r‰   )rJ   rK   zWriting HTML to %s)ÚInterpolatableSVG)Úshow_tolerancerJ   rK   )rø   Zshow_page_numberÚwbs   <!DOCTYPE html>
sN   <html><body align="center" style="font-family: sans-serif; text-color: #222">
s6   <title>fonttools varLib.interpolatable report</title>
z
<h1>Glyph z</h1>
zutf-8z$<img src='data:image/svg+xml;base64,s   ' />
s   <hr>
s   </body></html>
)„ÚargparseÚsysÚArgumentParserÚmainÚ__doc__Úadd_argumentÚfloatÚDEFAULT_TOLERANCEr�   ÚstrÚ
parse_argsZ	fontToolsr®   Úverboser~   rˆ   ÚsplitÚos.pathr³   ÚsetÚDEFAULT_UPEMrÌ   r¨   r.   ÚendswithZfontTools.designspaceLibr´   ÚfromfileÚsourcesZaxesrï   Z	glyphsLibrÐ   rÑ   ZupmZfontTools.ttLibrÕ   Z
unitsPerEmZminValueZdefaultValueZmaxValueÚaxisTagr/   ÚtableÚsegmentsÚcopyr   r   rÃ   ÚsortedZ
variationsrS   r0   rë   r›   ZcffZtopDictIndexZCharStringsÚprivater=   ÚprogramÚaddÚ
isinstanceÚintr@   r¹   rß   Z
otVarStoreZVarDataZVarRegionIndexZVarRegionListÚRegionZVarRegionAxisZ	PeakCoordÚjoinrŠ   ZfontTools.ufoLibré   r   ZreadInfoÚrsplitrm   Úwarningr#   ro   rJ   rK   rn   r   r”   rM   rw   ÚoutputÚstdoutrŒ   r¢   ÚquietÚjsonÚprintÚdumpsrp   rq   rr   rs   rt   ru   rv   rz   r{   r|   r†   r‡   Zsort_problemsÚupperZinterpolatablePlotrõ   rö   Zadd_title_pageZadd_summaryZadd_problemsZdraw_cupcakeZ	add_indexZadd_table_of_contentsÚhtmlr÷   Úbase64ÚwriteÚencodeÚ	b64encodeÚ	Exceptionr•   Úerror)Wr•   rú   rû   Úparserr®   rˆ   r³   Zfontsr‰   rI   rL   Zoriginal_args_inputsZdesignspacer´   rÐ   rÑ   ZgsfontrÕ   rÒ   r×   ZaxisrÜ   rÙ   r  r  ZfvarMappingr·   r<   ZttGlyphSetsrW   rÛ   rœ   r(   ÚvarZlocDictrð   rÚ   ÚvalZlocTupleZfvarAxesZcff2ZcharstringsÚcsr  Z	vsindicesrÝ   Zlast_opr5   ZvarStoreZvarDataZregionIndexÚregionZ	axisIndexr#   Úfilenameré   rn   Z	glyphsSetZglyphSetGlyphNamesÚdiffrî   rJ   rK   Zproblems_genr—   rÔ   r  r˜   Zlast_glyphnameÚpZlast_master_idxsZmaster_idxsZmaster_namesr6   rõ   rö   ZPlotterClassÚdocr÷   ZsvgsZglyph_startsÚsvgrA   Zglyph_problemsr"  rV   rC   r+   )rí   rç   rÇ   rñ   rN   r)   r,   rý   a  sü   þýýüüýýýýýýýûû


ÿ
þ
þ
ÿ
þ
$

ý
 ÿ


  ÿ
   ÿ









ý

øÿõÿ






 

þ
þûöÿ
ý
ÿý
ÿý
 ÿ

þ
üÿø

ûÿ÷
úÿ	ö
üÿø

úÿ	öýÿù	ýÿù	üÿø
þÿú	

  ÿ  ÿ

üý

ÿ



rý   Ú__main__)NNF)N)8rþ   ZinterpolatableHelpersZinterpolatableTestContourOrderr   ZinterpolatableTestStartingPointr   ZfontTools.pens.recordingPenr   r   r   ZfontTools.pens.transformPenr	   ZfontTools.pens.statisticsPenr
   r   ZfontTools.pens.momentsPenr   ZfontTools.varLib.modelsr   r   ZfontTools.misc.fixedToolsr   ZfontTools.misc.transformr   Úcollectionsr   Útypesr   Ú	functoolsr   Úpprintr   Úmathr   r   r   ÚloggingrŸ   Ú	getLoggerrm   r  r�   r€   r  r   r”   r™   r›   r¢   rý   rF   rû   r—   Úexitr  Úboolr+   r+   r+   r,   Ú<module>   sd   
Z   üõ   M
	
    X
