U
    Q»{jW­  ã                   @   s   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 ddlmZmZ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ZddlZddlZddlZe d¡ZG dd„ de ƒZ!G dd„ dƒZ"G dd„ de"ƒZ#G dd„ de#ƒZ$G dd„ de#ƒZ%G dd„ de"ƒZ&dS )é   )Ú*é    )ÚTTFont)ÚLerpGlyphSet)ÚRecordingPenÚDecomposingRecordingPenÚRecordingPointPen)ÚControlBoundsPen)ÚCairoPen)ÚSegmentToPointPenÚPointToSegmentPenÚReverseContourPointPen)ÚPerContourOrComponentPenÚSimpleRecordingPointPen)Úcycle)Úwraps)ÚBytesIONzfontTools.varLib.interpolatablec                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚOverridingDictc                 C   s
   || _ d S ©N©Úparent_dict)Úselfr   © r   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/fontTools/varLib/interpolatablePlot.pyÚ__init__    s    zOverridingDict.__init__c                 C   s
   | j | S r   r   )r   Úkeyr   r   r   Ú__missing__#   s    zOverridingDict.__missing__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c                	   @   sÈ  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZdZ d
Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(d Z)d!Z*d"Z+dYd$d%„Z,d&d'„ Z-d(d)„ Z.d*d+„ Z/d,d#d#d-œd.d/„Z0d,d#d#d-œd0d1„Z1d2d3„ Z2d4d5„ Z3d6d7„ Z4d8d9„ Z5d,d,d:œd;d<„Z6d,d,d:œd=d>„Z7d?d?d@d?dAd#d#d#dBœdCdD„Z8d?d?d#dEœdFdG„Z9d?d?d@dHdIœdJdK„Z:d?d?d@dHddLœdMdN„Z;d?d?d@dOœdPdQ„Z<d?d?d@d#d#dRœdSdT„Z=dUdV„ Z>dZdWdX„Z?d#S )[ÚInterpolatablePlotg      ƒ@i  gÍÌÌÌÌÌ@é   é   r   )ç333333Ó?r#   r#   )çš™™™™™É?r$   r$   )çÍÌÌÌÌÌì?r%   r%   ç      à?)çš™™™™™é?r'   r'   )çš™™™™™¹?r(   r(   )r   r'   r   çffffffæ?é   )r   r&   r   r)   é   )r   r%   r   r)   é   )r   r   r   r)   )r   r   r   r)   é	   )r   r   r   r)   é   ))r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   çš™™™™™Ù?z#Your font's good! Have a cupcake...)r   r&   r   )r#   r   r#   a  
                          ,@.
                        ,@.@@,.
                  ,@@,.@@@.  @.@@@,.
                ,@@. @@@.     @@. @@,.
        ,@@@.@,.@.              @.  @@@@,.@.@@,.
   ,@@.@.     @@.@@.            @,.    .@' @'  @@,
 ,@@. @.          .@@.@@@.  @@'                  @,
,@.  @@.                                          @,
@.     @,@@,.     ,                             .@@,
@,.       .@,@@,.         .@@,.  ,       .@@,  @, @,
@.                             .@. @ @@,.    ,      @
 @,.@@.     @,.      @@,.      @.           @,.    @'
  @@||@,.  @'@,.       @@,.  @@ @,.        @'@@,  @'
     \\@@@@'  @,.      @'@@@@'   @@,.   @@@' //@@@'
      |||||||| @@,.  @@' |||||||  |@@@|@||  ||
       \\\\\\\  ||@@@||  |||||||  |||||||  //
        |||||||  ||||||  ||||||   ||||||  ||
         \\\\\\  ||||||  ||||||  ||||||  //
          ||||||  |||||  |||||   |||||  ||
           \\\\\  |||||  |||||  |||||  //
            |||||  ||||  |||||  ||||  ||
             \\\\  ||||  ||||  ||||  //
              ||||||||||||||||||||||||
)r   r#   r#   z\_(")_/z
 o
/|\
/ \
z
 o
