
    gW                     `   d dl  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j<                  d      Z G d de       Z! G d d      Z" G d de"      Z# G d de#      Z$ G d de#      Z% G d de"      Z&y)   )*    )TTFont)LerpGlyphSet)RecordingPenDecomposingRecordingPenRecordingPointPen)ControlBoundsPen)CairoPen)SegmentToPointPenPointToSegmentPenReverseContourPointPen)PerContourOrComponentPenSimpleRecordingPointPen)cycle)wraps)BytesIONzfontTools.varLib.interpolatablec                       e Zd Zd Zd Zy)OverridingDictc                     || _         y Nparent_dict)selfr   s     {/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/fontTools/varLib/interpolatablePlot.py__init__zOverridingDict.__init__    s
    &    c                      | j                   |   S r   r   )r   keys     r   __missing__zOverridingDict.__missing__#   s    $$r   N)__name__
__module____qualname__r   r     r   r   r   r      s    '%r   r   c            	          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+dEd$Z,d% Z-d& Z.d' Z/d(d#d#d)d*Z0d(d#d#d)d+Z1d, Z2d- Z3d. Z4d/ Z5d(d(d0d1Z6d(d(d0d2Z7d3d3d4d3d5d#d#d#d6d7Z8d3d3d#d8d9Z9d3d3d4d:d;d<Z:d3d3d4d:dd=d>Z;d3d3d4d?d@Z<d3d3d4d#d#dAdBZ=dC Z>dFdDZ?y#)G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                    || _         || _        |xs |D cg c]  }t        |       c}| _        i | _        |j                         D ],  \  }}t        | |      st        d|z        t        | ||       . | j                  dz  | j                  dz  z
  | _        | j                  dz  | j                  dz  z
  | j                  dz  z
  | j                  z
  | _        y c c}w )NzUnknown keyword argument: %s      r0   )out	glyphsetsreprnamestocitemshasattr	TypeErrorsetattrwidthpadpanel_widthheight	font_sizetitle_font_sizepanel_height)r   r9   r:   r<   kwargsgkvs           r   r   zInterpolatablePlot.__init__r   s    ":	:1tAw:
LLN 	 DAq4# > BCCD!Q	 
  ::>DHHqL8KK!Odhhl*T^^a-??$BVBVV 	 ;s   Cc                     | S r   r$   r   s    r   	__enter__zInterpolatablePlot.__enter__   s    r   c                      y r   r$   r   typevalue	tracebacks       r   __exit__zInterpolatablePlot.__exit__   s    r   c                 .    | xj                   dz  c_         y )Nr   )page_numberrN   s    r   	show_pagezInterpolatablePlot.show_page   s    Ar   Tshow_tolerance	tolerance	kinkinessc          
         | j                   }| j                  d| j                   z  z
  }| j                  d| j                   z  z
  }|x}}	| j                  d||	d|| j                         |	| j                  z  }	dd l}
|D ]  }t        j                  j                  |      }|	| j                  | j                   z   z  }	| j                  |||	d|       |	| j                  | j                   z   z  }		 |
j                  t        |d      j                               j                         }| j                  d	|z  ||z   |	|
       |	| j                  z  }	|j                  d      rrt!        |      }d|v r|d   nd }|sdD ]R  \  }}|j#                  |      }|| j                  |d|||z   |	|
       |	| j                  | j                   z   z  }	T V|j                  d      siddlm}  ||      }dD ]H  \  }}| j                  |dt)        ||      ||z   |	|
       |	| j                  | j                   z   z  }	J  | j+                  |||       | j-                          y # t        $ r Y %w xY w)Nr8   r7   zProblem report for:TxyboldrB   rF   r   )r_   r`   ra   rB   rbzsha1: %sr_   r`   rB   z.ttfname))Family name)   r(   r   )Version)   z: )z.glyphsz.glyphspackage)GSFont))re   
familyName)VersionMajorversionMajor)VersionMinor_versionMinorrY   )rC   rB   rE   
draw_labelrG   hashlibospathbasenamerF   sha1openread	hexdigestIsADirectoryErrorendswithr   getFirstDebugName	glyphsLibri   getattrdraw_legendrX   )r   filesrZ   r[   r\   rC   rB   rE   r_   r`   rp   file	base_filehttFontrd   whatnameIDsnri   ffields                         r   add_title_pagez!InterpolatablePlot.add_title_page   s    hh

Q\)q488|+A!** 	 	
 	
