o
    `i                     @   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 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)cycle)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   a/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/fontTools/varLib/interpolatablePlot.py__init__      
zOverridingDict.__init__c                 C   s
   | j | S r   r   )r   keyr   r   r   __missing__   r   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| |s&t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>p       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   r5   r6   r7   kwargskvr   r   r   r   m   s   
"zInterpolatablePlot.__init__c                 C   s   | S r   r   r   r   r   r   	__enter__}      zInterpolatablePlot.__enter__c                 C   s   d S r   r   r   typevalue	tracebackr   r   r   __exit__   rI   zInterpolatablePlot.__exit__c                 C   s   |  j d7  _ d S )Nr   )page_numberrG   r   r   r   	show_page   s   zInterpolatablePlot.show_pageTshow_tolerance	tolerance	kinkinessc             	   C   s  | 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 }z2t	|
d}|	
|  }W d    n1 sbw   Y  | jd| || ||d	 || j7 }W n	 ty   Y nw |
d
rt|
}d|v r|d nd }|rdD ]%\}}||}|d u rq| jd||f || ||d	 || j| j  7 }qq&|
drddlm} ||
}dD ]\}}| jd|t||f || ||d	 || j| j  7 }qq&| j|||d |   d S )Nr4   zProblem report for:Txyboldr=   rA   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\   
familyName)VersionMajorversionMajor)VersionMinor_versionMinorrQ   )r>   r=   
draw_labelrB   hashlibospathbasenamerA   opensha1read	hexdigestIsADirectoryErrorendswithr   getFirstDebugName	glyphsLibr`   getattrdraw_legendrP   )r   filesrR   rS   rT   r>   r=   rV   rW   rg   file	base_filefhttFontr[   whatnameIDsnr`   fieldr   r   r   add_title_page   sp   



z!InterpolatablePlot.add_title_pagec          
      C   s  t | j}| j}| j| j | jd  }| jd| j  }|| jd  }|| jd  }	|r=| jd|	||d || j| j 8 }| jd|	||d ||| jd  |d| j | j |j	| j
  |  | jrt|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 )Nr3   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   r   r   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr!   rV   rW   r   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>   r@   rA   r=   rf   	rectangleset_source_rgb
fill_colorfill_preservestroke_colorset_line_widthr   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=   xxxxxr   r   r   rt      s   ""

zInterpolatablePlot.draw_legendc              	   C   sT  | j }| jd| j   }| jd| j   }| }}| jd||d|| jd || j7 }tt}t| D ]\}}	|	D ]}
||
d  	| q8q2t
j|v rN|t
j= t|dd d	D ]M}|| j7 }| jd
|t|| f |||dd || j7 }t|| D ](}|| j |kr|   | j| }| j||d|  ||d|  d || j7 }qzqV|   d S )Nr4   r3   zSummary of problemsTrU   rK   c                 S   s
   t j|  S r   )InterpolatableProblemseverityrV   r   r   r   <lambda>m  s   
 z0InterpolatablePlot.add_summary.<locals>.<lambda>r   z%s: %dr   rZ   )r>   r=   r@   rf   rB   defaultdictsetsortedr9   addr   NOTHINGrA   lenrP   )r   problemsr>   r=   r@   rV   rW   glyphs_per_problem	glyphnameglyph_problemsproblemproblem_typer   r   r   add_summaryT  sP   





"zInterpolatablePlot.add_summaryc                 C   s   | j }| jd| j   }| jd| j   }| }}| j|||d|| jd || j| j  7 }d }|D ]A\}	\}
}|
|kr:q/|
}|| j |krL|   | j| }| j|
|d|  ||d|  d | jt|	||d| dd || j7 }q/|   d S )	Nr3   TrU   r_   rZ   r)   r   )rV   rW   r=   align)r>   r=   r@   rf   rB   rA   rP   str)r   titler9   r>   r=   r@   rV   rW   last_glyphname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   r8   r9   rG   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     s    z.InterpolatablePlot.add_index.<locals>.<lambda>r   r   rG   r   r   r   	add_index  s   "zInterpolatablePlot.add_indexrR   show_page_numberc          
      C   s   |  D ]N\}}d }g }|D ]4}d|v r|d n|d |d f}	|	|kr*|| q|r;| j||||d |   g }|	}|| q|rR| j||||d |   qd S )N
master_idxmaster_1_idxmaster_2_idxr   )r9   appendadd_problemrP   )
r   r   rR   r   glyphr   last_masterscurrent_glyph_problemsp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 s9dtdd D t	
d	  d
d v rHdnd}fdd|D }tjkrlt fddt| jD }|d| | j}	| j}
| jd  |	|
| jdd| jd tdd D }|dk r|r| 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 ]M\}}| 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 ]}|d tj&krfd%dd d& D }|_'qԈD ]}|d tj(kr|j'|d'  }j'|d'  }t) }t*|d(}|+| t) }t*|d(}|+| |d& }|d) rDt) }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 ]7}|d tj/kr|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'|_'qt$ }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y5   | j| j|	|
d Y nw |
| j| j 7 }
n(| j}6tj6|v rL| j7}6ntj8|v rV| 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 d S ).Nr   rK   c                 s       | ]}|d  V  qdS rK   Nr   r/   r   r   r   r   	<genexpr>      z1InterpolatablePlot.add_problem.<locals>.<genexpr>c                 3       | ]}| kV  qd S r   r   r/   ptr   r   r   r     r   z, c                 S   s   h | ]}|d  qS rK   r   r   r   r   r   	<setcomp>  r2   z1InterpolatablePlot.add_problem.<locals>.<setcomp>zDrawing %s: %sr   )r   )r   r   c                    s   g | ]} d  | qS )r   r   )r/   rE   )r   r   r   r1     s    z2InterpolatablePlot.add_problem.<locals>.<listcomp>c                 3   s$    | ]\}}|  d ur|V  qd S r   r   )r/   im)r   r   r   r     s    zGlyph name: T)rV   rW   r   r   rX   rA   c                 s   s    | ]	}| d dV  qdS )rS   r   N)getr/   r   r   r   r   r         r   ztolerance: %.2fr3   )rV   rW   r=   r   rX   z
Problems: )rV   rW   r=   r   rX   r$   )rV   rW   r   r=   r   )rV   rW   c                 s   s0    | ]}|t jt jt jt jt jt jfv V  qd S r   )r   r   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   r1   <  s    rV   rW   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   N  s    
zproposed fixglyphsetc                    s   g | ]} j | qS r   )rL   )r/   r   )perContourPen2r   r   r1   p  s    
value_2contourFreversedrL   fixed)rV   rW   r=   r   r   )>rK   listtupler8   rO   r   alljoinr   loginfor   MISSINGnext	enumerater6   insertr>   rf   
head_colorrB   minr=   rA   r7   label_colorr?   r   
draw_glyphdraw_emoticonshrugrC   anyr   r   PerContourOrComponentPenr   drawr   rL   r   r   r   replayr   r   r   r   complexabsrealimagextend
ValueErrorr   underweightr   
overweightr   yayr   r@   )7r   r   r   rR   r   problem_typesmaster_keysmaster_indicessample_glyphrV   rW   rS   scaleswhichr   r   r[   	glyphset1	glyphset2midway_glyphsetoverriding1overriding2perContourPen1r   fixed_contourswrongContour1wrongContour2points1	converterpoints2proposed_startnew_points2reversedPen	beginPathendPathptssegment1segment2r   jpt0pt1j_prevpt0_prevpt1_prevj_nextpt0_nextpt1_nextr0r1r_midfixed1fixed2r   emoticonr   )r   r   r   r   r   r     s  
	






















"
"








	
zInterpolatablePlot.add_problemr   )r   r   r   F)rV   rW   r   r   rX   r=   r@   rA   c                C   s  |d u r| j }|d u r| j}|	d u r| j}	t| j}
|
dtj|r%tjntj	 |

|	 |
 }|	|	 |d  }	|

|	 |
 }|
j|  |
|}|j |krg|	||j  9 }	|

|	 |
 }|
|}|||j  |  }||d  }|
|| |
| d S )Nz@cairo:r3   r   )r=   r@   rA   r   r   r   select_font_faceFONT_SLANT_NORMALFONT_WEIGHT_BOLDFONT_WEIGHT_NORMALset_font_sizefont_extentsr   text_extentsmove_to	show_text)r   labelrV   rW   r   r   rX   r=   r@   rA   r   r8  extentslabel_xlabel_yr   r   r   rf     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 s0d || }	t }
|	|
 t|}|	| t	|}|
| |j}|d u rWd}|d	 |d  }|d
 |d  }|r{|d u rs| j| }nt|| j| }|r|d u r| j| }nt|| j| }|d u rd}t| j}||| || j||  d	 | j||  d	  |||  ||d  |d
   | jr|j| j  ||d |d || || j|  |  | js| jr(t||}|
| | jr tjkr|j| j  |  | jr$|j| j  || j |  |!  |"  tj#v s4tj$v rit%t|d}|

| |D ]'}|d tj#tj$fv rg|j&|d  }|
t|| |j'| j(  |)  qAtfddtj*tj+tj,hD rd|-tj. |j&D ]\}}|sq|d \}}|/|| |0|| q|j'| j1  || j2|  |  |j&D ]"\}}|sq|d d D ]\}}|/|| |0|| qŐq|j'| j3  || j4|  |  |j&D ]c\}}|sq|dv r|j/|d   q|dkr%|D ]\}}|0|| q|5  |j/|d   q|dkrP|j0|d   |5  |j/|d   |j0|d	   |5  |j/|d   qq|j'| j6  || j7|  |  d }|D ]N}|d tj8kr|d }t9| j:}t%t|d}|

| t;|j&D ])\}}|| |krqt<|}|
t|| |j'g || j=R   |)  qqh|D ]}|d tj*tj>fv r|?d}|d ur)|dkr)d|v r)t%t|d}|
| t@ }tA|d}|j&|d u r|n||  
| |j&|d  d }|B  |j|  |d| d|  | jC|| jD| jEd |F  |dks4|?ds8| jG}n| jH}d }d}|B  |j&D ]\}}|dkrU|d }qF|d u r\qF|dkrd|} n|d } |d u sr||kr|B  tI| }tI|  } tJ| | }!||jK|jL |!r|MtNO| jL|jL | jK|jK  |d| d|  | jP||d n|d| d|  | jC|| jD|d |F  |d ur nd }|d7 }qF|F  |d tjQkrG|?d}t%t|d}|
| t@ }tA|d}|j&|d u r|n||  
| |j&|d  d }|B  |j|  |d| d|  |r9| jR|| jS| jT| jUd n
| jC|| jV| jWd |F  q|S )Nc                 s   s    | ]	}|d  dkV  qdS )rK   r   Nr   r   r   r   r   r   H  r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>r   rK   c                 s   r   r   r   r   r   r   r   r   J  r   c                 3   r   r   r   r   r   r   r   r   K  r   mixed)r   r   r   r   r3   r4   r   r   r   c                 3   s    | ]}| v V  qd S r   r   )r/   t)r
  r   r   r     s
    
r   )moveTolineToqCurveTocurveTor   F)r   r   r   rB  	closePath)r   rL   )r   r   r   )XrK   r   r   r   r   r   r   r   r   r	   r   boundsr?   r   rC   r   r   r   	translater   border_colorr   r   r   border_widthstroker   r   r
   r   	OPEN_PATHr   r   r   new_pathr   r   r   rL   r   r   r   r   
NODE_COUNTNODE_INCOMPATIBILITYset_line_capLINE_CAP_ROUNDr:  line_tooncurve_node_coloroncurve_node_diameteroffcurve_node_coloroffcurve_node_diameternew_sub_pathhandle_colorhandle_widthr   r   r   r   r   r   r   r   SimpleRecordingPointPenr   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   	recordingdecomposedRecording	boundsPenrG  glyph_widthglyph_heightr   penperContourPenr   r   segmentargsmatchingcolorsr   r   idxpointsr  targetPointfirst_pt	second_ptlengthr   )r   r
  r   r   D  s  


























zInterpolatablePlot.draw_glyph
   )rV   rW   r   r   c                C   sh   |   || |tj ||| ||| t|dkr%|d }|j|  |	  |
  d S )Nr4   r   )r[  r   rP  r   rQ  r:  rR  r   r   rK  r\  )r   r   rV   rW   r   r   r   r   r   r   V  s   

zInterpolatablePlot.draw_dot)rV   rW   r   r   r   c                C   sl   |   || |tj ||||d ddtj  t|dkr'|d }|j	|  |
  |  d S )Nr3   r   r4   rr  )r[  r   rP  r   LINE_CAP_SQUAREarcr^  pir   r   rK  r\  )r   r   rV   rW   r   r   r   r   r   r   r   b  s   

zInterpolatablePlot.draw_circler   c                C   s   |   t|dkr|d }|j|  || j| | |dd || j | j d  || j | jd  |  |  |	  d S )Nr4   rr  r   r-   )
r[  r   r   rH  r   r:  rR  
close_pathr   r\  )r   r   rV   rW   r   r   r   r   r   o  s"   

zInterpolatablePlot.draw_arrowrV   rW   r   r=   r@   c                C   s2  |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>|sTd S ||| t|| ||	 }||||  d ||	|  d  ||| |d| |D ]}|dd || |d| qd S )Nz@cairo:monospacer   r3   )r=   r@   
splitlinesr   r   r   r   r7  rA   r3  r4  r6  r8  r9  max	x_advancerH  r   r   r:  r;  )r   textrV   rW   r   r=   r@   r   
text_widthtext_heightr8  font_font_sizefont_ascentliner=  r   r   r   r   	draw_text  sD   




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 )Nr3   r$   T)rV   rW   r   r=   r   rX   rA   )rV   rW   r=   r@   r   )rf   no_issues_labelr>   no_issues_label_colorr=   rB   r  cupcakerA   r@   cupcake_colorrG   r   r   r   draw_cupcake  s$   

zInterpolatablePlot.draw_cupcakec                 C   s    | j |||| j| j| jd d S )Nrw  )r  emoticon_colorr?   rC   )r   r2  rV   rW   r   r   r   r     s   
z InterpolatablePlot.draw_emoticonr   )r   r   )@r   r   r   r=   r@   r>   rB   rA   rO   r   r   rI  rJ  r   r   r   rS  rT  rU  rV  rX  rY  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r  r  r	  r   rH   rN   rP   r   rt   r   r   r   r   r   r   rf   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   rG   	__class__r   r   rP     s   
z&InterpolatablePostscriptLike.show_page)r   r   r   rN   rP   __classcell__r   r   r  r   r    s    r  c                   @      e Zd Zdd ZdS )InterpolatablePSc                 C   s   t | j| j| j| _| S r   )r   	PSSurfacer5   r=   r@   r   rG   r   r   r   rH     s   zInterpolatablePS.__enter__Nr   r   r   rH   r   r   r   r   r        r  c                   @   r  )InterpolatablePDFc                 C   s:   t | j| j| j| _| jt jd | jt jd | S )Nzfonttools varLib.interpolatable )	r   
PDFSurfacer5   r=   r@   r   set_metadataPDF_METADATA_CREATORPDF_METADATA_CREATE_DATErG   r   r   r   rH     s   zInterpolatablePDF.__enter__Nr  r   r   r   r   r    r  r  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=   r@   r   rG   r   r   r   rH     s   zInterpolatableSVG.__enter__c                 C   s   | j d ur|   d S 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   )r  rP   r   r  r5   r   r  getvaluer   r   r  r=   r@   rG   r  r   r   rP     s
   

zInterpolatableSVG.show_page)r   r   r   rH   rN   rP   r  r   r   r  r   r    s    r  )"interpolatableHelpersfontTools.ttLibr   fontTools.ttLib.ttGlyphSetr   fontTools.pens.recordingPenr   r   r   fontTools.pens.boundsPenr	   fontTools.pens.cairoPenr
   fontTools.pens.pointPenr   r   r   	itertoolsr   ior   r   r^  rh   logging	getLoggerr   dictr   r   r  r  r  r  r   r   r   r   <module>   s:    
         /	