/O\
/ \
z \o/ Nc                 K   sš   || _ || _|pdd„ |D ƒ| _i | _| ¡ D ]*\}}t| |ƒsLtd| ƒ‚t| ||ƒ q.| jd | j	d  | _
| jd | j	d  | jd  | j | _d S )Nc                 S   s   g | ]}t |ƒ‘qS r   )Úrepr)Ú.0Úgr   r   r   Ú
<listcomp>u   s     z/InterpolatablePlot.__init__.<locals>.<listcomp>zUnknown keyword argument: %sé   é   r*   )ÚoutÚ	glyphsetsÚnamesÚtocÚitemsÚhasattrÚ	TypeErrorÚsetattrÚwidthÚpadÚpanel_widthÚheightÚ	font_sizeÚtitle_font_sizeÚpanel_height)r   r6   r7   r8   ÚkwargsÚkÚvr   r   r   r   r   s    
"ÿzInterpolatablePlot.__init__c                 C   s   | S r   r   ©r   r   r   r   Ú	__enter__‚   s    zInterpolatablePlot.__enter__c                 C   s   d S r   r   ©r   ÚtypeÚvalueÚ	tracebackr   r   r   Ú__exit__…   s    zInterpolatablePlot.__exit__c                 C   s   |  j d7  _ d S )Nr   )Úpage_numberrH   r   r   r   Ú	show_pageˆ   s    zInterpolatablePlot.show_pageT©Úshow_toleranceÚ	toleranceÚ	kinkinessc             	   C   s   | j }| jd| j   }| jd| j   }| }}	| jd||	d|| jd� |	| j7 }	dd l}
|D �]„}tj |¡}|	| j	| j  7 }	| j|||	d|d� |	| j	| j  7 }	z@|
 
t|dƒ ¡ ¡ ¡ }| jd	| || |	|d
� |	| j	7 }	W n tk
rö   Y nX | d¡�r€t|ƒ}d|k�r|d nd }|�râdD ]P\}}| |¡}|d k�rL�q,| jd||f || |	|d
� |	| j	| j  7 }	�q,q\| d¡r\ddlm} ||ƒ}dD ]>\}}| jd|t||ƒf || |	|d
� |	| j	| j  7 }	�q¢q\| j|||d� |  ¡  d S )Nr5   r4   zProblem report for:T©ÚxÚyÚboldr>   rB   r   )rV   rW   rX   r>   Úrbzsha1: %s©rV   rW   r>   z.ttfÚname))úFamily name)é   r"   r   )ÚVersion)é   z%s: %s)z.glyphsz.glyphspackage)ÚGSFont))r\   Z
familyName)ZVersionMajorZversionMajor)ZVersionMinorZ_versionMinorrQ   )r?   r>   rA   Ú
draw_labelrC   ÚhashlibÚosÚpathÚbasenamerB   Úsha1ÚopenÚreadÚ	hexdigestÚIsADirectoryErrorÚendswithr   ZgetFirstDebugNameZ	glyphsLibr`   ÚgetattrÚdraw_legendrP   )r   ÚfilesrR   rS   rT   r?   r>   rA   rV   rW   rb   ÚfileZ	base_fileÚhZttFontr[   ÚwhatZnameIDsÚnr`   ÚfÚfieldr   r   r   Úadd_title_page‹   sr    ú




   ÿ
ü  ÿz!InterpolatablePlot.add_title_pagec          
      C   s  t  | j¡}| j}| j| j | jd  }| jd| j  }|| jd  }|| jd  }	|rz| jd|	||d� || j| j 8 }| jd|	||d� | || jd  |d| j | j¡ |j	| j