T!!! +	3D((.I$((**AOOIad%OH$((**ALLdD!1!6!6!89CCE
Q!c'QeLT^^# }}V$)/6)9vf~t* 
7g !227;9$(,a0AGq (  T^^dhh66
7 <=,4L$ 3KD%
 OO$('!U*;<c'#	 $  $((22A3A+	3Z 	)Y) 	 	
 	M % s   1A!I++	I87I8c                   t        j                  | j                        }| j                  }| j                  | j                  z
  | j
                  dz  z
  }| j                  d| j                  z  z
  }|| j                  dz  z   }|| j                  dz  z   }	|r1| j                  d|	||       || j                  | j
                  z   z  }| j                  d|	||       |j                  || j                  dz  z
  |d| j                  z  | j
                          |j                  | j                    |j                          | j                  rD |j                  | j                    |j                  | j                         |j                           |j                   | j"                    |j%                          || j                  | j
                  z   z  }| j                  d|	||       |j                  || j                  dz  z
  |d| j                  z  | j
                         | j                  r) |j                  | j                    |j                          | j                  rD |j                  | j                    |j                  | j                         |j                           |j                   g | j&                  d	   | j(                    |j%                          || j                  | j
                  z   z  }| j                  d
|	||       | j+                  |||| j
                  dz  z   | j,                  | j.                  | j0                         || j                  | j
                  z   z  }| j                  d|	||       | j3                  |||| j
                  dz  z   | j4                  | j6                         || j                  | j
                  z   z  }| j                  d|	||       | j3                  |||| j
                  dz  z   | j8                  | j:                         || j                  | j
                  z   z  }| j                  d|	||       | j=                  ||| j>                  dz  z
  || j
                  dz  z   | j@                         || j                  | j
                  z   z  }| j                  d|	||       | j3                  |||| j
                  dz  z   | j8                  | jB                         || j                  | j
                  z   z  }| j                  d|	||       | j=                  ||| j>                  dz  z
  || j
                  dz  z   | jB                         || j                  | j
                  z   z  }| j                  d|||d       || j                  | j
                  z   z  }|4| j                  d|z  |	||       || j                  | j
                  z   z  }|4| j                  d|z  |	||       || j                  | j
                  z   z  }| j                  d|||d       || j                  | j
                  z   z  }y )Nr7   r1   z,Tolerance: badness; closer to zero the worserc   zUnderweight contoursr/   g      ?z/Colored contours: contours with the wrong orderr   zKink artifactr,   )r_   r`   diameterstroke_widthcolorz!Point causing kink in the contour)r_   r`   r   r   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr)   r_   r`   r   z5Contour start point when the first two points overlapz!Contour start point and directionzLegend:Tr_   r`   rB   ra   z!Kink-reporting aggressiveness: %gzError tolerance: %gzParameters:)"cairoContextsurfacerC   rE   rF   rB   ro   	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   rZ   r[   r\   crr_   r`   rB   xxxxxs
             r   r}   zInterpolatablePlot.draw_legend   s   ]]4<<(HHKK$(("T^^a%77

Q\)A$((Q,OO>#RW   DNN**A.#%H
R$((S.(!S488^T^^L4??+
Bt001d//0 D;;<
		TXX&&=QV 	 	
 	R$((S.(!S488^T^^L??Bt/Bt001d//0 GD//2GD4F4FG
		TXX&&3!5A$..3&&**66(( 	 	
 	
TXX&&;sauU$..3&&))'' 	 	
 	
TXX&&;sauU$..3&&4422 	 	
 	
TXX&&B	 	 	
 	4**S00$..3&&..	 	 	
 	
TXX&&C	 	 	
 	$..3&&44(( 	 	
 	
TXX&&;sauU4**S00$..3&&((	 	 	
 	
TXX&&	Q!5tD	TXX&& OO3i?	   DNN**A OO%	1	   DNN**Aau4H	TXX&&r   c           
      V   | j                   }| j                  d| j                   z  z
  }| j                  d| j                   z  z
  }|x}}| j                  d||d|| j                         || j                  z  }t        t              }t        |j                               D ]#  \  }}|D ]  }	||	d      j                  |        % d|v r|d= t        |d 	      D ]  }
|| j                  z  }| j                  d
|
t        ||
         fz  |||d       || j                  z  }t        ||
         D ]c  }|| j                  z   |kD  r| j                          | j                  |z   }| j                  ||d|z  z   ||d|z  z
         || j                  z  }e  | j                          y )Nr8   r7   zSummary of problemsTr^   rR   nothingc                 (    t         j                  |    S r   )InterpolatableProblemseverityr_   s    r   <lambda>z0InterpolatablePlot.add_summary.<locals>.<lambda>r  s    .C.L.LQ.O r   r   z%s: %dr   rc   )rC   rB   rE   ro   rG   defaultdictsetsortedr>   addrF   lenrX   )r   problemsrC   rB   rE   r_   r`   glyphs_per_problem	glyphnameproblemproblem_types              r   add_summaryzInterpolatablePlot.add_summaryY  s   hh

Q\)q488|+A!** 	 	
 	
T!!!(-#)(..*:#; 	CIx# C"76?377	BC	C **"9-"$O
 	$L AOOL#.@.N*OPP   A#$6|$DE $	t~~%.NN$,A	QS[AUQQTW_UT^^#$	$( 	r   c           	      b   | j                   }| j                  d| j                   z  z
  }| j                  d| j                   z  z
  }|x}}| j                  |||d|| j                         || j                  | j                   z   z  }d }|D ]  \  }	\  }
}|
|k(  r|
}|| j
                  z   |kD  r| j                          | j
                  |z   }| j                  |
|d|z  z   ||d|z  z
         | j                  t        |	      ||d|z  d       || j
                  z  } | j                          y )	Nr7   Tr^   rh   rc   r1   r   )r_   r`   rB   align)rC   rB   rE   ro   rG   rF   rX   str)r   titler>   rC   rB   rE   r_   r`   last_glyphnamepage_nor   r   s               r   _add_listingzInterpolatablePlot._add_listing  s2   hh

Q\)q488|+AQ!$et?S?S 	 	
 	
T!!DHH,,.3 		 *G*iN*&N4>>!F* NNS(OOIQWSOQOOCLA!c'OKA		  	r   c                 j    | j                  dt        | j                  j                                      y )NzTable of contentsr   r   r=   r>   rN   s    r   add_table_of_contentsz(InterpolatablePlot.add_table_of_contents  s#    -vdhhnn6F/GHr   c                 p    | j                  dt        | j                  j                         d              y )NIndexc                     | d   d   S )Nr   r   r$   r   s    r   r   z.InterpolatablePlot.add_index.<locals>.<lambda>  s    !A$q' r   r   r   rN   s    r   	add_indexzInterpolatablePlot.add_index  s%    '6$((..*:@Q#RSr   rZ   show_page_numberc                f   |j                         D ]  \  }}d }g }|D ]h  }d|v r|d   n	|d   |d   f}	|	|k(  r|j                  |       -|r'| j                  ||||       | j                          g }|	}|j                  |       j |sz| j                  ||||       | j                           y )N
master_idxmaster_1_idxmaster_2_idxr   )r>   appendadd_problemrX   )
r   r   rZ   r   glyphglyph_problemslast_masterscurrent_glyph_problemspmasterss
             r   add_problemszInterpolatablePlot.add_problems  s    %-^^%5 	!!E>L%'"# 1 $q( lON+Q~->? 
 l**11!4)$$.'5)9	 %  NN$-/*&&--a0)1* &  *#1%5	 !   ?	!r   c                  : t        |      t        t        fvr|g}|f| j                  | j                  <   |d   d   :t        d |D              }t        :fd|D              s+dj                  t        |D ch c]  }|d   	 c}            :t        j                  d:       d|d   v rdnd	}|D cg c]
  }|d   |    }	}:t        j                  k(  r9t        fd
t        | j                        D              }
|	j!                  d|
       | j"                  }| j"                  }| j%                  dz   ||| j&                  dd| j(                         t+        d |D              }|dk  r6|r4| j%                  d|z  ||| j,                  d| j"                  z  z
  dd       || j(                  | j"                  z   z  }| j%                  d:z   ||| j,                  d| j"                  z  z
  | j&                  d       || j.                  | j"                  dz  z   z  }g }t        |	      D ]  \  }}| j                  |   }| j0                  |   }| j%                  |||| j2                  | j4                  d       || j.                  | j"                  z   z  }|   '|j7                  | j9                  |||||             n| j;                  | j<                  ||       || j>                  | j.                  z   | j"                  z   z  } tA        d |D              rv| j"                  | j4                  z   | j"                  z   }| j"                  }|| j(                  | j"                  dz  z   z  }|| j.                  | j"                  z   z  }| j                  |	d      }| j                  |	d      }| j%                  d||| j&                  | j4                  d       || j.                  | j"                  z   z  }tC        ||      }| j9                  |ddig|D cg c]8  }|d   t        jD                  t        jF                  t        jH                  fv r|: c}z   d ||t+        |             || j>                  | j.                  z   | j"                  z   z  }tA        d |D              r| j%                  d||| j&                  | j4                  d       || j.                  | j"                  z   z  }tK              }tK              }tM        tN        |      }tM        tN        |      }|   jQ                  |       |   jQ                  |       |D ]B  }|d   t        jR                  k(  s|d   d   D cg c]  }|jT                  |    }}||_*        D |D ]  }|d   t        jV                  k(  s|jT                  |d       }|jT                  |d       }tY               }t[        |d!      } |j]                  |        tY               }!t[        |!d!      } |j]                  |        |d   }"|d"   rCtY               }#t_        |#      }$|!j]                  |$       |#}!ta        |!jT                        dz
  |"z
  }"|!jT                  d d }%|!jT                  d#d  }&|!jT                  dd# }'|'|"d  |'d |" z   }'|%|'z   |&z   |!_*        tO               }(tc        |(d      } |j]                  |        tO               })tc        |)d      } |!j]                  |        |(jT                  |_*        |)jT                  |_*        ||jT                  |d    <   ||jT                  |d    <    |D ]  }|d   t        jD                  k(  s|jT                  |d       }|jT                  |d       }tY               }t[        |d!      } |j]                  |        tY               }!t[        |!d!      } |j]                  |        |d$   }|dz   }*|jT                  |*   d   d   }+|!jT                  |*   d   d   },|dz
  ta        |jT                        dz
  z  dz   }-|jT                  |-   d   d   }.|!jT                  |-   d   d   }/|dz   ta        |jT                        dz
  z  dz   }0|jT                  |0   d   d   }1|!jT                  |0   d   d   }2te        |+ }+te        |, },te        |. }.te        |/ }/te        |1 }1te        |2 }2tg        |+|.z
        tg        |1|.z
        z  }3tg        |,|/z
        tg        |2|/z
        z  }4|3|4z   dz  }5|.|5|1|.z
  z  z   }+|/|5|2|/z
  z  z   },|jT                  |*   d   |+jh                  |+jj                  ff|jT                  |*   d   dd  z   |jT                  |*   d   f|jT                  |*<   |!jT                  |*   d   |,jh                  |,jj                  ff|!jT                  |*   d   dd  z   |!jT                  |*   d   f|!jT                  |*<   tO               }(tc        |(d      } |j]                  |        tO               })tc        |)d      } |!j]                  |        |(jT                  |_*        |)jT                  |_*         tO               }6tO               }7|jT                  D ]'  }8|6jT                  jm                  |8jT                         ) |jT                  D ]'  }8|7jT                  jm                  |8jT                         ) |6j\                  |6_(        |7j\                  |7_(        |6|<   |7|<   	 tC        ||      }| j9                  |dd%id ||t+        |             || j>                  | j"                  z   z  }n|| j<                  }9t        jF                  |v r| jp                  }9n=t        jH                  |v r| jr                  }9nt        jt                  |v r| jv                  }9| j;                  |9||       |rc| j%                  ty        | j                        d| jz                  | j.                  z
  | j"                  z
  | j,                  | j&                  d&       y y c c}w c c}w c c}w c c}w # tn        $ r" | j;                  | j<                  ||       Y =w xY w)'Nr   rR   c              3   &   K   | ]	  }|d      ywrR   Nr$   .0r   s     r   	<genexpr>z1InterpolatablePlot.add_problem.<locals>.<genexpr>       DGFOD   c              3   (   K   | ]	  }|k(    y wr   r$   r   ptr   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>       >"2%>   z, zDrawing %s: %sr   )r   )r   r   c              3   4   K   | ]  \  }}|   |  y wr   r$   )r   imr   s      r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  s#       a1Y<;S s   zGlyph name: T)r_   r`   r   r   ra   rF   c              3   @   K   | ]  }|j                  d d        yw)r[   r   N)get)r   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  s     @!k1-@s   r   ztolerance: %.2fr7   )r_   r`   rB   r   ra   z
Problems: )r_   r`   rB   r   ra   r,   )r_   r`   r   rB   r   )r_   r`   c              3      K   | ]b  }|t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  fv  d y wr   )r   NOTHINGWRONG_START_POINTCONTOUR_ORDERKINKUNDERWEIGHT
OVERWEIGHTr   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  sZ      
  %--%77%33%**%11%00
