a
    —Æàg¥°  ã                   @   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+   úX/var/www/sistema_ama/venv/lib/python3.9/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 u | _| jrd S tt|d�}z|j|dd� W n tyX   | |¡ Y n0 |j| _~t| jƒD �]p\}}dd„ |jD ƒ}| j	 
|¡ t|d�}t|d�}z$| |¡ | |¡ | j 
d¡ W nH t�y }	 z.| j 
d¡ |  |¡ W Y d }	~	qnW Y d }	~	n
d }	~	0 0 | j 
|¡ | j 
|¡ | j 
t|ƒ¡ | j 
t|ƒ¡ |d dk�rh|  |¡ qn|d d	k�szJ ‚|d
 dv �sŒJ ‚tƒ }
t|
dƒ}| |¡ | j 
|
j¡ g }| j 
|¡ t|
j|dƒ t|
j|dƒ qnd S )N©r)   T)ZoutputImpliedClosingLinec                 S   s   g | ]\}}|‘qS r+   r+   )Ú.0ÚopÚargr+   r+   r,   Ú
<listcomp>N   ó    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   Z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 u r | j D ]}| |¡ qn| j |  |¡ d S r"   )r   r;   )r'   Z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      #   sj
  |dkr|d9 }d|  kr$dks*n J ‚|dkr:|d9 }d|ksFJ ‚|pVdd„ ˆD ƒ}|d u 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 u �sf|j�sŠ�qf||ˆ ƒ}|d u �r¢�qf|| }|d u �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 u�r ˆ�r ‡fdd„|!D ƒ‰‡fdd„|!D ƒ‰‡fdd„|!D ƒ‰g }%t|$ˆƒD ]R\}&}'z(tƒ }(tt|&j|'jƒƒ|(_|% |(¡ W n t�yü   |% d ¡ Y n0 �q®tt|"ˆƒƒD �]\}\})}*|)d u �s|*d u �st|)ƒdk�st|)ƒt|*ƒk�rV�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�rZt"|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%�yÞ   d} Y n0 t $d| ¡ ˆ |6||| || ||| dœfV  �q<�q|j&}|j&‰|| d u�rLˆ�rL‡fd d„|| D ƒ‰d!}8|t' t( | }9tt|ˆƒƒD �]È\}\})}*|)d u �sn|*d u �snt|)ƒdk�snt|)ƒt|*ƒk�r´�qntt|)ƒƒD �]r}:|)|: };|*|: }<|;d �rÀ|<d �sî�qÀ|)|:d  }=|*|:d  }>|)|:d t|)ƒ  }?|*|:d t|*ƒ  }@|=d �rF|>d �rF�qÀ|=d �r^|>d �r^�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%�y<   Y �qÀY n0 t,|Eƒ|8k�sÀt,|Fƒ|8k�r^�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%�	yr   Y �qÀY n0 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À�qn|�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   “   r8   ztest_gen.<locals>.<listcomp>c                 S   s   h | ]}|  ¡ D ]}|’qqS r+   ©Úkeys)r4   r)   rP   r+   r+   r,   Ú	<setcomp>˜   r8   ztest_gen.<locals>.<setcomp>©rM   c                    sJ   | d u rd S ˆ|  } | d u r d S ˆ|  d urFˆ |  | d u 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   ª   r8   c                 S   s   g | ]}|d urd‘qS )Nr   r+   )r4   rA   r+   r+   r,   r7   «   r8   )ÚtypeÚmasterÚ
