a
    ZXhW                     @   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   h/var/www/viveiro_mudafortebrasil/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 }|rd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 }	qq\| 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 }qq|   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 rdnd}fdd|D }tjkrt 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 }
qt 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) rt) }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reversedrM   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 rd}|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 rt%t|d}|

| |D ]N}|d tj#tj$fv r|j&|d  }|
t|| |j'| j(  |)  qt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 ]\}}|sn|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|MtNO| jL|jL | jK|jK  |d| d|  | jP||d n&|d| d|  | jC|| jD|d |F  |d ur qd }|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||sd 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<   
         /	