s   A(A*zmidway interpolationmidwayr_   r`   scalec              3   ~   K   | ]5  }|t         j                  t         j                  t         j                  fv  7 y wr   )r   r   r   r   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>S  s?      
  %77%33%**
s   ;=zproposed fixglyphsetvalue_2contourFreversedrS   fixed)r_   r`   rB   r   r   )>rR   listtupler=   rW   r   alljoinr   loginfor   MISSINGnext	enumerater:   insertrC   ro   
head_colorrG   minrB   rF   r<   label_colorrD   r   
draw_glyphdraw_emoticonshrugrH   anyr   r   r   r   r   r   r   drawr   rS   r   r	   r   replayr   r   r   complexabsrealimagextend
ValueErrorunderweight
overweightr   yayr   rE   );r   r   r   rZ   r   problem_typesr   master_keysrK   master_indicessample_glyphr_   r`   r[   scaleswhichr   r   rd   	glyphset1	glyphset2midway_glyphsetr   overriding1overriding2perContourPen1perContourPen2r   fixed_contourswrongContour1wrongContour2points1	converterpoints2proposed_startnew_points2reversedPen	beginPathendPathptssegment1segment2jpt0pt1j_prevpt0_prevpt1_prevj_nextpt0_nextpt1_nextr0r1r_midfixed1fixed2r   emoticonr   s;    `                                                        @r   r   zInterpolatablePlot.add_problem  s    >$. zH&/%:!!"{6*D8DD>>>99VH,UWV_,U%VWL!9l; x{* 1 	
 3>>Q(1+a.>>0888  '7  L !!!\2HHHHY&//** 	 	
 @x@@	q=^OO!I-jj1txx</   	
T!!DHH,,<'**q488|+// 	 	
 	
T^^dhhl**!*>!: 	?E:~~j1H::j)DOO&&&&   $((**A	".OOHi5AQROS ""4::a"8""T^^3dhh>>A)	?,  
 $
 
 4+++dhh6AA%%144A$((**A~a'89I~a'89I OO&oo&&   $((**A*9i@OOO(#$ &	y-22-99-88 	
 &k#  ( ""T^^3dhh>>A 
 $
 
 OOoo&&   $((**A(3K(3K5{N 6{N i %%n5i %%n5# :6?&;&I&II9A!Y9O&45,,Q/&N & ,:N(: $ +M6?&;&M&MM$2$8$89K$LM$2$8$89K$LM 01G 1'5 AI!((3/1G 1'5 AI!((3%,Y%7N z*&7&9&<[&I{3"-),W]]);a)?.)P !(bq 1I%mmBC0G!--"-Cno._n1EEC$-Og$=GM  ,~H 1(D AINN9-+~H 1(D AINN9- +3..M'*2..M'?LN(();<?LN(();<W+MZ $ A96?&;&@&@@$2$8$89K$LM$2$8$89K$LM 01G 1'5 AI!((3/1G 1'5 AI!((3(A AA!--*1-a0C!--*1-a0C!eGMM(:Q(>?!CF&}}V4Q7:H&}}V4Q7:H!eGMM(:Q(>?!CF&}}V4Q7:H&}}V4Q7:H!3-C!3-C&1H&1H&1H&1H S8^,s8h3F/GGBS8^,s8h3F/GGB"WME"Uh.A%BBC"Uh.A%BBC  a(+88SXX.07==3CA3Fqr3JJa(+(GMM!$  a(+88SXX.07==3CA3Fqr3JJa(+(GMM!$  ,~H 1(D AINN9-+~H 1(D AINN9- +3..M'*2..M'CA9H "^F!^F)// 3##GMM23)// 3##GMM23 --FK --FK%+K	"%+K	"9".{K"H#W%f+    ""TXX--A zzH$00MA++&11]B??&..-?88x12OOD$$%++.9jjoo   {	 -V ?J	h&Z  9""4::a"89s*   :p=7q=q7q/q 'q<;q<r   )r   r   r   F)r_   r`   r   r   ra   rB   rE   rF   c                   || j                   }|| j                  }|	| j                  }	t        j                  | j
                        }
|
j                  dt        j                  |rt        j                  nt        j                         |
j                  |	       |
j                         }|	|	z  |d   z  }	|
j                  |	       |
j                         } |
j                  |  |
j                  |      }|j                   |kD  rD|	||j                   z  z  }	|
j                  |	       |
j                         }|
j                  |      }|||j                   z
  |z  z   }||d   z   }|
j                  ||       |
j                  |       y )Nz@cairo:r7   r   )rB   rE   rF   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   labelr_   r`   r   r   ra   rB   rE   rF   r   rO  extentslabel_xlabel_ys                  r   ro   zInterpolatablePlot.draw_label  s^    =JJE>[[FI]]4<<(
##&*E""0H0H	

 	#(	)LO;	
#(5!//%(==5 ..IY'??,Looe,G uw}},55l1o%


7G$
Ur   r   c          	        "# t        |      t        t        fvr|g}t        d |D              }|d   d   "t	        d |D              #t        "fd#D              sd"||   }	t               }
|	j                  |
       t        |      }|	j                  |       t        |      }|j                  |       |j                  }|d}|d   |d   z
  }|d	   |d
   z
  }|r+|| j                  |z  }nt        || j                  |z        }|r+|| j                  |z  }nt        || j                  |z        }|d
}t        j                   | j"                        }|j%                  ||       |j%                  | j                  ||z  z
  dz  | j                  ||z  z
  dz         |j'                  ||        |j%                  |d    |d	           | j(                  ra |j*                  | j(                    |j-                  |d   |d
   ||       |j/                  | j0                  |z         |j3                          | j4                  s| j6                  rt9        ||      }|j                  |       | j4                  r<"t:        j<                  k7  r) |j*                  | j4                    |j?                          | j6                  rG |j*                  | j6                    |j/                  | j@                  |z         |jC                          |jE                          t:        jF                  #v st:        jH                  #v rtK        t        |      }|
j                  |       |D ]~  }|d   t:        jF                  t:        jH                  fv s)|jL                  |d      }|j                  t9        ||              |jN                  | jP                    |jS                           t        #fdt:        jT                  t:        jV                  t:        jX                  hD              r_|j[                  t        j\                         |jL                  D ]4  \  }}|s	|d   \  }}|j_                  ||       |ja                  ||       6  |jN                  | jb                    |j/                  | jd                  |z         |j3                          |jL                  D ]9  \  }}|s	|d d D ])  \  }}|j_                  ||       |ja                  ||       + ;  |jN                  | jf                    |j/                  | jh                  |z         |j3                          |jL                  D ]  \  }}|s	|dv r |j^                  |d      |dk(  r?|D ]  \  }}|ja                  ||        |jk                           |j^                  |d     d|dk(  ri |j`                  |d     |jk                           |j^                  |d
      |j`                  |d     |jk                           |j^                  |d     Ҍ  |jN                  | jl                    |j/                  | jn                  |z         |j3                          d }|D ]  }|d   t:        jp                  k(  s|d   }ts        | jt                        }tK        t        |      }|
j                  |       tw        |jL                        D ]b  \  }}||   |k(  rty        |      }|j                  t9        ||              |jN                  g || jz                    |jS                          d  |D ]  }|d   t:        jT                  t:        j|                  fv r|j                  d      }||d
k(  rd|v rtK        t        |      }|j                  |       t               }t        |d      }|jL                  ||n||      j                  |       |jL                  |d      d   }|j                           |j$                  |  |j'                  d
|z  d
|z         | j                  || j                  | j                         |j                          |dk(  s|j                  d      s| j                  }n| j                  }d }d}|j                          |jL                  D ]O  \  }}|dk(  r|d   }||dk(  r|} n|d   } |||k(  r|j                          t        | }t        |  } t        | |z
        }!|j%                  |j                  |j                         |!r|j                  t        j                  | j                  |j                  z
  | j                  |j                  z
               |j'                  d
|z  d
|z         | j                  ||       n6|j'                  d
|z  d
|z         | j                  || j                  |       |j                          | n
d }|d
z  }R |j                          |d   t:        j                  k(  s|j                  d      }tK        t        |      }|j                  |       t               }t        |d      }|jL                  ||n||      j                  |       |jL                  |d      d   }|j                           |j$                  |  |j'                  d
|z  d
|z         |r4| j                  || j                  | j                  | j                         n(| j                  || j                  | j                         |j                           |S )Nc              3   ,   K   | ]  }|d    dk(    yw)rR   r   Nr$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>M  s     IWWV_0Is   r   rR   c              3   &   K   | ]	  }|d      ywr   r$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>O  r   r   c              3   (   K   | ]	  }|k(    y wr   r$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>P  r   r   mixed)r   r   r   r   r7   r8   r   r   r   c              3   &   K   | ]  }|v  
 y wr   r$   )r   tr  s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>  s      
 
s   r  )moveTolineToqCurveTocurveTor   F)r   r   r   r^  	closePath)r   rS   )r   r   r   )XrR   r  r  r  r   r  r   r  r   r
   r  boundsrD   r  rH   r   r   r   	translater   border_colorr   r   r   border_widthstroker   r   r   r   	OPEN_PATHr   r   r   new_pathr   r   r   rS   r   r   r   r   
NODE_COUNTNODE_INCOMPATIBILITYset_line_capLINE_CAP_ROUNDrQ  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$  r_   r`   r   r   r   	recordingdecomposedRecording	boundsPenrc  glyph_widthglyph_heightr   penperContourPenr   r   segmentargsmatchingcolorsr   r   idxpointsr0  targetPointfirst_pt	second_ptlengthr   r  s$                                     @@r   r  zInterpolatablePlot.draw_glyphI  s
   >$. zHIII{6*D8DD>>>"L# N	

95h?

&'$X.	""9-!!>!FQi&)+ay6!9,}((;6E4#4#4|#CD}))L8E4#4#4|#CD=E]]4<<(
Q
e 33q8!55:	
 	
fQiZ&),Bt001LLF1I{LId//%78IIK??d//8R(C&&s+<3H3R3R#R!!!4??3  "  !!!4#4#45!!$"3"3e";<""$KKM "-->$//=@4\HUM]+# 6?)55)44'  ,11')2DEGNN8Hb#9:&B&&(G(GHGGI  
 &--%00%::
 
 OOE001 "5!:!: !Bx1

1a 

1a ! B 7 78d885@AIIK "5!:!: % "I %DAqJJq!$JJq!$%% B 8 89d99EABIIK "5!:!:  44BJJQ(
* $ )1