Ž  | ¡  | jrè|j	| jŽ  | | j¡ | ¡  |j| jŽ  | ¡  || j| j 8 }| jd|	||d� | || jd  |d| j | j¡ | j
�r\|j	| j
Ž  | ¡  | j�r„|j	| jŽ  | | j¡ | ¡  |j| jd	 | jfžŽ  | ¡  || j| j 8 }| jd
|	||d� | j|||| jd  | j| j| jd� || j| j 8 }| jd|	||d� | j|||| jd  | j| jd� || j| j 8 }| jd|	||d� | j|||| jd  | j| jd� || j| j 8 }| jd|	||d� | j||| jd  || jd  | j d� || j| j 8 }| jd|	||d� | j|||| jd  | j| j!d� || j| j 8 }| jd|	||d� | j||| jd  || jd  | j!d� || j| j 8 }| jd|||dd� || j| j 8 }|d k	�r°| jd| |	||d� || j| j 8 }|d k	�rà| jd| |	||d� || j| j 8 }| jd|||dd� || j| j 8 }d S )Nr4   r+   z,Tolerance: badness; closer to zero the worserZ   zUnderweight contoursr)   g      ø?z/Colored contours: contours with the wrong orderr   zKink artifactr&   )rV   rW   ÚdiameterÚstroke_widthÚcolorz!Point causing kink in the contour)rV   rW   rv   rx   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr#   ©rV   rW   rx   z5Contour start point when the first two points overlapz!Contour start point and directionzLegend:T©rV   rW   r>   rX   z!Kink-reporting aggressiveness: %gzError tolerance: %gzParameters:)"ÚcairoÚContextÚsurfacer?   rA   rB   r>   ra   Ú	rectangleÚset_source_rgbÚ
fill_colorÚfill_preserveÚstroke_colorÚset_line_widthrw   Ústroke_preserveÚset_source_rgbaÚweight_issue_contour_colorÚfillÚcontour_colorsÚcontour_alphaÚdraw_circleÚkink_circle_sizeÚkink_circle_stroke_widthÚkink_circle_colorÚdraw_dotÚkink_point_sizeÚkink_point_colorÚcorrected_start_point_sizeÚcorrected_start_point_colorÚ
draw_arrowÚstart_arrow_lengthÚwrong_start_point_colorÚstart_point_color)
r   rR   rS   rT   ÚcrrV   rW   r>   ZxxZxxxr   r   r   rm   Ñ   sú       ÿ"   ÿ"úûûüüüûü
ü
üzInterpolatablePlot.draw_legendc              	   C   sR  | j }| jd| j   }| jd| j   }| }}| jd||d|| jd� || j7 }ttƒ}t| ¡ ƒD ]$\}}|D ]}	||	d   	|¡ qpqdd|kr˜|d= t|dd	„ d
�D ]œ}
|| j
7 }| jd|
t||
 ƒf |||dd� || j
7 }t||
 ƒD ]R}|| j
 |k�r|  ¡  | j
| }| j||d|  ||d|  d� || j
7 }qðq¨|  ¡  d S )Nr5   r4   zSummary of problemsTrU   rK   Znothingc                 S   s
   t j|  S r   )ÚInterpolatableProblemZseverity©rV   r   r   r   Ú<lambda>r  ó    z0InterpolatablePlot.add_summary.<locals>.<lambda>©r   z%s: %drz   rZ   )r?   r>   rA   ra   rC   ÚdefaultdictÚsetÚsortedr:   ÚaddrB   ÚlenrP   )r   Úproblemsr?   r>   rA   rV   rW   Zglyphs_per_problemÚ	glyphnameÚproblemÚproblem_typer   r   r   Úadd_summaryY  sN    ú
 ÿ

û

"zInterpolatablePlot.add_summaryc                 C   sî   | j }| jd| j   }| jd| j   }| }}| j|||d|| jd� || j| j  7 }d }|D ]‚\}	\}
}|
|krtq^|
}|| j |kr˜|  ¡  | j| }| j|
|d|  ||d|  d� | jt|	ƒ||d| dd� || j7 }q^|  ¡  d S )	Nr4   TrU   r_   rZ   r+   r   )rV   rW   r>   Úalign)r?   r>   rA   ra   rC   rB   rP   Ústr)r   Útitler:   r?   r>   rA   rV   rW   Zlast_glyphnameZpage_nor£   r¢   r   r   r   Ú_add_listing‡  s2         ÿ
"zInterpolatablePlot._add_listingc                 C   s   |   dt| j ¡ ƒ¡ d S )NzTable of contents©rª   rŸ   r9   r:   rH   r   r   r   Úadd_table_of_contents   s    z(InterpolatablePlot.add_table_of_contentsc                 C   s"   |   dt| j ¡ dd„ d�¡ d S )NÚIndexc                 S   s   | d d S )Nr   r   r   r™   r   r   r   rš   ¤  r›   z.InterpolatablePlot.add_index.<locals>.<lambda>rœ   r«   rH   r   r   r   Ú	add_index£  s    zInterpolatablePlot.add_index©rR   Úshow_page_numberc          
      C   sª   |  ¡ D ]œ\}}d }g }|D ]h}d|kr0|d n|d |d f}	|	|krT| |¡ q|rv| j||||d� |  ¡  g }|	}| |¡ q|r| j||||d� |  ¡  qd S )NÚ