master_idxFT)rZ   r[   r\   rB   )rZ   Úmaster_1Úmaster_2Úmaster_1_idxÚmaster_2_idxÚvalue_1Úvalue_2)rZ   Úpathr]   r^   r_   r`   ra   rb   )	rZ   rc   Únoder]   r^   r_   r`   ra   rb   )rZ   r]   r^   r_   r`   ra   rb   rI   c                    s   g | ]}ˆ | ‘qS r+   r+   ©r4   rU   )Úm1Isomorphismsr+   r,   r7   9  r8   c                    s   g | ]}ˆ | ‘qS r+   r+   re   )Ú	m1Vectorsr+   r,   r7   :  r8   c                    s   g | ]}ˆ | ‘qS r+   r+   re   )Ú
recording1r+   r,   r7   ;  r8   )
rZ   rB   r]   r^   r_   r`   ra   rb   ÚreversedrI   r3   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggñhãˆµøä>ztolerance %g)rZ   rB   r]   r^   r_   r`   rI   c                    s   g | ]}ˆ | ‘qS r+   r+   re   )Úm1r+   r,   r7   ³  r8   gš™™™™™¹?é   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)rZ   rB   r]   r^   r_   r`   r=   rI   )rZ   r]   r^   r_   r`   )/Zfind_parents_and_orderÚlogÚinfor.   r>   Úzipr:   Ú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)VrV   ÚglyphsÚnamesÚignore_missingrH   rI   rJ   rK   rL   rM   ÚorderrX   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c0Zc1ÚrZcontour0Zcontour1Zproposed_pointÚreverserB   ZmidStatsZ	midVectorZm0VecZm1VecZsize0Zsize1ZmidSizeZ
overweightZproblem_typeZexpectedSizeÚtZdeviation_thresholdrU   Zpt0Zpt1Zpt0_prevZpt1_prevZpt0_nextZpt1_nextZd0_prevZd0_nextZd1_prevZd1_nextZsin0Zsin1Zdot0Zdot1Zr0Zr1Zr_diffZmidZmid_prevZmid_nextZmid_d0Zmid_d1Zsin_midZcrossZarc_lenZ	deviationZdeviation_ratior+   )rY   rV   rj   rf   rg   rW   rh   r,   Útest_gen   sŠ   ÿ



ÿýþüþ
	


ùþ

øþ
÷þ
øþÿÿÿÿþ
ýü
ÿ

öþ(

þÿ
ú
ÿÿþþ

ùþÿÿþ
ýü

ûøþûþr�   c                  O   s2   t tƒ}t| i |¤ŽD ]\}}||  |¡ q|S r"   )r   rv   r�   r0   )ÚargsÚkwargsÚproblemsr(   Úproblemr+   r+   r,   ÚtestI  s    r”   c                 C   sB   | |v 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)Úosrc   ÚdirnameÚmakedirs)rc   r›   r+   r+   r,   Úensure_parent_dirZ  s    r�   c           W         sº  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|v �r |dO }t*|j+dPdƒ�r¸dQd=„ ˆD ƒ‰dR}nH|j, ¡ D ]<\}}ˆ|  -¡ }| ¡ D ]\}}t.||ƒˆ| |< �qÞ�qÂi }t/t0ƒ}dS|v �rÜ|dS }|dT }|du �r>t1|j2 3¡ ƒ}|D ]”} |j2|  D ]‚}!i }"g }#t1|!j ¡ ƒD ](\}$}%|%d4 |"|$< |# 4|$|%d4 f¡ �qjt|#ƒ}&|&|v�rº|j5|"dRdNdU�||&< t6| ||& ||& |ƒ �qP�qB�nŽdV|v �rj|dL j}'|dV j7j8d }(|(j9})|du �rt1|) 3¡ ƒ}|D �]F} |)|  }*|*j:}+t*|+dWdƒh},t*|+dWdƒ}-d}.t;|*j<ƒD ]>}/|/dXk�rv|, =|-¡ n|/dWk�r”t>|.t?ƒ�s�J ‚|.}-|/}.�q\t@|+dYƒ�s¬�q |+jAjB}0|,D ]¬}-|0jC|- }1|1jDD ]”}2|0jEjF|2 }3i }"g }#t;|3jGƒD ]0\}4}|'|4 j)}$|jH}%|%|"|$< |# 4|$|%f¡ �qît|#ƒ}&|&|v�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` I‡fdadb„|&D ƒ¡ d_ }5|�rÜ|5dc7 }5| 4|5¡ | 4||& ¡ |	 4t0|&ƒ¡ �qªdR| _Jg | _|	�s&ddd8„ |D ƒ}	| jD ]Š}6|6 de¡�rrddflKmL}7 |7|6ƒ}tMƒ }8| N|8¡ |8j%}
| 4|¡ n(ddJl#m$} ||6ƒ}|dK j%}
| 4|¡ | 4||6ƒ Odgd4¡d ¡ �q,t|ƒdhk �rÔtP Qdi¡ dS g }|D ]<}t@|djƒ�rö| 5¡ ‰n|‰| 4‡fdkd=„ˆ 3¡ D ƒ¡ �qÜ| jR�rnt| jRƒ‰ ‡ fdld8„tS||ƒD ƒ}‡ fdmd8„tS||	ƒD ƒ}	‡ fdnd8„|D ƒ}|�sŠt1tdod8„ |D ƒƒƒ}t|ƒ}9|D ]4‰tˆ 3¡ ƒ}:|9|: };|;�r–|;D ]}<dˆ|<< �q¸�q–‡‡fdpd8„|	D ƒ}	| jT�pêt}=| jUdu�rþ| jUnt}>�zftP Vdqt|ƒ¡ tP VdrtW|	ƒ¡ tX||||	|
| jJ|=|>| jYˆds�
}?t/tZƒ}@| j[du �	r`|j\nt]t^| j[ƒdtƒ}A| j_�sÚ| j`�	r¼ddl`}B|?D ]\} }C|@|   4|C¡ �	qŒta|B b|@¡|Adu� �qød}D|?D �]\} }E|@|   4|E¡ | |Dk�
rtadv| › dw�|Adu� | }Dd}Fdx|Ev �
r|Edx fn|Edy |Edz f}G|G|Fk�
rnd{|Ev �
rD|Ed{ fn|Ed| |Ed} f}Htad~d I|H¡ |Adu� |G}F|Ed€ tcjdk�
r–tad�|Ed{  |Adu� �	qÄ|Ed€ tcjek�
r¾tad‚|Ed{  |Adu� �	qÄ|Ed€ tcjfk�
rútadƒ|Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tcjgk�r<tad†|Ed‡ |Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tcjhk�r„tadˆ|Ed‰ |Ed‡ |Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tcjik�rÀtadŠ|Ed„ |Ed| |Ed… |Ed} f |Adu� �	qÄ|Ed€ tcjjk�rtad‹|EdŒ |Ed„ |Ed| |Ed… |Ed} |Ed� f |Adu� nÎ|Ed€ tcjkk�r:tadŽ|EdŒ |Ed| |Ed} f |Adu� nš|Ed€ tcjlk�rntad�|EdŒ |Ed| |Ed} f |Adu� nf|Ed€ tcjmk�r¨tad�|EdŒ |Ed‘ |Ed| |Ed} f |Adu� n,|Ed€ tcjnk�	rÄtad’|Ed| |Ed} f |Adu� �	qÄn|?D ]\} }C|@|   4|C¡ �qÞto|@ƒ}@d“D ]Ü}Et*| |Eƒ}I|Idu �r �qtP Vd”|E p¡ |I¡ d4d•lqmr}Jms}K |Ed–k�rP|Jn|K}L|Lt^|Iƒ||d—��f}M|Mjt||=|>d˜� |@�rˆ|M u|@¡ |M v|@¡ |@�s¨| j_�s¨|M w¡  |@�r¾|M x¡  |M y¡  W d  ƒ n1 �sÔ0    Y  �q| jz�rhtP Vd™| jz¡ d4dšlqm{}N g }Oi }P|N|O||d—��l}Q|Qjt|dN|=|>d›� |@ ¡ D ]*\}R}S|R|Pt|Oƒ< |Qjv|R|SidNdNdœ� �q6|@�sx| j_�sx|Q w¡  W d  ƒ n1 �sŽ0    Y  ddl|}Tt]t^| jzƒd�ƒ�¦}A|A }dž¡ |A }dŸ¡ |A }d ¡ t;|OƒD ]d\}U}Q|U|Pv �r|A }d¡|P|U › d¢� ~d£¡¡ |A }d¤ ~d£¡¡ |A }|T |Q¡¡ |A }d¥¡ |A }d¦¡ �qØ|A }d§¡ W d  ƒ n1 �s^0    Y  W n@ t€�yª }V z&|V j�|7  _�tP ‚|V¡ ‚ W Y d}V~Vn
d}V~V0 0 |@�r¶|@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    rZ   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)ÚmetavarrZ   Únargsr¡   z--nameÚNAMEr0   zGName of the master to use in the report. If not provided, all are used.)r¦   rZ   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+   )rc   ©r4   r[   r+   r+   r,   r7   Î  r8   zmain.<locals>.<listcomp>c                 S   s   g | ]
}|j ‘qS r+   ©Úlocationr°   r+   r+   r,   r7   Ï  r8   c                 S   s   h | ]}t |d ƒs|j’qS )Úminimum)Úhasattrr#   ©r4   Úar+   r+   r,   rS   Ð  s   zmain.<locals>.<setcomp>c                    s*   i | ]"}|j ˆ vr|j |j|j|jf“qS r+   ©r#   r³   ÚdefaultÚmaximumrµ   rT   r+   r,   Ú
<dictcomp>Ó  s   
þzmain.<locals>.<dictcomp>c                 S   s   i | ]}|j |j“qS r+   ©r#   Úmaprµ   r+   r+   r,   rº   Ø  r8   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>Ú  r8   ú"main.<locals>.<dictcomp>.<genexpr>©Útuple©r4   Ú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   ä  r8   c                 S   s    g | ]}d |j j|j jf ‘qS )z%s-%s)rm   Z
familyNameZ	styleName)r4   Úfr+   r+   r,   r7   å  r8   c                 S   s   g | ]
}|j ‘qS r+   r±   r°   r+   r+   r,   r7   ç  r8   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º   ë  r8   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Ä   í  r8   rÅ   rÆ   rÈ   rÊ   rË   r,   rº   ì  s   ÿz.ttfz.otf)ÚTTFontÚheadÚfvar©r9   r   r   FÚavarZVarStorec                 S   s   i | ]}|d dddœ“qS )r9   r   r   rÔ   r+   )r4   Útagr+   r+   r,   rº     r8   TÚgvarr—   )r²   Ú
normalizedZrecalcBoundsZCFF2ÚvsindexZblendÚvstorez''c                 S   s   i | ]
}|d “qS )rÔ   r+   rµ   r+   r+   r,   rº   d  r8   c                 S   s   t | ƒ| fS r"   )r.   )rÀ   r+   r+   r,   Ú<lambda>e  r8   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   ~  r8   z.ufo)Ú	UFOReaderÚ.rk   z9Font file does not seem to be variable. Nothing to check.ÚgetGlyphSetc                    s   i | ]}|ˆ | “qS r+   r+   )r4   rÃ   r3   r+   r,   rº   œ  r8   c                    s   g | ]\}}|ˆ v r|‘qS r+   r+   )r4   r#   r)   ©Úaccepted_namesr+   r,   r7      s   þc                    s   g | ]\}}|ˆ v r|‘qS r+   r+   )r4   r#   r²   ræ   r+   r,   r7   ¥  s   þc                    s   g | ]}|ˆ v r|‘qS r+   r+   )r4   r#   ræ   r+   r,   r7   ª  r8   c                 S   s   g | ]}|  ¡ D ]}|‘qqS r+   rQ   )r4   r)   Úgnr+   r+   r,   r7   ­  r8   c                    s0   g | ](}i t |ˆ ƒ¥‡fd d„| ¡ D ƒ¥‘qS )c                    s   i | ]\}}|ˆ v r||“qS r+   r+   rà   rT   r+   r,   rº   »  r8   z#main.<locals>.<listcomp>.<dictcomp>)r   Úitems)r4   Úloc)Úaxis_triplesrM   r+   r,   r7   ¸  s   üÿþzRunning on %d glyphsetszLocations: %s)	r‡   rˆ   rH   rK   r‰   rI   rJ   rL   rM   Úw)ÚfilezGlyph z was not compatible:r\   r_   r`   r[   r]   r^   z  Masters: %s:z, rZ   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %sra   rb   z5    Node count differs in path %i: %i in %s, %i in %src   z7    Node %o incompatible in path %i: %s in %s, %s in %srd   z-    Contour order differs: %s in %s, %s in %szD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srB   ri   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î   )rV   rˆ   )rI   rJ   zWriting HTML to %s)ÚInterpolatableSVG)Úshow_tolerancerI   rJ   )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minValueÚdefaultValueZmaxValueÚaxisTagr/   ÚtableÚsegmentsÚcopyr   r   r¾   ÚsortedZ
variationsrR   r0   rå   r–   ZcffZtopDictIndexZCharStringsÚprivater>   ÚprogramÚaddÚ
isinstanceÚintr´   rÚ   Z
otVarStoreZVarDataZVarRegionIndexZVarRegionListZRegionZVarRegionAxisZ	PeakCoordÚjoinr‰   ZfontTools.ufoLibrã   r   ZreadInfoÚrsplitrl   Úwarningr#   rn   rI   rJ   rm   r   r�   rL   rv   ÚoutputÚstdoutr‹   r�   ÚquietÚjsonÚprintÚdumpsro   rp   rq   rr   rs   rt   ru   ry   rz   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ˆ   rH   rK   Zoriginal_args_inputsZdesignspacer¯   rÌ   rÍ   ZgsfontrÑ   rÎ   rÓ   ZaxisrØ   rÕ   r  r	  ZfvarMappingr²   r=   ZttGlyphSetsrV   r×   r—   r(   ÚvarZlocDictrê   rÖ   ÚvalZlocTupleZfvarAxesZcff2ZcharstringsÚcsr  Z	vsindicesrÙ   Zlast_opr5   ZvarStoreZvarDataZregionIndexZregionZ	axisIndexr#   Úfilenamerã   rm   Z	glyphsSetZglyphSetGlyphNamesÚdiffrè   rI   rJ   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  rU   rC   r+   )rç   rá   rÂ   rë   rM   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š   Ú	getLoggerrl   rû   r€   r   r  r   r�   r”   r–   r�   r÷   rE   rõ   r’   Úexitr  Úboolr+   r+   r+   r,   Ú<module>   sd   
Z   üõ   M
	
    X