1a()OO%BJJR)	)BJJQ(OO%BJJQ(BJJQ(OO%BJJR)%( B 1 12d//%78IIK 	Gv"7"E"EE"9-t223 8 8!   /"+M,?,?"@ JAw{a'  LENN8Hb#9:&B&&BBt/A/ABGGI	    o	Gv%--%77#  kk), ?uzi76J$<$x%M (..}=46F 1&% @I!'''/Xc]fY'"(,,wy/A"B1"EKGGI BLL+.HHQYE	2MM!%!@!@">> " 
 JJL A:W[[%< 22E 88E	%8%>%> )MGT(*#'7 ' +-$,	$(G	{a3h	#*H#5$+Y$7	!$Y%9!:X]]HMMB!II $

$-NNX]]$B$-NNX]]$B!" HHQYE	: OOBeO< HHQYE	: MM ")-)H)H&+ * 
 

?!#HFAS)V 

v"7"<"<<kk), 8 8! $**=902-fe<	##8+;C#OVV %ll77+;<Q?	k*UAI.$$!%!6!6%)%B%B"44	 %  MM!%!5!5"33 " 
 

_o	b r   
   )r_   r`   r   r   c                P   |j                          |j                  |       |j                  t        j                         |j                  ||       |j                  ||       t        |      dk(  r|dz   } |j                  |  |j                          |j                          y )Nr8   r   )rv  r   rl  r   rm  rQ  rn  r   r   rg  rw  )r   r   r_   r`   r   r   s         r   r   zInterpolatablePlot.draw_dot[  s}    
	