master_idxÚmaster_1_idxÚmaster_2_idxr¯   )r:   ÚappendÚadd_problemrP   )
r   r¢   rR   r°   ÚglyphZglyph_problemsZlast_mastersZcurrent_glyph_problemsÚpZmastersr   r   r   Úadd_problems¦  s<    ÿ
ý
üüzInterpolatablePlot.add_problemsc          7         s	  t ˆƒttfkrˆg‰ˆ ˆf| j| j< ˆd d ‰tdd„ ˆD ƒƒ}t‡fdd„|D ƒƒsrd tdd„ ˆD ƒƒ¡‰t	 
d	ˆ ˆ¡ d
ˆd kr�dnd}‡fdd„|D ƒ}ˆtjkrØt‡ fdd„t| jƒD ƒƒ}| d|¡ | j}	| j}
| jdˆ  |	|
| jdd| jd� tdd„ ˆD ƒƒ}|dk �rL|�rL| jd| |	|
| jd| j  ddd� |
| j| j 7 }
| jdˆ |	|
| jd| j  | jdd� |
| j| jd  7 }
g }t|ƒD ]œ\}}| j| }| j| }| j||	|
| j| jdd� |
| j| j 7 }
|ˆ  d k	�r| | j|ˆ ˆ||	|
d�¡ n| j| j|	|
d� |
| j| j | j 7 }
�q¤t dd„ |D ƒƒ�r(| j| j | j }	| j}
|
| j| jd  7 }
|
| j| j 7 }
| j|d  }| j|d  }| jd|	|
| j| jdd� |
| j| j 7 }
t!||ƒ}| j|ˆ ddigd d„ ˆD ƒ d |	|
t|ƒd!� |
| j| j | j 7 }
t d"d„ |D ƒƒ�rˆ| jd#|	|
| j| jdd� |
| j| j 7 }
t"|ƒ}t"|ƒ}t#t$|d$�}t#t$|d$�‰|ˆ   %|¡ |ˆ   %ˆ¡ ˆD ]6}|d tj&k�r®‡fd%d„ˆd d& D ƒ}|ˆ_'�q®ˆD �]V}|d tj(k�rê|j'|d'  }ˆj'|d'  }t)ƒ }t*|d(ƒ}| +|¡ t)ƒ }t*|d(ƒ}| +|¡ |d& }|d) �r�t)ƒ }t,|ƒ} | +| ¡ |}t-|j'ƒd | }|j'd d… }!|j'd*d … }"|j'dd*… }#|#|d … |#d |…  }#|!|# |" |_'t$ƒ }$t.|$dƒ}| +|¡ t$ƒ }%t.|%dƒ}| +|¡ |$j'|_'|%j'|_'||j'|d' < |ˆj'|d' < �qêˆD �]n}|d tj/k�rH|j'|d'  }ˆj'|d'  }t)ƒ }t*|d(ƒ}| +|¡ t)ƒ }t*|d(ƒ}| +|¡ |d+ }&|&d }'|j'|' d d }(|j'|' d d })|&d t-|j'ƒd  d }*|j'|* d d }+|j'|* d d },|&d t-|j'ƒd  d }-|j'|- d d }.|j'|- d d }/t0|(Ž }(t0|)Ž })t0|+Ž }+t0|,Ž },t0|.Ž }.t0|/Ž }/t1|(|+ ƒt1|.|+ ƒ }0t1|)|, ƒt1|/|, ƒ }1|0|1 d }2|+|2|.|+   }(|,|2|/|,   })|j'|' d |(j2|(j3ff|j'|' d dd …  |j'|' d f|j'|'< |j'|' d |)j2|)j3ff|j'|' d dd …  |j'|' d f|j'|'< t$ƒ }$t.|$dƒ}| +|¡ t$ƒ }%t.|%dƒ}| +|¡ |$j'|_'|%j'|_'�qHt$ƒ }3t$ƒ }4|j'D ]}5|3j' 4|5j'¡ �qÌˆj'D ]}5|4j' 4|5j'¡ �qè|3j+|3_%|4j+|4_%|3|ˆ < |4|ˆ < z.t!||ƒ}| j|ˆ dd,id |	|
t|ƒd!� W n( t5k
�rt   | j| j|	|
d� Y nX |
| j| j 7 }
nP| j}6tj6|k�r¢| j7}6n&tj8|k�r¶| j9}6ntj:|k�rÈ| j;}6| j|6|	|
d� |�	r| jt<| jƒd| j=| j | j | j| jdd-� d S ).Nr   rK   c                 s   s   | ]}|d  V  qdS ©rK   Nr   ©r1   r¤   r   r   r   Ú	<genexpr>Ñ  s     z1InterpolatablePlot.add_problem.<locals>.<genexpr>c                 3   s   | ]}|ˆ kV  qd S r   r   ©r1   Úpt©r¥   r   r   r»   Ò  s     z, c                 S   s   h | ]}|d  ’qS ©rK   r   rº   r   r   r   Ú	<setcomp>Ó  s     z1InterpolatablePlot.add_problem.<locals>.<setcomp>zDrawing %s: %sr±   )r±   )r²   r³   c                    s   g | ]}ˆ d  | ‘qS )r   r   )r1   rF   )r¢   r   r   r3   Ü  s     z2InterpolatablePlot.add_problem.<locals>.<listcomp>c                 3   s"   | ]\}}|ˆ  d k	r|V  qd S r   r   )r1   ÚiÚm)r£   r   r   r»   ß  s     zGlyph name: T)rV   rW   rx   r§   rX   rB   c                 s   s   | ]}|  d d¡V  qdS )rS   r   N)Úget©r1   r·   r   r   r   r»   ð  s     r   ztolerance: %.2fr4   )rV   rW   r>   r§   rX   z
Problems: )rV   rW   r>   rx   rX   r&   )rV   rW   rx   r>   r§   )rV   rW   c                 s   s.   | ]&}|t jt jt jt jt jt jfkV  qd S r   )r˜   ÚNOTHINGÚWRONG_START_POINTÚCONTOUR_ORDERÚKINKÚUNDERWEIGHTÚ
OVERWEIGHTr¼   r   r   r   r»     s   
÷úÿzmidway interpolationÚmidwayc                 S   s(   g | ] }|d  t jt jt jfkr|‘qS r¿   )r˜   rÈ   rÉ   rÊ   rÄ   r   r   r   r3   A  s   ýÿþ©rV   rW   Úscalec                 s   s"   | ]}|t jt jt jfkV  qd S r   )r˜   rÆ   rÇ   rÈ   r¼   r   r   r   r»   S  s   úýÿzproposed fix©Úglyphsetc                    s   g | ]}ˆ j | ‘qS r   )rL   )r1   rÁ   )ÚperContourPen2r   r   r3   u  s    Úvalue_2ÚcontourFÚreversedéÿÿÿÿrL   Zfixed)rV   rW   r>   rx   r§   )>rK   ÚlistÚtupler9   rO   rž   ÚallÚjoinrŸ   ÚlogÚinfor˜   ÚMISSINGÚnextÚ	enumerater7   Úinsertr?   ra   Ú
head_colorrC   Úminr>   rB   r8   Úlabel_colorr@   r´   Ú
draw_glyphÚdraw_emoticonÚshrugrD   Úanyr   r   r   r   ÚdrawrÇ   rL   rÆ   r   r   Úreplayr   r¡   r   rÈ   ÚcomplexÚabsÚrealÚimagÚextendÚ
ValueErrorrÉ   ÚunderweightrÊ   Ú
overweightrÅ   Úyayr¨   rA   )7r   r£   r¢   rR   r°   Úproblem_typesZmaster_keysZmaster_indicesZsample_glyphrV   rW   rS   ÚscalesÚwhichr±   rÏ   r[   Z	glyphset1Z	glyphset2Zmidway_glyphsetZoverriding1Zoverriding2ZperContourPen1r¤   Zfixed_contoursZwrongContour1ZwrongContour2Zpoints1Ú	converterZpoints2Zproposed_startZnew_points2ZreversedPenZ	beginPathZendPathZptsZsegment1Zsegment2rÁ   ÚjZpt0Zpt1Zj_prevZpt0_prevZpt1_prevZj_nextZpt0_nextZpt1_nextZr0Úr1Zr_midZfixed1Zfixed2rÒ   Úemoticonr   )r£   rÐ   r¥   r¢   r   rµ   È  sö   
ÿý
ÿù	úú

