a
    —ÆàgW­  ã                   @   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   ú\/var/www/sistema_ama/venv/lib/python3.9/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   ó    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   r7   r8   r9   Ú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_numberrI   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yô   Y n0 | d¡�r~t|ƒ}d|v �r|d nd }|�ràdD ]P\}}| |¡}|d u �rJ�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 )Nr6   r5   zProblem report for:T©ÚxÚyÚboldr?   rC   r   )rW   rX   rY   r?   Úrbzsha1: %s©rW   rX   r?   z.ttfÚname))úFamily name)é   r"   r   )ÚVersion)é   z%s: %s)z.glyphsz.glyphspackage)ÚGSFont))r]   Z
familyName)ZVersionMajorZversionMajor)ZVersionMinorZ_versionMinorrR   )r@   r?   rB   Ú
draw_labelrD   ÚhashlibÚosÚpathÚbasenamerC   Úsha1ÚopenÚreadÚ	hexdigestÚIsADirectoryErrorÚendswithr   ZgetFirstDebugNameZ	glyphsLibra   ÚgetattrÚdraw_legendrQ   )r   ÚfilesrS   rT   rU   r@   r?   rB   rW   rX   rc   ÚfileZ	base_fileÚhZttFontr\   ÚwhatZnameIDsÚnra   ÚfÚfieldr   r   r   Úadd_title_page‹   sh    ú



ÿ
üÿ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g | jd	 ¢| j‘R Ž  | ¡  || 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 u�r´| jd| |	||d� || j| j 8 }|d u�rä| jd| |	||d� || j| j 8 }| jd|||dd� || j| j 8 }d S )Nr5   r+   z,Tolerance: badness; closer to zero the worser[   zUnderweight contoursr)   g      ø?z/Colored contours: contours with the wrong orderr   zKink artifactr&   )rW   rX   ÚdiameterÚstroke_widthÚcolorz!Point causing kink in the contour)rW   rX   rw   ry   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr#   ©rW   rX   ry   z5Contour start point when the first two points overlapz!Contour start point and directionzLegend:T©rW   rX   r?   rY   z!Kink-reporting aggressiveness: %gzError tolerance: %gzParameters:)"ÚcairoÚContextÚsurfacer@   rB   rC   r?   rb   Ú	rectangleÚset_source_rgbÚ
fill_colorÚfill_preserveÚstroke_colorÚset_line_widthrx   Ú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   rS   rT   rU   ÚcrrW   rX   r?   ÚxxZxxxr   r   r   rn   Ñ   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|v 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 )Nr6   r5   zSummary of problemsTrV   rL   Znothingc                 S   s
   t j|  S r   )ÚInterpolatableProblemZseverity©rW   r   r   r   Ú<lambda>r  r4   z0InterpolatablePlot.add_summary.<locals>.<lambda>©r   z%s: %dr{   r[   )r@   r?   rB   rb   rD   ÚdefaultdictÚsetÚsortedr;   ÚaddrC   ÚlenrQ   )r   Úproblemsr@   r?   rB   rW   rX   Zglyphs_per_problemÚ	glyphnameÚproblemÚproblem_typer   r   r   Úadd_summaryY  sL    ú
ÿ

û

"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 )	Nr5   TrV   r`   r[   r+   r   )rW   rX   r?   Úalign)r@   r?   rB   rb   rD   rC   rQ   Ústr)r   Útitler;   r@   r?   rB   rW   rX   Zlast_glyphnameZpage_nor¤   r£   r   r   r   Ú_add_listing‡  s(    ÿ
"zInterpolatablePlot._add_listingc                 C   s   |   dt| j ¡ ƒ¡ d S )NzTable of contents©r«   r    r:   r;   rI   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œ   ¤  r4   z.InterpolatablePlot.add_index.<locals>.<lambda>r�   r¬   rI   r   r   r   Ú	add_index£  s    zInterpolatablePlot.add_index©rS   Úshow_page_numberc          
      C   sª   |  ¡ D ]œ\}}d }g }|D ]h}d|v 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_problemrQ   )
