o
    hW                     @   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   w/var/www/html/construction_image-detection-poc/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>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   r8   r9   r:   kwargskvr   r   r   r   r   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__   rL   zInterpolatablePlot.__exit__c                 C   s   |  j d7  _ d S )Nr   )page_numberrJ   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yy   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 )Nr7   r6   zProblem report for:Txyboldr@   rD   r   )rY   rZ   r[   r@   rbzsha1: %srY   rZ   r@   z.ttfname))Family name)   r#   r   )Version)   z%s: %s)z.glyphsz.glyphspackage)GSFont))r_   
familyName)VersionMajorversionMajor)VersionMinor_versionMinorrT   )rA   r@   rC   
draw_labelrE   hashlibospathbasenamerD   sha1openread	hexdigestIsADirectoryErrorendswithr   getFirstDebugName	glyphsLibrc   getattrdraw_legendrS   )r   filesrU   rV   rW   rA   r@   rC   rY   rZ   rj   file	base_filehttFontr^   whatnameIDsnrc   ffieldr   r   r   add_title_page   sn   



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 )Nr6   r,   z,Tolerance: badness; closer to zero the worser]   zUnderweight contoursr*   g      ?z/Colored contours: contours with the wrong orderr   zKink artifactr'   )rY   rZ   diameterstroke_widthcolorz!Point causing kink in the contour)rY   rZ   r   r   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr$   rY   rZ   r   z5Contour start point when the first two points overlapz!Contour start point and directionzLegend:TrY   rZ   r@   r[   z!Kink-reporting aggressiveness: %gzError tolerance: %gzParameters:)"cairoContextsurfacerA   rC   rD   r@   ri   	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   rU   rV   rW   crrY   rZ   r@   xxxxxr   r   r   rw      s   ""

zInterpolatablePlot.draw_legendc              	   C   sP  | j }| jd| j   }| jd| j   }| }}| jd||d|| jd || j7 }tt}t| D ]\}}|D ]}	||	d  	| q8q2d|v rL|d= 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 }qxqT|   d S )Nr7   r6   zSummary of problemsTrX   rN   nothingc                 S   s
   t j|  S r   )InterpolatableProblemseverityrY   r   r   r   <lambda>r  s   
 z0InterpolatablePlot.add_summary.<locals>.<lambda>r   z%s: %dr   r]   )rA   r@   rC   ri   rE   defaultdictsetsortedr<   addrD   lenrS   )r   problemsrA   r@   rC   rY   rZ   glyphs_per_problem	glyphnameproblemproblem_typer   r   r   add_summaryY  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 )	Nr6   TrX   rb   r]   r,   r   )rY   rZ   r@   align)rA   r@   rC   ri   rE   rD   rS   str)r   titler<   rA   r@   rC   rY   rZ   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   r;   r<   rJ   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   rJ   r   r   r   	add_index  s   "zInterpolatablePlot.add_indexrU   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   )r<   appendadd_problemrS   )
r   r   rU   r   glyphglyph_problems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   rN   c                 s       | ]}|d  V  qdS rN   Nr   r2   r   r   r   r   	<genexpr>      z1InterpolatablePlot.add_problem.<locals>.<genexpr>c                 3       | ]}| kV  qd S r   r   r2   ptr   r   r   r     r   z, c                 S   s   h | ]}|d  qS rN   r   r   r   r   r   	<setcomp>  r5   z1InterpolatablePlot.add_problem.<locals>.<setcomp>zDrawing %s: %sr   )r   )r   r   c                    s   g | ]} d  | qS )r   r   )r2   rH   )r   r   r   r4     s    z2InterpolatablePlot.add_problem.<locals>.<listcomp>c                 3   s$    | ]\}}|  d ur|V  qd S r   r   )r2   im)r   r   r   r     s    zGlyph name: T)rY   rZ   r   r   r[   rD   c                 s   s    | ]	}| d dV  qdS )rV   r   N)getr2   r   r   r   r   r         r   ztolerance: %.2fr6   )rY   rZ   r@   r   r[   z
Problems: )rY   rZ   r@   r   r[   r'   )rY   rZ   r   r@   r   )rY   rZ   c                 s   s0    | ]}|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   r4   A  s    rY   rZ   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   )rO   )r2   r   )perContourPen2r   r   r4   u  s    
value_2contourFreversedrO   fixed)rY   rZ   r@   r   r   )>rN   listtupler;   rR   r   alljoinr   loginfor   MISSINGnext	enumerater9   insertrA   ri   
head_colorrE   minr@   rD   r:   label_colorrB   r   
draw_glyphdraw_emoticonshrugrF   anyr   r   r   r   drawr   rO   r   r   r   replayr   r   r   r   complexabsrealimagextend
ValueErrorr   underweightr   
overweightr   yayr   rC   )7r   r   r   rU   r   problem_typesmaster_keysmaster_indicessample_glyphrY   rZ   rV   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)rY   rZ   r   r   r[   r@   rC   rD   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:r6   r   )r@   rC   rD   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   labelrY   rZ   r   r   r[   r@   rC   rD   r   r;  extentslabel_xlabel_yr   r   r   ri     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 )rN   r   Nr   r   r   r   r   r   M  r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>r   rN   c                 s   r   r   r   r   r   r   r   r   O  r   c                 3   r   r   r   r   r   r   r   r   P  r   mixed)r   r   r   r   r6   r7   r   r   r   c                 3   s    | ]}| v V  qd S r   r   )r2   t)r  r   r   r     s
    