úÿ
ö
ú
þÿïù
ú ÿ ÿ

ÿ
















"ý
"ý







ù
	úzInterpolatablePlot.add_problemr   )r   r   r   F)rV   rW   rx   r§   rX   r>   rA   rB   c                C   s  |d kr| j }|d kr| j}|	d kr*| j}	t | j¡}
|
 dtj|rJtjntj	¡ |
 
|	¡ |
 ¡ }|	|	 |d  }	|
 
|	¡ |
 ¡ }|
j|Ž  |
 |¡}|j |krÎ|	||j  9 }	|
 
|	¡ |
 ¡ }|
 |¡}|||j  |  }||d  }|
 ||¡ |
 |¡ d S )Nz@cairo:r4   r   )r>   rA   rB   r{   r|   r}   Úselect_font_faceÚFONT_SLANT_NORMALZFONT_WEIGHT_BOLDÚFONT_WEIGHT_NORMALÚset_font_sizeÚfont_extentsr   Útext_extentsÚmove_toÚ	show_text)r   ÚlabelrV   rW   rx   r§   rX   r>   rA   rB   r—   rü   ÚextentsZlabel_xZlabel_yr   r   r   ra     s8    ý






zInterpolatablePlot.draw_labelrÌ   c          "   	      sœ  t |ƒttfkr|g}tdd„ |D ƒƒ}|d d ‰ tdd„ |D ƒƒ‰t‡ fdd„ˆD ƒƒs`d‰ || }	tƒ }
|	 |
¡ t|ƒ}|	 |¡ t	|ƒ}| 
|¡ |j}|d kr®d}|d	 |d  }|d
 |d  }|rö|d kræ| j| }nt|| j| ƒ}|�r"|d k�r| j| }nt|| j| ƒ}|d k�r0d}t | j¡}| ||¡ | | j||  d	 | j||  d	 ¡ | || ¡ | |d  |d
  ¡ | j�rÚ|j| jŽ  | |d |d ||¡ | | j| ¡ | ¡  | j�sê| j�rZt||ƒ}| 