r   r£   rS   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v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 v 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 u�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& t5�yr   | j| j|	|
d� Y n0 |
| j| j 7 }
nP| j}6tj6|v �r | j7}6n&tj8|v �r´| j9}6ntj:|v �rÆ| j;}6| j|6|	|
d� |�	r
| jt<| jƒd| j=| j | j | j| jdd-� d S ).Nr   rL   c                 s   s   | ]}|d  V  qdS ©rL   Nr   ©r1   r¥   r   r   r   Ú	<genexpr>Ñ  r4   z1InterpolatablePlot.add_problem.<locals>.<genexpr>c                 3   s   | ]}|ˆ kV  qd S r   r   ©r1   Úpt©r¦   r   r   r¼   Ò  r4   z, c                 S   s   h | ]}|d  ’qS ©rL   r   r»   r   r   r   Ú	<setcomp>Ó  r4   z1InterpolatablePlot.add_problem.<locals>.<setcomp>zDrawing %s: %sr²   )r²   )r³   r´   c                    s   g | ]}ˆ d  | ‘qS )r   r   )r1   rG   )r£   r   r   r3   Ü  r4   z2InterpolatablePlot.add_problem.<locals>.<listcomp>c                 3   s"   | ]\}}|ˆ  d ur|V  qd S r   r   )r1   ÚiÚm)r¤   r   r   r¼   ß  s   zGlyph name: T)rW   rX   ry   r¨   rY   rC   c                 s   s   | ]}|  d d¡V  qdS )rT   r   N)Úget©r1   r¸   r   r   r   r¼   ð  r4   r   ztolerance: %.2fr5   )rW   rX   r?   r¨   rY   z
Problems: )rW   rX   r?   ry   rY   r&   )rW   rX   ry   r?   r¨   )rW   rX   c                 s   s.   | ]&}|t jt jt jt jt jt jfv 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v r|‘qS rÀ   )rš   rÉ   rÊ   rË   rÅ   r   r   r   r3   A  s   ýÿþ©rW   rX   Úscalec                 s   s"   | ]}|t jt jt jfv 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   )rM   )r1   rÂ   )ÚperContourPen2r   r   r3   u  s   Úvalue_2ÚcontourFÚreversedéÿÿÿÿrM   Úfixed)rW   rX   r?   ry   r¨   )>rL   ÚlistÚtupler:   rP   rŸ   ÚallÚjoinr    ÚlogÚinforš   ÚMISSINGÚnextÚ	enumerater8   Úinsertr@   rb   Ú
head_colorrD   Úminr?   rC   r9   Úlabel_colorrA   rµ   Ú
draw_glyphÚdraw_emoticonÚshrugrE   Úanyr   r   r   r   ÚdrawrÈ   rM   rÇ   r   r   Úreplayr   r¢   r   rÉ   ÚcomplexÚabsÚrealÚimagÚextendÚ
ValueErrorrÊ   ÚunderweightrË   Ú
overweightrÆ   Úyayr©   rB   )7r   r¤   r£   rS   r±   Úproblem_typesZmaster_keysZmaster_indicesZsample_glyphrW   rX   rT   Z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r0Zr1Zr_midZfixed1Zfixed2rÓ   Úemoticonr   )r¤   rÑ   r¦   r£   r   r¶   È  sò   
ÿý
ÿù	úú

úÿ
ö
ú
þÿïù
úÿÿ

ÿ
















"ý
"ý







ù
	úzInterpolatablePlot.add_problemr   )r   r   r   F)rW   rX   ry   r¨   rY   r?   rB   rC   c                C   s  |d u r| j }|d u r| j}|	d u 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:r5   r   )r?   rB   rC   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   ÚlabelrW   rX   ry   r¨   rY   r?   rB   rC   r˜   rü   ÚextentsZlabel_xZlabel_yr   r   r   rb     s8    ý






zInterpolatablePlot.draw_labelrÍ   c          "   	      s   t |ƒttfvr|g}tdd„ |D ƒƒ}|d d ‰ tdd„ |D ƒƒ‰t‡ fdd„ˆD ƒƒs`d‰ || }	tƒ }
|	 |
¡ t|ƒ}|	 |¡ t	|ƒ}| 
|¡ |j}|d u r®d}|d	 |d  }|d
 |d  }|rö|d u ræ| j| }nt|| j| ƒ}|�r"|d u �r| j| }nt|| j| ƒ}|d u �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#ˆv �srtj$ˆv �rÜt%t|d�}|
 