(#
,,-


1a


1au:?DLEE"
		


r   )r_   r`   r   r   r   c                Z   |j                          |j                  |       |j                  t        j                         |j                  |||dz  ddt        j                  z         t        |      dk(  r|dz   } |j                  |  |j                          |j                          y )Nr7   r   r8   r  )rv  r   rl  r   LINE_CAP_SQUAREarcry  pir   r   rg  rw  )r   r   r_   r`   r   r   r   s          r   r   zInterpolatablePlot.draw_circleg  s     		
,'
--.
q!X\1a$''k2u:?DLEE"
		


r   r   c                   |j                          t        |      dk(  r|dz   } |j                  |  |j                  | j                  |z   |       |j                  dd       |j                  | j                   | j                   dz         |j                  | j                   | j                  dz         |j                          |j                          |j                          y )Nr8   r  r   r5   )
rv  r   r   rd  r   rQ  rn  
close_pathr   rw  )r   r   r_   r`   r   s        r   r   zInterpolatablePlot.draw_arrowt  s    
	u:?DLEE"
T,,q0!4


1a


$$$$$$s*	
 	

$$$##c)	
 	
	


r   r_   r`   r   rB   rE   c                D   || j                   }|| j                  }|j                         }t        j                  | j
                        } |j                  |  |j                  | j                         |j                  dt        j                  t        j                         d}d}	|j                         }