|¡ | j�r&ˆ tjk�r&|j| jŽ  | ¡  | j�rR|j| jŽ  | | j | ¡ | !¡  | "¡  tj#ˆk�srtj$ˆk�rÜt%t|d�}|
 
|¡ |D ]N}|d tj#tj$fk�rŒ|j&|d  }| 
t||ƒ¡ |j'| j(Ž  | )¡  �qŒt‡fdd„tj*tj+tj,hD ƒƒ�rÎ| -tj.¡ |j&D ]8\}}|�s$�q|d \}}| /||¡ | 0||¡ �q|j'| j1Ž  | | j2| ¡ | ¡  |j&D ]D\}}|�sˆ�qv|d d… D ]"\}}| /||¡ | 0||¡ �q”�qv|j'| j3Ž  | | j4| ¡ | ¡  |j&D ]Â\}}|�sön°|dk�r|j/|d Ž  n–|dk�rN|D ]\}}| 0||¡ �q| 5¡  |j/|d Ž  nX|dk�ræ|j0|d Ž  | 5¡  |j/|d Ž  |j0|d	 Ž  | 5¡  |j/|d Ž  n�qæ�qæ|j'| j6Ž  | | j7| ¡ | ¡  d }|D ]˜}|d tj8k�rÖ|d }t9| j:ƒ}t%t|d�}|
 
|¡ t;|j&ƒD ]N\}}|| |k�r6�qt<|ƒ}| 
t||ƒ¡ |j'|| j=fžŽ  | )¡  �q�qÖ|D �] }|d tj*tj>fk�r¾| ?d¡}|d k	�rT|dk�rTd|k�rTt%t|d�}| 
|¡ t@ƒ }tA|dƒ}|j&|d k�rð|n||   
|¡ |j&|d  d }| B¡  |j|Ž  | d| d| ¡ | jC|| jD| jEd� | F¡  |dk�sj| ?d¡�sr| jG}n| jH}d }d}| B¡  |j&D �]$\}}|dk�r®|d }�qŽ|d k�r¼�qŽ|dk�rÌ|} n|d } |d k�sè||k�r¦| B¡  tI|Ž }tI| Ž } tJ| | ƒ}!| |jK|jL¡ |!�rh| MtN O| jL|jL | jK|jK ¡¡ | d| d| ¡ | jP||d� n&| d| d| ¡ | jC|| jD|d� | F¡  |d k	�r¦ �q¶d }|d7 }�qŽ| F¡  |d tjQk�rt| ?d¡}t%t|d�}| 
|¡ t@ƒ }tA|dƒ}|j&|d k�r|n||   
|¡ |j&|d  d }| B¡  |j|Ž  | d| d| ¡ |�rx| jR|| jS| jT| jUd� n| jC|| jV| jWd� | F¡  �qt|S )Nc                 s   s   | ]}|d  dkV  qdS )rK   rË   Nr   rº   r   r   r   r»   M  s     z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>r   rK   c                 s   s   | ]}|d  V  qdS r¹   r   rº   r   r   r   r»   O  s     c                 3   s   | ]}|ˆ kV  qd S r   r   r¼   r¾   r   r   r»   P  s     Úmixed)r   r   r   r   r4   r5   r   rÎ   rÒ   c                 3   s   | ]}|ˆ kV  qd S r   r   )r1   Út)rñ   r   r   r»   ž  s   ÿrÔ   )ÚmoveToZlineToZqCurveToZcurveTorÑ   F)rv   rx   rÓ   r  Z	closePath)rx   rL   )rv   rw   rx   )XrK   rÕ   rÖ   rå   rž   r×   r   ræ   r   r	   rç   Úboundsr@   rà   rD   r{   r|   r}   Ú	translaterÍ   Úborder_colorr   r~   rƒ   Úborder_widthÚstroker€   r‚   r
   r˜   Z	OPEN_PATHr�   rw   r„   Únew_pathrÉ   rÊ   r   rL   r…   r†   r‡   rÅ   Z