|¡ |D ]N}|d tj#tj$fv �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v �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 ]R\}}|| |k�r6�qt<|ƒ}| 
t||ƒ¡ |j'g |¢| j=‘R Ž  | )¡  �q�qÖ|D �] }|d tj*tj>fv �rÂ| ?d¡}|d u�rX|dk�rXd|v �rXt%t|d�}| 
|¡ t@ƒ }tA|dƒ}|j&|d u �rô|n||   
|¡ |j&|d  d }| B¡  |j|Ž  | d| d| ¡ | jC|| jD| jEd� | F¡  |dk�sn| ?d¡�sv| jG}n| jH}d }d}| B¡  |j&D �]$\}}|dk�r²|d }�q’|d u �rÀ�q’|dk�rÐ|} n|d } |d u �sì||k�rª| B¡  tI|Ž }tI| Ž } tJ| | ƒ}!| |jK|jL¡ |!�rl| MtN O| jL|jL | jK|jK ¡¡ | d| d| ¡ | jP||d� n&| d| d| ¡ | jC|| jD|d� | F¡  |d u�rª �qºd }|d7 }�q’| F¡  |d tjQk�rx| ?d¡}t%t|d�}| 
|¡ t@ƒ }tA|dƒ}|j&|d u �r|n||   
|¡ |j&|d  d }| B¡  |j|Ž  | d| d| ¡ |�r|| jR|| jS| jT| jUd� n| jC|| jV| jWd� | F¡  �qx|S )Nc                 s   s   | ]}|d  dkV  qdS )rL   rÌ   Nr   r»   r   r   r   r¼   M  r4   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>r   rL   c                 s   s   | ]}|d  V  qdS rº   r   r»   r   r   r   r¼   O  r4   c                 3   s   | ]}|ˆ kV  qd S r   r   r½   r¿   r   r   r¼   P  r4   Úmixed)r   r   r   r   r5   r6   r   rÏ   rÓ   c                 3   s   | ]}|ˆ v V  qd S r   r   )r1   Út)ró   r   r   r¼   ž  s   ÿrÕ   )ÚmoveToZlineToZqCurveToZcurveTorÒ   F)rw   ry   rÔ   r  Z	closePath)ry   rM   )rw   rx   ry   )XrL   r×   rØ   rç   rŸ   rÙ   r   rè   r   r	   ré   ÚboundsrA   râ   rE   r|   r}   r~   Ú	translaterÎ   Úborder_colorr€   r   r„   Úborder_widthÚstroker�   rƒ   r
   rš   Z	OPEN_PATHr‚   rx   r…   Únew_pathrÊ   rË   r   rM   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ô   rW   rX   rÎ   rÌ   r·   Z	recordingZdecomposedRecordingZ	boundsPenr  Zglyph_widthZglyph_heightr˜   ZpenZperContourPenr¥   rÓ   ÚsegmentÚargsZmatchingÚcolorsrÂ   ry   ÚidxZpointsrõ   ZtargetPointZfirst_ptZ	second_ptÚlengthr   )r¦   ró   r   rä   I  sÊ   




þ

ÿþ
þýþ




ÿ

þ
ÿ

ÿþ
ý




þÿý

ÿ

ÿ
üýzInterpolatablePlot.draw_glyphé
   )rW   rX   ry   rw   c                C   sh   |  ¡  | |¡ | tj¡ | ||¡ | ||¡ t|ƒdkrJ|d }|j|Ž  | 	¡  | 
¡  d S )Nr6   ©r   )r  r„   r  r|   r  rþ   r  r¢   r†   r	  r  )r   r˜   rW   rX   ry   rw   r   r   r   r�   [  s    

zInterpolatablePlot.draw_dot)rW   rX   ry   rw   rx   c                C   sl   |  ¡  | |¡ | tj¡ | |||d ddtj ¡ t|ƒdkrN|d }|j	|Ž  | 
¡  | ¡  d S )Nr5   r   r6   r  )r  r„   r  r|   ZLINE_CAP_SQUAREZarcr  Úpir¢   r†   r	  r  )r   r˜   rW   rX   ry   rw   rx   r   r   r   r‹   g  s    