|
d   }|
d   }|D ].  }|j                  |      }t        ||j                        }|	|z  }	0 |sy |j!                  ||       t#        ||z  ||	z        }|j!                  |||z  z
  dz  ||	|z  z
  dz         |j%                  ||       |j!                  d|       |D ]7  }|j'                  dd       |j)                  |       |j!                  d|       9 y )Nz@cairo:monospacer   r7   )rB   rE   
splitlinesr   r   r   r   rN  rF   rJ  rK  rM  rO  rP  max	x_advancerd  r  r   rQ  rR  )r   textr_   r`   r   rB   rE   r   
text_widthtext_heightrO  font_font_sizefont_ascentlinerT  r   s                   r   	draw_textzInterpolatablePlot.draw_text  s   =JJE>[[F ]]4<<(5!
(
 7 79Q9Q	
 
(%a"1o 	*Dood+GZ):):;J>)K	* 
QEJ&(<=
Z%''1,ve8K/Kq.P	
 	
Q$ 	,DJJq!LLLLN+	,r   c           
         | j                  | j                  | j                  | j                  | j                  | j                  d| j                  z  z
  dd| j
                         | j                  | j                  | j                  | j                  | j                  z   | j                  d| j                  z  z
  | j                  d| j                  z  z
  | j                  z
  | j                         y )Nr7   r,   T)r_   r`   r   rB   r   ra   rF   )r_   r`   rB   rE   r   )ro   no_issues_labelrC   no_issues_label_colorrB   rG   r  cupcakerF   rE   cupcake_colorrN   s    r   draw_cupcakezInterpolatablePlot.draw_cupcake  s      hhhh,,**q488|+** 	 		
 	LLhhhh'**q488|+;;TXX->$$ 	 	
r   c                 n    | j                  |||| j                  | j                  | j                         y )Nr  )r  emoticon_colorrD   rH   )r   rH  r_   r`   s       r   r  z InterpolatablePlot.draw_emoticon  s7    %%""$$ 	 	
r   r   )r   r   )@r!   r"   r#   rB   rE   rC   rG   rF   rW   r  r  re  rf  r   r   r   ro  rp  rq  rr  rt  ru  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   rO   rU   rX   r   r}   r   r   r   r   r   r   ro   r  r   r   r   r  r  r  r$   r   r   r&   r&   '   s   EF
COIK J!K"LL J"LL)*#LL"2!",&O% &WNM!/;O'!MG2 #NEK
J
 C
  (,ttDL -1DD F'P,\2IT 8<d  !F 6:DPl
 
-^ EFRV Pd !"Qi" 
 AY! #$q	 & $%$t $,L
*
r   r&   c                   $     e Zd Zd Z fdZ xZS )InterpolatablePostscriptLikec                 8    | j                   j                          y r   )r   finishrQ   s       r   rU   z%InterpolatablePostscriptLike.__exit__  s    r   c                 V    t         |           | j                  j                          y r   )superrX   r   r   	__class__s    r   rX   z&InterpolatablePostscriptLike.show_page  s     r   )r!   r"   r#   rU   rX   __classcell__r  s   @r   r  r    s    ! !r   r  c                       e Zd Zd Zy)InterpolatablePSc                 z    t        j                  | j                  | j                  | j                        | _        | S r   )r   	PSSurfacer9   rB   rE   r   rN   s    r   rO   zInterpolatablePS.__enter__  s'    txxT[[Ir   Nr!   r"   r#   rO   r$   r   r   r  r    s    r   r  c                       e Zd Zd Zy)InterpolatablePDFc                 "   t        j                  | j                  | j                  | j                        | _        | j
                  j                  t         j                  d       | j
                  j                  t         j                  d       | S )Nzfonttools varLib.interpolatable )	r   