NODE_COUNTZNODE_INCOMPATIBILITYÚset_line_capÚLINE_CAP_ROUNDrþ   Úline_toÚoncurve_node_colorÚoncurve_node_diameterÚoffcurve_node_colorÚoffcurve_node_diameterZnew_sub_pathÚhandle_colorÚhandle_widthrÇ   r   rˆ   rÝ   rÜ   r‰   rÆ   rÃ   r   r   ÚsaverŽ   r‘   r’   Úrestorer–   r•   rè   ré   rê   rë   ÚrotateÚmathÚatan2r“   rÈ   rŠ   r‹   rŒ   r�   r�   r�   )"r   rÏ   r£   r¢   ró   rV   rW   rÍ   rË   r¶   Z	recordingZdecomposedRecordingZ	boundsPenr  Zglyph_widthZglyph_heightr—   ÚpenZperContourPenr¤   rÒ   ÚsegmentÚargsZmatchingÚcolorsrÁ   rx   ÚidxZpointsrô   ZtargetPointZfirst_ptZ	second_ptÚlengthr   )r¥   rñ   r   râ   I  sÐ   




þ

ÿþ
þýþ




 ÿ

þ
 ÿ

ÿþ
ý




þÿý

 ÿ

ÿ
üýzInterpolatablePlot.draw_glyphé
   )rV   rW   rx   rv   c                C   sh   |  ¡  | |¡ | tj¡ | ||¡ | ||¡ t|ƒdkrJ|d }|j|Ž  | 	¡  | 
¡  d S )Nr5   ©r   )r  rƒ   r  r{   r  rþ   r  r¡   r…   r	  r  )r   r—   rV   rW   rx   rv   r   r   r   rŽ   [  s    

zInterpolatablePlot.draw_dot)rV   rW   rx   rv   rw   c                C   sl   |  ¡  | |¡ | tj¡ | |||d ddtj ¡ t|ƒdkrN|d }|j	|Ž  | 
¡  | ¡  d S )Nr4   r   r5   r   )r  rƒ   r  r{   ZLINE_CAP_SQUAREÚarcr  Úpir¡   r…   r	  r  )r   r—   rV   rW   rx   rv   rw   r   r   r   rŠ   g  s    

zInterpolatablePlot.draw_circlery   c                C   sŽ   |  ¡  t|ƒdkr|d }|j|Ž  | | j| |¡ | dd¡ | | j | j d ¡ | | j | jd ¡ | ¡  | ¡  | 	¡  d S )Nr5   r   r   r/   )
r  r¡   r…   r  r”   rþ   r  Z
close_pathr‡   r  )r   r—   rV   rW   rx   r   r   r   r“   t  s"    

þþzInterpolatablePlot.draw_arrow©rV   rW   rx   r>   rA   c                C   s4  |d kr| j }|d kr| j}| ¡ }t | j¡}|j|Ž  | | j¡ | 	dtj
tj¡ d}d}	| ¡ }
|
d }|
d }|D ]"}| |¡}t||jƒ}|	|7 }	q||s¨d S | ||¡ t|| ||	 ƒ}| |||  d ||	|  d ¡ | ||¡ | d|¡ |D ](}| dd¡ | |¡ | d|¡ �qd S )Nz@cairo:monospacer   r4   )r>   rA   Ú
splitlinesr{   r|   r}   r   rû   rB   rø   rù   rú   rü   rý   ÚmaxZ	x_advancer  rà   rÍ   rþ   rÿ   )r   ÚtextrV   rW   rx   r>   rA   r—   Ú
text_widthZtext_heightrü   Zfont_font_sizeZfont_ascentÚliner  rÍ   r   r   r   Ú	draw_text‡  sH    
  ÿ

 ÿ