r   )moveTolineToqCurveTocurveTor   F)r   r   r   rE  	closePath)r   rO   )r   r   r   )XrN   r   r   r  r   r   r   r  r   r	   r  boundsrB   r   rF   r   r   r   	translater   border_colorr   r   r   border_widthstroker   r   r
   r   	OPEN_PATHr   r   r   new_pathr   r   r   rO   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   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  rY   rZ   r   r   r   	recordingdecomposedRecording	boundsPenrJ  glyph_widthglyph_heightr   penperContourPenr   r   segmentargsmatchingcolorsr   r   idxpointsr  targetPointfirst_pt	second_ptlengthr   )r   r  r   r   I  s  


























zInterpolatablePlot.draw_glyph
   )rY   rZ   r   r   c                C   sh   |   || |tj ||| ||| t|dkr%|d }|j|  |	  |
  d S )Nr7   r   )r]  r   rS  r   rT  r=  rU  r   r   rN  r^  )r   r   rY   rZ   r   r   r   r   r   r   [  s   

zInterpolatablePlot.draw_dot)rY   rZ   r   r   r   c                C   sl   |   || |tj ||||d ddtj  t|dkr'|d }|j	|  |
  |  d S )Nr6   r   r7   rt  )r]  r   rS  r   LINE_CAP_SQUAREarcr`  pir   r   rN  r^  )r   r   rY   rZ   r   r   r   r   r   r   r   g  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 )Nr7   rt  r   r0   )
r]  r   r   rK  r   r=  rU  
close_pathr   r^  )r   r   rY   rZ   r   r   r   r   r   t  s"   

zInterpolatablePlot.draw_arrowrY   rZ   r   r@   rC   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   r6   )r@   rC   
splitlinesr   r   r   r   r:  rD   r6  r7  r9  r;  r<  max	x_advancerK  r   r   r=  r>  )r   textrY   rZ   r   r@   rC   r   
text_widthtext_heightr;  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 )Nr6   r'   T)rY   rZ   r   r@   r   r[   rD   )rY   rZ   r@   rC   r   )ri   no_issues_labelrA   no_issues_label_colorr@   rE   r  cupcakerD   rC   cupcake_colorrJ   r   r   r   draw_cupcake  s$   

zInterpolatablePlot.draw_cupcakec                 C   s    | j |||| j| j| jd d S )Nry  )r  emoticon_colorrB   rF   )r   r5  rY   rZ   r   r   r   r     s   
z InterpolatablePlot.draw_emoticonr   )r   r   )@r   r   r    r@   rC   rA   rE   rD   rR   r   r   rL  rM  r   r   r   rV  rW  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  r  r   rK   rQ   rS   r   rw   r   r   r   r   r   r   ri   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   finishrM   r   r   r   rQ     s   z%InterpolatablePostscriptLike.__exit__c                    s   t    | j  d S r   )superrS   r   rJ   	__class__r   r   rS     s   
z&InterpolatablePostscriptLike.show_page)r   r   r    rQ   rS   __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   	PSSurfacer8   r@   rC   r   rJ   r   r   r   rK     s   zInterpolatablePS.__enter__Nr   r   r    rK   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   
PDFSurfacer8   r@   rC   r   set_metadataPDF_METADATA_CREATORPDF_METADATA_CREATE_DATErJ   r   r   r   rK     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@   rC   r   rJ   r   r   r   rK     s   zInterpolatableSVG.__enter__c                 C   s   | j d ur|   d S d S r   )r   rS   rM   r   r   r   rQ     s   
zInterpolatableSVG.__exit__c                    sH   t    | j  | j| j  t | _t	
| j| j| j| _d S r   )r  rS   r   r  r8   r   r  getvaluer   r   r  r@   rC   rJ   r  r   r   rS     s
   

zInterpolatableSVG.show_page)r   r   r    rK   rQ   rS   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   &fontTools.varLib.interpolatableHelpersr   r   	itertoolsr   	functoolsr   ior   r   r`  rk   logging	getLoggerr   dictr   r!   r  r  r  r  r   r   r   r   <module>   s>    
         /	