PDFSurfacer9   rB   rE   r   set_metadataPDF_METADATA_CREATORPDF_METADATA_CREATE_DATErN   s    r   rO   zInterpolatablePDF.__enter__  sc    ''$**dkkJ!!&&(I	
 	!!%"@"@"Er   Nr  r$   r   r   r  r    s    r   r  c                   *     e Zd Zd Zd Z fdZ xZS )InterpolatableSVGc                     t               | _        t        j                  | j                  | j                  | j
                        | _        | S r   )r   sinkr   
SVGSurfacerB   rE   r   rN   s    r   rO   zInterpolatableSVG.__enter__  s2    I	''		4::t{{Kr   c                 >    | j                   | j                          y y r   )r   rX   rQ   s       r   rU   zInterpolatableSVG.__exit__  s    <<#NN $r   c                 N   t         |           | j                  j                          | j                  j                  | j                  j                                t               | _        t        j                  | j                  | j                  | j                        | _        y r   )r  rX   r   r  r9   r   r  getvaluer   r   r  rB   rE   r  s    r   rX   zInterpolatableSVG.show_page  sf    		**,-I	''		4::t{{Kr   )r!   r"   r#   rO   rU   rX   r  r  s   @r   r  r    s    
L Lr   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   ry  rq   logging	getLoggerr  dictr   r&   r  r  r  r  r$   r   r   <module>r     s    $ " 3 
 6 , 
      	 g9:%T %c
 c
L%!#5 !3 4 L* Lr   