zInterpolatablePlot.draw_textc              
   C   sv   | j | j| j| j| j| jd| j  dd| jd� | j| j| j| j| j | jd| j  | j	d| j  | j | j
d� d S )Nr4   r&   T)rV   rW   rx   r>   r§   rX   rB   )rV   rW   r>   rA   rx   )ra   Úno_issues_labelr?   Úno_issues_label_colorr>   rC   r)  ÚcupcakerB   rA   Úcupcake_colorrH   r   r   r   Údraw_cupcake­  s$    ø
úzInterpolatablePlot.draw_cupcakec                 C   s    | j |||| j| j| jd� d S )Nr#  )r)  Úemoticon_colorr@   rD   )r   r÷   rV   rW   r   r   r   rã   Â  s    úz InterpolatablePlot.draw_emoticon)N)r   r   )@r   r   r   r>   rA   r?   rC   rB   rO   rß   rá   r  r  r€   r‚   rw   r  r  r  r  r  r  r’   r‘   r•   r–   r”   r�   r�   r‹   rŒ   r�   rˆ   r‰   r†   r*  r+  r-  r,  r/  rä   rî   rï   rð   r   rI   rN   rP   ru   rm   r¦   rª   r¬   r®   r¸   rµ   ra   râ   rŽ   rŠ   r“   r)  r.  rã   r   r   r   r   r    '   s¨   
  ÿF 	.# ÿ  Xõ/      ÿ&r    c                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )ÚInterpolatablePostscriptLikec                 C   s   | j  ¡  d S r   )r}   ÚfinishrJ   r   r   r   rN   Î  s    z%InterpolatablePostscriptLike.__exit__c                    s   t ƒ  ¡  | j ¡  d S r   )ÚsuperrP   r}   rH   ©Ú	__class__r   r   rP   Ñ  s    
z&InterpolatablePostscriptLike.show_page)r   r   r   rN   rP   Ú__classcell__r   r   r3  r   r0  Í  s   r0  c                   @   s   e Zd Zdd„ ZdS )ÚInterpolatablePSc                 C   s   t  | j| j| j¡| _| S r   )r{   Z	PSSurfacer6   r>   rA   r}   rH   r   r   r   rI   ×  s    zInterpolatablePS.__enter__N©r   r   r   rI   r   r   r   r   r6  Ö  s   r6  c                   @   s   e Zd Zdd„ ZdS )ÚInterpolatablePDFc                 C   s:   t  | j| j| j¡| _| j t jd¡ | j t jd¡ | S )Nzfonttools varLib.interpolatableÚ )	r{   Z
PDFSurfacer6   r>   rA   r}   Zset_metadataZPDF_METADATA_CREATORZPDF_METADATA_CREATE_DATErH   r   r   r   rI   Ý  s     ÿzInterpolatablePDF.__enter__Nr7  r   r   r   r   r8  Ü  s   r8  c                       s,   e Zd Zdd„ Zdd„ Z‡ fdd„Z‡  ZS )ÚInterpolatableSVGc                 C   s"   t ƒ | _t | j| j| j¡| _| S r   )r   Úsinkr{   Ú
SVGSurfacer>   rA   r}   rH   r   r   r   rI   ç  s    zInterpolatableSVG.__enter__c                 C   s   | j d k	r|  ¡  d S r   )r}   rP   rJ   r   r   r   rN   ì  s    
zInterpolatableSVG.__exit__c                    sH   t ƒ  ¡  | j ¡  | j | j ¡ ¡ tƒ | _t	 
| j| j| j¡| _d S r   )r2  rP   r}   r1  r6   r´   r;  Úgetvaluer   r{   r<  r>   rA   rH   r3  r   r   rP   ð  s
    

zInterpolatableSVG.show_page)r   r   r   rI   rN   rP   r5  r   r   r3  r   r:  æ  s   r:  )'ZinterpolatableHelpersZfontTools.ttLibr   ZfontTools.ttLib.ttGlyphSetr   ZfontTools.pens.recordingPenr   r   r   ZfontTools.pens.boundsPenr	   ZfontTools.pens.cairoPenr
   ZfontTools.pens.pointPenr   r   r   Z&fontTools.varLib.interpolatableHelpersr   r   Ú	itertoolsr   Ú	functoolsr   Úior   r{   r  rc   ÚloggingÚ	getLoggerrÙ   Údictr   r    r0  r6  r8  r:  r   r   r   r   Ú<module>   s<   
         /	