zInterpolatablePlot.draw_circlerz   c                C   sŽ   |  ¡  t|ƒdkr|d }|j|Ž  | | j| |¡ | dd¡ | | j | j d ¡ | | j | jd ¡ | ¡  | ¡  | 	¡  d S )Nr6   r  r   r/   )
r  r¢   r†   r  r•   rþ   r  Z
close_pathrˆ   r  )r   r˜   rW   rX   ry   r   r   r   r”   t  s"    

þþzInterpolatablePlot.draw_arrow©rW   rX   ry   r?   rB   c                C   s4  |d u r| j }|d u 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   r5   )r?   rB   Ú
splitlinesr|   r}   r~   r€   rû   rC   rø   rù   rú   rü   rý   ÚmaxZ	x_advancer  râ   rÎ   rþ   rÿ   )r   ÚtextrW   rX   ry   r?   rB   r˜   Ú
text_widthZtext_heightrü   Zfont_font_sizeZfont_ascentÚliner  rÎ   r   r   r   Ú	draw_text‡  sB    

ÿ

ÿ
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 )Nr5   r&   T)rW   rX   ry   r?   r¨   rY   rC   )rW   rX   r?   rB   ry   )rb   Úno_issues_labelr@   Úno_issues_label_colorr?   rD   r'  ÚcupcakerC   rB   Úcupcake_colorrI   r   r   r   Údraw_cupcake­  s$    ø
úzInterpolatablePlot.draw_cupcakec                 C   s    | j |||| j| j| jd� d S )Nr!  )r'  Úemoticon_colorrA   rE   )r   r÷   rW   rX   r   r   r   rå   Â  s    úz InterpolatablePlot.draw_emoticon)N)r   r   )@r   r   r   r?   rB   r@   rD   rC   rP   rá   rã   r  r  r�   rƒ   rx   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   rJ   rO   rQ   rv   rn   r§   r«   r­   r¯   r¹   r¶   rb   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~   ÚfinishrK   r   r   r   rO   Î  s    z%InterpolatablePostscriptLike.__exit__c                    s   t ƒ  ¡  | j ¡  d S r   )ÚsuperrQ   r~   rI   ©Ú	__class__r   r   rQ   Ñ  s    
z&InterpolatablePostscriptLike.show_page)r   r   r   rO   rQ   Ú__classcell__r   r   r1  r   r.  Í  s   r.  c                   @   s   e Zd Zdd„ ZdS )ÚInterpolatablePSc                 C   s   t  | j| j| j¡| _| S r   )r|   Z	PSSurfacer7   r?   rB   r~   rI   r   r   r   rJ   ×  s    zInterpolatablePS.__enter__N©r   r   r   rJ   r   r   r   r   r4  Ö  s   r4  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
PDFSurfacer7   r?   rB   r~   Zset_metadataZPDF_METADATA_CREATORZPDF_METADATA_CREATE_DATErI   r   r   r   rJ   Ý  s    ÿzInterpolatablePDF.__enter__Nr5  r   r   r   r   r6  Ü  s   r6  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?   rB   r~   rI   r   r   r   rJ   ç  s    zInterpolatableSVG.__enter__c                 C   s   | j d ur|  ¡  d S r   )r~   rQ   rK   r   r   r   rO   ì  s    
zInterpolatableSVG.__exit__c                    sH   t ƒ  ¡  | j ¡  | j | j ¡ ¡ tƒ | _t	 
| j| j| j¡| _d S r   )r0  rQ   r~   r/  r7   rµ   r9  Úgetvaluer   r|   r:  r?   rB   rI   r1  r   r   rQ   ð  s
    

zInterpolatableSVG.show_page)r   r   r   rJ   rO   rQ   r3  r   r   r1  r   r8  æ  s   r8  )'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  rd   ÚloggingÚ	getLoggerrÛ   Údictr   r    r.  r4  r6  r8  r   r   r   r   Ú<module>   s<   
         /	
