§
    ¢”jÚj  ã                   ó  — d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlZd dlZd d	lmZ g d
¢Z ej        d¦  «        Zg d¢Zg d¢Z ed„  edd¦  «        D ¦   «         ¦  «        Zg d¢ZdZd„ Zd„ Zd„ Z d„ Z!d„ Z"d)d„Z#d)d„Z$d)d„Z%d„ Z&d„ Z'd„ Z(	 	 	 	 	 d*d„Z)	 	 	 	 	 	 d+d „Z*	 	 	 	 	 	 d+d!„Z+	 	 	 	 	 	 d+d"„Z,	 	 	 	 	 	 d+d#„Z-d$„ Z.d%„ Z/	 	 	 	 	 	 d,d&„Z0d)d'„Z1e2d(k    rd dl3Z3 e3j4         e1¦   «         ¦  «         dS dS )-é    )ÚnewTable)ÚAxis)ÚAreaPen)ÚNullPen)ÚStatisticsPen)ÚpiecewiseLinearMapÚnormalizeValue)ÚmakeOutputFileNameN)Úpformat)ÚplanWeightAxisÚplanWidthAxisÚplanSlantAxisÚplanOpticalSizeAxisÚplanAxisÚsanitizeWeightÚsanitizeWidthÚsanitizeSlantÚmeasureWeightÚmeasureWidthÚmeasureSlantÚnormalizeLinearÚnormalizeLogÚnormalizeDegreesÚinterpolateLinearÚinterpolateLogÚprocessAxisÚmakeDesignspaceSnippetÚaddEmptyAvarÚmainzfontTools.varLib.avar.plan)é2   éd   é–   éÈ   éú   i,  i^  i�  iÂ  iô  i&  iX  iŠ  i¼  iî  i   iR  i„  i¶  )g      9@g     ÀB@g      I@g     @O@g     ÀR@g     àU@g      Y@g      \@g     @_@g     0a@g     Àb@g     Pd@g     àe@g     pg@g      i@c              #   óh   K  — | ]-}t          j        t          j        |d z  ¦  «        ¦  «        V — Œ.dS )g      4@N)ÚmathÚdegreesÚatan©Ú.0Úds     úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/varLib/avar/plan.pyú	<genexpr>r-   M   s:   è è € ÐHÐH°A�dŒl�4œ9 Q¨¡XÑ.Ô.Ñ/Ô/ÐHÐHÐHÐHÐHÐHó    iìÿÿÿé   )é   é   é   é   é	   é
   é   é   é   é   é   é   é$   é0   é<   éH   é`   éx   é�   éÀ   éð   i   r3   c                 ó   — | |z
  ||z
  z  S )zOLinearly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.© )ÚvalueÚrangeMinÚrangeMaxs      r,   r   r   l   s   € à�HÑ ¨HÑ!4Ñ5Ð5r.   c                 ó   — || ||z
  z  z   S )zALinear interpolation between a and b, with t typically in [0, 1].rF   )ÚtÚaÚbs      r,   r   r   q   s   € àˆq�A˜‘E‰{‰?Ðr.   c                 óŒ   — t          j        |¦  «        }t          j        |¦  «        }t          j        | ¦  «        |z
  ||z
  z  S )zVLogarithmically normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r&   Úlog)rG   rH   rI   ÚlogMinÚlogMaxs        r,   r   r   v   s<   € åŒX�hÑÔ€FÝŒX�hÑÔ€FÝŒH�U‰OŒO˜fÑ$¨°&©Ñ9Ð9r.   c                 óŒ   — t          j        |¦  «        }t          j        |¦  «        }t          j        || ||z
  z  z   ¦  «        S )zFLogarithmic interpolation between a and b, with t typically in [0, 1].)r&   rO   Úexp)rK   rL   rM   ÚlogAÚlogBs        r,   r   r   }   s:   € åŒ8�A‰;Œ;€DÝŒ8�A‰;Œ;€DÝŒ8�D˜1  t¡Ñ,Ñ,Ñ-Ô-Ð-r.   c                 óø   — t          j        t          j        |¦  «        ¦  «        }t          j        t          j        |¦  «        ¦  «        }t          j        t          j        | ¦  «        ¦  «        |z
  ||z
  z  S )zPAngularly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r&   ÚtanÚradians)rG   rH   rI   ÚtanMinÚtanMaxs        r,   r   r   „   s\   € åŒX•d”l 8Ñ,Ô,Ñ-Ô-€FÝŒX•d”l 8Ñ,Ô,Ñ-Ô-€FÝŒH•T”\ %Ñ(Ô(Ñ)Ô)¨FÑ2°vÀ±ÑGÐGr.   c                 óV  — t          |t          ¦  «        r|}nd„ |D ¦   «         }dx}}|D ]z}|�|                     |d¦  «        }|dk    rŒ!nd}| |         }t          | ¬¦  «        }|                     |¦  «         |j        |z  }	||	t          |j        ¦  «        z  z  }||	z  }Œ{||z  S )z:Measure the perceptual average weight of the given glyphs.c                 ó   — i | ]}|d “ŒS ©é   rF   ©r*   Úgs     r,   ú
<dictcomp>z!measureWeight.<locals>.<dictcomp>�   ó   € Ð,Ð,Ð, �q˜!Ð,Ð,Ð,r.   r   Nr^   ©Úglyphset)Ú
isinstanceÚdictÚgetr   ÚdrawÚwidthÚabsrG   )
rd   ÚglyphsÚfrequenciesÚwght_sumÚwdth_sumÚ
glyph_nameÚ	frequencyÚglyphÚpenÚmults
             r,   r   r   ‹   sÛ   € å�&�$ÑÔð -Øˆˆà,Ð, VÐ,Ñ,Ô,ˆàÐ€HˆxØð ð ˆ
ØÐ"Ø#Ÿš¨
°AÑ6Ô6ˆIØ˜AŠ~ˆ~Øð ð ˆIà˜Ô$ˆå˜xÐ(Ñ(Ô(ˆØ�
Š
�3‰ŒˆàŒ{˜YÑ&ˆØ�D�3˜sœy™>œ>Ñ)Ñ)ˆØ�DÑˆˆà�hÑÐr.   c                 ó$  — t          |t          ¦  «        r|}nd„ |D ¦   «         }d}d}|D ]a}|�|                     |d¦  «        }|dk    rŒ!nd}| |         }t          ¦   «         }|                     |¦  «         ||j        |z  z  }||z  }Œb||z  S )z.Measure the average width of the given glyphs.c                 ó   — i | ]}|d “ŒS r]   rF   r_   s     r,   ra   z measureWidth.<locals>.<dictcomp>¬   rb   r.   r   Nr^   )re   rf   rg   r   rh   ri   )	rd   rk   rl   rn   Úfreq_sumro   rp   rq   rr   s	            r,   r   r   §   sÂ   € å�&�$ÑÔð -Øˆˆà,Ð, VÐ,Ñ,Ô,ˆà€HØ€HØð ð ˆ
ØÐ"Ø#Ÿš¨
°AÑ6Ô6ˆIØ˜AŠ~ˆ~Øð ð ˆIà˜Ô$ˆå‰iŒiˆØ�
Š
�3‰Œˆà�E”K )Ñ+Ñ+ˆØ�IÑˆˆà�hÑÐr.   c                 ó†  — t          |t          ¦  «        r|}nd„ |D ¦   «         }d}d}|D ]m}|�|                     |d¦  «        }|dk    rŒ!nd}| |         }t          | ¬¦  «        }|                     |¦  «         |j        |z  }	||	|j        z  z  }||	z  }Œnt          j        t          j	        ||z  ¦  «        ¦  «         S )z?Measure the perceptual average slant angle of the given glyphs.c                 ó   — i | ]}|d “ŒS r]   rF   r_   s     r,   ra   z measureSlant.<locals>.<dictcomp>È   rb   r.   r   Nr^   rc   )
re   rf   rg   r   rh   ri   Úslantr&   r'   r(   )
rd   rk   rl   Úslnt_sumrv   ro   rp   rq   rr   rs   s
             r,   r   r   Ã   sì   € å�&�$ÑÔð -Øˆˆà,Ð, VÐ,Ñ,Ô,ˆà€HØ€HØð ð ˆ
ØÐ"Ø#Ÿš¨
°AÑ6Ô6ˆIØ˜AŠ~ˆ~Øð ð ˆIà˜Ô$ˆå XÐ.Ñ.Ô.ˆØ�
Š
�3‰ŒˆàŒ{˜YÑ&ˆØ�D˜3œ9Ñ$Ñ$ˆØ�DÑˆˆåŒL�œ 8¨hÑ#6Ñ7Ô7Ñ8Ô8Ð8Ð8r.   c                 ó2  — ||d                  ||d                  ||d                  }}}| d         ||z  z  }| d         ||z  z  }t          j        dg| ¢R Ž  t                                d|| d         |¦  «         t          || d         z
  ¦  «        | d         z  dk    s%t          || d         z
  ¦  «        | d         z  dk    rQt                                d¦  «         t          j        dg| ¢R Ž  t                                d	|| d         |¦  «         d
S dS )zSanitize the width axis limits.r   r^   é   z$Original width axis limits: %g:%g:%gz&Calculated width axis limits: %g:%g:%gçš™™™™™©?z6Calculated width axis min/max do not match user input.z%  Current width axis limits: %g:%g:%gz'  Suggested width axis limits: %g:%g:%gFT©rO   Úinforj   Úwarning)	Ú
userTripleÚdesignTripleÚpinsÚmeasurementsÚminValÚ
defaultValÚmaxValÚcalculatedMinValÚcalculatedMaxVals	            r,   r   r   à   sS  € ð 	�\ !”_Ô%Ø�\ !”_Ô%Ø�\ !”_Ô%ð ˆJ€Fð " !”}¨°Ñ(;Ñ<ÐØ! !”}¨°Ñ(;Ñ<Ðå„HÐ3ÐA°jÐAÐAÐAÐAÝ‡H‚HØ0ØØ�1ŒØñ	ô ð õ 	Ð˜z¨!œ}Ñ,Ñ-Ô-°
¸1´Ñ=ÀÒDÐDÝÐ *¨Q¤-Ñ/Ñ0Ô0°:¸a´=Ñ@À4ÒGÐGå�ŠÐLÑMÔMÐMÝŒØ3ð	
àð	
ð 	
ð 	
ð 	
õ 	�ŠØ5ØØ�qŒMØñ		
ô 	
ð 	
ð ˆuàˆ4r.   c                 óš  — t          t          | ¦  «        ¦  «        dk     rdS ||d                  ||d                  ||d                  }}}t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }	| d         | d         z
  | d         | d         z
  z  }
t          j        ||
|	|z
  z  z   ¦  «        }||z
  ||z
  z  }
| d         |
| d         | d         z
  z  z   }t          j        dg| ¢R Ž  t                               d| d         || d         ¦  «         t          || d         z
  ¦  «        | d         z  dk    �ryt                               d	¦  «         t          j        d
g| ¢R Ž  t                               d| d         || d         ¦  «         | d         | d         z
  | d         | d         z
  z  }
t          j        ||
||z
  z  z   ¦  «        }||z
  ||z
  z  }
| d         |
| d         | d         z
  z  z   }t                               d| d         | d         |¦  «         | d         | d         z
  | d         | d         z
  z  }
t          j        |	|
||	z
  z  z   ¦  «        }||z
  ||z
  z  }
| d         |
| d         | d         z
  z  z   }t                               d|| d         | d         ¦  «         dS dS )z Sanitize the weight axis limits.é   Tr   r^   r|   z%Original weight axis limits: %g:%g:%gz'Calculated weight axis limits: %g:%g:%gr}   z9Calculated weight axis default does not match user input.z&  Current weight axis limits: %g:%g:%gz:  Suggested weight axis limits, changing default: %g:%g:%gz:  Suggested weight axis limits, changing maximum: %g:%g:%gz:  Suggested weight axis limits, changing minimum: %g:%g:%gF)ÚlenÚsetr&   rO   rS   r   rj   r€   )r�   r‚   rƒ   r„   r…   r†   r‡   rP   Ú
logDefaultrQ   rK   ÚyÚcalculatedDefaultValr‰   rˆ   s                  r,   r   r   	  s  € õ �3ˆz‰?Œ?ÑÔ˜aÒÐØˆtð 	�\ !”_Ô%Ø�\ !”_Ô%Ø�\ !”_Ô%ð ˆJ€Fõ ŒX�fÑÔ€FÝ”˜*Ñ%Ô%€JÝŒX�fÑÔ€Fà	�AŒ˜ AœÑ	&¨:°a¬=¸:Àa¼=Ñ+HÑI€AÝŒ�˜!˜v¨™Ñ/Ñ/Ñ0Ô0€AØ	
ˆV‰˜ ™Ñ(€AØ% aœ=¨1°
¸1´À
È1ÄÑ0MÑ+NÑNÐå„HÐ4ÐB°zÐBÐBÐBÐBÝ‡H‚HØ1Ø�1ŒØØ�1Œñ	ô ð õ Ð *¨Q¤-Ñ/Ñ0Ô0°:¸a´=Ñ@À4ÒGÑGÝ�ŠÐOÑPÔPÐPåŒØ4ð	
àð	
ð 	
ð 	
ð 	
õ
 	�ŠØHØ�qŒMØ Ø�qŒMñ		
ô 	
ð 	
ð ˜Œ]˜Z¨œ]Ñ*¨z¸!¬}¸zÈ!¼}Ñ/LÑMˆÝŒH�V˜a :°Ñ#6Ñ7Ñ7Ñ8Ô8ˆØ�‰Z˜J¨Ñ/Ñ0ˆØ% aœ=¨1°
¸1´À
È1ÄÑ0MÑ+NÑNÐÝ�ŠØHØ�qŒMØ�qŒMØñ		
ô 	
ð 	
ð ˜Œ]˜Z¨œ]Ñ*¨z¸!¬}¸zÈ!¼}Ñ/LÑMˆÝŒH�V˜a :°Ñ#6Ñ7Ñ7Ñ8Ô8ˆØ�‰Z˜J¨Ñ/Ñ0ˆØ% aœ=¨1°
¸1´À
È1ÄÑ0MÑ+NÑNÐÝ�ŠØHØØ�qŒMØ�qŒMñ		
ô 	
ð 	
ð ˆuàˆ4r.   c                 óz  — t          j        dg| ¢R Ž  t                                d||d                  ||d                  ||d                  ¦  «         t          ||d                  | d         z
  ¦  «        dk    sPt          ||d                  | d         z
  ¦  «        dk    s(t          ||d                  | d         z
  ¦  «        dk    rot                                d¦  «         t          j        dg| ¢R Ž  t                                d||d                  ||d                  ||d                  ¦  «         d	S d
S )zSanitize the slant axis limits.z$Original slant axis limits: %g:%g:%gz&Calculated slant axis limits: %g:%g:%gr   r^   r|   z>Calculated slant axis min/default/max do not match user input.z%  Current slant axis limits: %g:%g:%gz'  Suggested slant axis limits: %g:%g:%gFTr~   )r�   r‚   rƒ   r„   s       r,   r   r   P  sM  € õ „HÐ3ÐA°jÐAÐAÐAÐAÝ‡H‚HØ0Ø�\ !”_Ô%Ø�\ !”_Ô%Ø�\ !”_Ô%ñ	ô ð õ 	ˆL˜ aœÔ)¨J°q¬MÑ9Ñ:Ô:¸QÒ>Ð>Ýˆ|˜L¨œOÔ,¨z¸!¬}Ñ<Ñ=Ô=ÀÒAÐAÝˆ|˜L¨œOÔ,¨z¸!¬}Ñ<Ñ=Ô=ÀÒAÐAå�ŠÐTÑUÔUÐUÝŒØ3ð	
àð	
ð 	
ð 	
ð 	
õ 	�ŠØ5Ø˜ aœÔ)Ø˜ aœÔ)Ø˜ aœÔ)ñ		
ô 	
ð 	
ð ˆuàˆ4r.   c           	      óø	  ‡$‡%— t          |t          ¦  «        r|j        |j        |j        f}|\  }}}|€t
          }|€ |i ¦  «                             ¦   «         }|
€i }
n|
                     ¦   «         }
t           	                    d|||¦  «         |||f}|	�t          j	        dg|	¢R Ž  n|}	|
r:t           	                    dt          |
                     ¦   «         ¦  «        ¦  «         |
                     ||	d         ||	d         ||	d         i¦  «         i }i }i }t          |||ht          |
                     ¦   «         ¦  «        z  ¦  «        D ]'} |||i¬¦  «        }|
|         } | ||¦  «        ||<   Œ(|�)t           	                    d	|¦  «          |||	|
|¦  «         t                               d
t          |¦  «        ¦  «         t!          t#          t          |
                     ¦   «         ¦  «        ¦  «        dd…         t#          t          |
                     ¦   «         ¦  «        ¦  «        dd…         ¦  «        D �]\  \  Š%}\  Š$}ˆ$ˆ%fd„|D ¦   «         }|sŒt%          ‰%|¦  «        }t%          ‰$|¦  «        }t%          ||	¦  «        }t%          ||	¦  «        }t           	                    dt          |¦  «        ¦  «         t           	                    d|‰%‰$¦  «         |                     ¦   «         }t'          d|dz   ¦  «        D ][}‰%‰$‰%z
  |z  |dz   z  z   }t                               d|¦  «          |||i¬¦  «        }t)          ||
¦  «        } | ||¦  «        ||<   Œ\t                               dt          |¦  «        ¦  «         i }t          |¦  «        D ]}||||         <   Œ||‰%<   |||<   t          |¦  «        D ]‡} ||‰%‰$¦  «        }  || ||         ||         ¦  «        }!t)          |!|¦  «        }"t                               d||"fz  ¦  «         |"||<   ||‰%z
  ‰$‰%z
  z  ||z
  z  z   }#||"|z
  ||z
  z  ||z
  z  z   ||#<   Œˆ||‰$<   |||<   �Œt           	                    d|t          |¦  «        ¦  «         t           	                    d|t          |¦  «        ¦  «         t+          d„ |                     ¦   «         D ¦   «         ¦  «        rt           	                    d|¦  «         i }i }||fS )a@  Plan an axis.

    measureFunc: callable that takes a glyphset and an optional
    list of glyphnames, and returns the glyphset-wide measurement
    to be used for the axis.

    normalizeFunc: callable that takes a measurement and a minimum
    and maximum, and normalizes the measurement into the range 0..1,
    possibly extrapolating too.

    interpolateFunc: callable that takes a normalized t value, and a
    minimum and maximum, and returns the interpolated value,
    possibly extrapolating too.

    glyphSetFunc: callable that takes a variations "location" dictionary,
    and returns a glyphset.

    axisTag: the axis tag string.

    axisLimits: a triple of minimum, default, and maximum values for
    the axis. Or an `fvar` Axis object.

    values: a list of output values to map for this axis.

    samples: the number of samples to use when sampling. Default 8.

    glyphs: a list of glyph names to use when sampling. Defaults to None,
    which will process all glyphs.

    designLimits: an optional triple of minimum, default, and maximum values
    represenging the "design" limits for the axis. If not provided, the
    axisLimits will be used.

    pins: an optional dictionary of before/after mapping entries to pin in
    the output.

    sanitizeFunc: an optional callable to call to sanitize the axis limits.
    Nz(Axis limits min %g / default %g / max %gz/Axis design-limits min %g / default %g / max %gzPins %sr   r^   r|   )Úlocationz/Sanitizing axis limit values for the `%s` axis.zCalculated average value:
%séÿÿÿÿc                 ó4   •— h | ]}‰|cxk     r‰k     ¯n n|’ŒS rF   rF   )r*   ÚwrI   rH   s     €€r,   ú	<setcomp>zplanAxis.<locals>.<setcomp>Ú  s:   ø€ ÐEÐEÐE˜a¨X¸Ð-DÐ-DÒ-DÐ-D¸HÒ-DÐ-DÐ-DÐ-DÐ-D˜Ð-DÐ-DÐ-Dr.   zPlanning target values %s.z"Sampling %u points in range %g,%g.zSampling value %g.zSampled average value:
%szPlanned mapping value %g to %g.z%Planned mapping for the `%s` axis:
%sz0Planned normalized mapping for the `%s` axis:
%sc              3   óH   K  — | ]\  }}t          ||z
  ¦  «        d k     V — ŒdS )g{®Gáz„?N)rj   )r*   ÚkÚvs      r,   r-   zplanAxis.<locals>.<genexpr>  s5   è è € Ð
?Ð
?¡  A�3ˆq�1‰u‰:Œ:˜ÒÐ
?Ð
?Ð
?Ð
?Ð
?Ð
?r.   z6Detected identity mapping for the `%s` axis. Dropping.)re   ÚfvarAxisÚminValueÚdefaultValueÚmaxValueÚSAMPLESÚkeysÚcopyrO   r   ÚsortedÚitemsÚupdater�   Údebugr   ÚzipÚlistr	   Úranger   Úall)&ÚmeasureFuncÚnormalizeFuncÚinterpolateFuncÚglyphSetFuncÚaxisTagÚ
axisLimitsÚvaluesÚsamplesrk   ÚdesignLimitsrƒ   ÚsanitizeFuncrœ   r�   rž   ÚtripleÚoutÚoutNormalizedÚaxisMeasurementsrG   rd   ÚdesignValueÚ	targetMinÚ	targetMaxÚtargetValuesÚnormalizedMinÚnormalizedMaxÚnormalizedTargetMinÚnormalizedTargetMaxÚvalueMeasurementsÚsampleÚmeasurementValuerK   ÚtargetMeasurementÚtargetValueÚvalueNormalizedrI   rH   s&                                       @@r,   r   r   q  s½  øø€ õj �*�hÑ'Ô'ð YØ Ô)¨:Ô+BÀJÔDWÐXˆ
Ø'1Ñ$€Hˆl˜Hà€ÝˆØ€~Ø�˜bÑ!Ô!×&Ò&Ñ(Ô(ˆØ€|Øˆˆà�yŠy‰{Œ{ˆå‡H‚HØ2°H¸lÈHñô ð ð ˜ hÐ/€FàÐÝŒÐBÐRÀ\ÐRÐRÐRÐRÐRàˆàð 2Ý�Š��F 4§:¢:¡<¤<Ñ0Ô0Ñ1Ô1Ð1Ø‡K‚Kà�l 1”oØ˜, qœ/Ø�l 1”oð	
ñô ð ð €CØ€MàÐÝ˜ <°Ð:½SÀÇÂÁÄÑ=MÔ=MÑMÑNÔNð Fð FˆØ�<¨'°5Ð)9Ð:Ñ:Ô:ˆØ˜5”kˆØ(3¨°H¸fÑ(EÔ(EÐ˜Ñ%Ð%àÐÝ�ŠÐBÀGÑLÔLÐLØˆ�V˜\¨4Ð1AÑBÔBÐBå‡I‚IÐ-­wÐ7GÑ/HÔ/HÑIÔIÐIå8;Ý�V�D—J’J‘L”LÑ!Ô!Ñ"Ô" 3 B 3Ô'Ý�V�D—J’J‘L”LÑ!Ô!Ñ"Ô" 1 2 2Ô&ñ9ô 9ð -;ñ -;Ñ4Ñˆ�9Ñ4 ¨)ð FÐEÐEÐEÐE 6ÐEÑEÔEˆØð 	Øå& x°Ñ8Ô8ˆÝ& x°Ñ8Ô8ˆÝ,¨Y¸ÑEÔEÐÝ,¨Y¸ÑEÔEÐå�ŠÐ-­v°lÑ/CÔ/CÑDÔDÐDÝ�ŠÐ5°wÀÈ(ÑSÔSÐSØ,×1Ò1Ñ3Ô3ÐÝ˜A˜w¨™{Ñ+Ô+ð 	Kð 	KˆFØ ¨8Ñ 3°vÑ=ÀÈ1ÁÑMÑMˆEÝ�IŠIÐ*¨EÑ2Ô2Ð2Ø#�|¨g°uÐ-=Ð>Ñ>Ô>ˆHÝ,¨U°DÑ9Ô9ˆKØ-8¨[¸À6Ñ-JÔ-JÐ˜kÑ*Ð*Ý�	Š	Ð.µÐ8IÑ0JÔ0JÑKÔKÐKàÐÝÐ-Ñ.Ô.ð 	?ð 	?ˆEØ9>ÐÐ.¨uÔ5Ñ6Ð6à!ˆˆH‰Ø':ˆ�mÑ$Ý˜LÑ)Ô)ð 	Vð 	VˆEØ�˜e X¨xÑ8Ô8ˆAØ / ØÐ$ YÔ/Ð1BÀ9Ô1Mñ!ô !Ðõ -Ð->Ð@PÑQÔQˆKÝ�IŠIÐ7¸5À+Ð:NÑNÑOÔOÐOØ$ˆC�‰JØ+¨u°xÑ/?Ø˜8Ñ#ñ/à Ñ.ñ/0ñ 0ˆOð .AØ˜iÑ'Ø˜YÑ&ñD(à+>ÐATÑ+TñDVñ .VˆM˜/Ñ*Ð*ð "ˆˆH‰Ø':ˆ�mÑ$Ñ$å‡H‚HÐ5°wÅÈÁÄÑMÔMÐMÝ‡H‚HØ;ØÝ�ÑÔñô ð õ Ð
?Ð
?¨×)<Ò)<Ñ)>Ô)>Ð
?Ñ
?Ô
?Ñ?Ô?ð Ý�ŠÐIÈ7ÑSÔSÐSØˆØˆà�ÐÐr.   Fc                 óz   — |€t           }t          t          t          t          | d|||||||rt
          nd¬¦  «        S )a  Plan a weight (`wght`) axis.

    weights: A list of weight values to plan for. If None, the default
    values are used.

    This function simply calls planAxis with values=weights, and the appropriate
    arguments. See documenation for planAxis for more information.
    NÚwght©r°   r±   rk   r²   rƒ   r³   )ÚWEIGHTSr   r   r   r   r   )r­   r¯   Úweightsr±   rk   r²   rƒ   Úsanitizes           r,   r   r     sR   € ð& €ÝˆåÝÝÝØØØØØØØ!ØØ'/Ð9•^�^°Tðñ ô ð r.   c                 óz   — |€t           }t          t          t          t          | d|||||||rt
          nd¬¦  «        S )a  Plan a width (`wdth`) axis.

    widths: A list of width values (percentages) to plan for. If None, the default
    values are used.

    This function simply calls planAxis with values=widths, and the appropriate
    arguments. See documenation for planAxis for more information.
    NÚwdthrÈ   )ÚWIDTHSr   r   r   r   r   )r­   r¯   Úwidthsr±   rk   r²   rƒ   rË   s           r,   r   r   :  sR   € ð& €~ÝˆåÝÝÝØØØØØØØ!ØØ&.Ð8•]�]°Dðñ ô ð r.   c                 óz   — |€t           }t          t          t          t          | d|||||||rt
          nd¬¦  «        S )a  Plan a slant (`slnt`) axis.

    slants: A list slant angles to plan for. If None, the default
    values are used.

    This function simply calls planAxis with values=slants, and the appropriate
    arguments. See documenation for planAxis for more information.
    NÚslntrÈ   )ÚSLANTSr   r   r   r   r   )r­   r¯   Úslantsr±   rk   r²   rƒ   rË   s           r,   r   r   `  sR   € ð& €~ÝˆåÝÝÝØØØØØØØ!ØØ&.Ð8•]�]°Dðñ ô ð r.   c                 óf   — |€t           }t          t          t          t          | d||||||¬¦  «        S )a  Plan a optical-size (`opsz`) axis.

    sizes: A list of optical size values to plan for. If None, the default
    values are used.

    This function simply calls planAxis with values=sizes, and the appropriate
    arguments. See documenation for planAxis for more information.
    NÚopsz)r°   r±   rk   r²   rƒ   )ÚSIZESr   r   r   r   )r­   r¯   Úsizesr±   rk   r²   rƒ   rË   s           r,   r   r   †  sF   € ð& €}ÝˆåÝÝÝØØØØØØØ!Øðñ ô ð r.   c                 óŠ   — d| |f|z   z  }|r|dz  }n|dz  }|                      ¦   «         D ]\  }}|d||fz  z  }Œ|r|dz  }|S )z-Make a designspace snippet for a single axis.zC    <axis tag="%s" name="%s" minimum="%g" default="%g" maximum="%g"z>
z/>z$      <map input="%g" output="%g"/>
z    </axis>)r£   )r®   ÚaxisNameÚ	axisLimitÚmappingÚdesignspaceSnippetÚkeyrG   s          r,   r   r   «  s�   € ð 	NØ�XÐ Ñ*ñ	,ð ð ð #Ø˜eÑ#ÐÐà˜dÑ"Ðà—m’m‘o”oð Uð U‰
ˆˆUØÐEÈÈeÈÑTÑTÐÐàð ,Ø˜mÑ+ÐàÐr.   c                 ól   — t          d¦  «        x| d<   }| d         j        D ]}i |j        |j        <   ŒdS )z&Add an empty `avar` table to the font.ÚavarÚfvarN)r   ÚaxesÚsegmentsr®   )Úfontrß   Úaxiss      r,   r   r   À  sI   € å" 6Ñ*Ô*Ð*€Dˆ�L�4Ø�V”Ô!ð )ð )ˆØ&(ˆŒ�d”lÑ#Ð#ð)ð )r.   c           
      óô  ‡— d}| d         j         D ]}|j        |k    r|} nŒ|€dS |j        |j        |j        f}t
                               d|¦  «         d| v r$| d         j        |         }i | d         j        |<   nd}|�3t          |t          ¦  «        rd„ | 
                    ¦   «         D ¦   «         }|�kt          |t          ¦  «        rVd„ | 
                    d¦  «        D ¦   «         }t          |¦  «        d	k    r!|d
         |d         cxk    r|d         k    sn J ‚nd}|�ht          |t          ¦  «        rSi }| 
                    ¦   «         D ]9}| 
                    d¦  «        \  }}t          |¦  «        |t          |¦  «        <   Œ:|}~ || j        |||||||	¬¦  «        \  }Š|
rVd
dlm} |                     t#          ‰¦  «        ˆfd„t#          ‰¦  «        D ¦   «         ¦  «         |                     ¦   «          |�)t
                               d|t'          |¦  «        ¦  «         |r$d| vrt)          | ¦  «         ‰| d         j        |<   nd| v ri | d         j        |<   t+          ||||¦  «        }|S )zProcess a single axis.Nrà   Ú zPlanning %s axis.rß   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rF   ©Úfloat)r*   r–   s     r,   ú
<listcomp>zprocessAxis.<locals>.<listcomp>è  s   € Ð3Ð3Ð3˜q•%˜‘(”(Ð3Ð3Ð3r.   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rF   rè   r)   s     r,   rê   zprocessAxis.<locals>.<listcomp>ë  s   € ÐBÐBÐB Q�˜a™œÐBÐBÐBr.   ú:r‹   r   r^   r|   )r±   rk   r²   rƒ   rË   )Úpyplotc                 ó    •— g | ]
}‰|         ‘ŒS rF   rF   )r*   r™   ÚmappingNormalizeds     €r,   rê   zprocessAxis.<locals>.<listcomp>  s   ø€ ÐEÐEÐE aÐ˜qÔ!ÐEÐEÐEr.   zExisting %s mapping:
%s)rá   r®   rœ   r�   rž   rO   r   râ   re   ÚstrÚsplitrŒ   ré   ÚgetGlyphSetÚ
matplotlibrí   Úplotr¢   Úshowr   r   r   )rã   ÚplanFuncr®   rÙ   r°   r±   rk   r²   rƒ   rË   rô   r¯   rä   ÚexistingMappingÚnewPinsÚpinÚbeforeÚafterrÛ   rí   rÜ   rï   s                        @r,   r   r   Ç  sû  ø€ ð €JØ�V”Ô!ð ð ˆØŒ<˜7Ò"Ð"ØˆJØˆEð #ð ÐØˆrØÔ% zÔ'>À
Ô@SÐT€Jå‡H‚HÐ  (Ñ+Ô+Ð+à�€~€~Ø˜vœ,Ô/°Ô8ˆØ)+ˆˆVŒÔ˜gÑ&Ð&àˆàÐ�j¨µÑ5Ô5ÐØ3Ð3 F§L¢L¡N¤NÐ3Ñ3Ô3ˆàÐ¥J¨|½SÑ$AÔ$AÐØBÐB¨,×*<Ò*<¸SÑ*AÔ*AÐBÑBÔBˆå�ÑÔ Ò"Ð"Ø˜Q” <°¤?ÐEÐEÒEÐE°lÀ1´oÒEÐEÐEÐEÐEÐEÐEð ˆàÐ�J t­SÑ1Ô1ÐØˆØ—:’:‘<”<ð 	2ð 	2ˆCØŸIšI c™NœN‰MˆF�EÝ%*¨5¡\¤\ˆG•E˜&‘M”MÑ"Ð"ØˆØà!) ØÔØØØØØ!ØØð	"ñ 	"ô 	"Ñ€GÐð ð Ø%Ð%Ð%Ð%Ð%Ð%à�ŠÝÐ$Ñ%Ô%ØEÐEÐEÐE­6Ð2CÑ+DÔ+DÐEÑEÔEñ	
ô 	
ð 	
ð 	�Š‰ŒˆàÐ"Ý�ŠÐ+¨Xµw¸Ñ7OÔ7OÑPÔPÐPàð 0Ø˜ÐÐÝ˜ÑÔÐØ):ˆˆVŒÔ˜gÑ&Ð&à�Tˆ>ˆ>Ø-/ˆD�ŒLÔ! 'Ñ*å/ØØØØñ	ô Ðð Ðr.   c                 óf
  — | €ddl }|j        dd…         } ddlm} ddlm} ddl}|                     dd¬¦  «        }|                     d	d
d¬¦  «         |                     ddt          d¬¦  «         |                     dt          d¬¦  «         |                     dt          d¬¦  «         |                     dt          d¬¦  «         |                     dt          d¬¦  «         |                     dt          d¬¦  «         |                     dddd¬¦  «         |                     d d!t          d"¬¦  «         |                     d#t          d$¬¦  «         |                     d%t          d&¬¦  «         |                     d't          d(¬¦  «         |                     d)t          d*¬¦  «         |                     d+t          d,¬¦  «         |                     d-t          d.¬¦  «         |                     d/t          d0¬¦  «         |                     d1t          d2¬¦  «         |                     d3d4dd5¬¦  «         |                     d6¬7¦  «        }|                     d8d9dd:¬¦  «         |                     d;d<dd=¬¦  «         |                     | ¦  «        } ||j        rd>n
|j        rd?nd@¬A¦  «          ||j        ¦  «        }dB|vrt                                dC¦  «         dS |j        �u|j                             ¦   «         }	dD|j        v rRi }	|j                             ¦   «         D ]6}
dD|
v r+|
                     dD¦  «        \  }}t)          |¦  «        |	|<   Œ1dE|	|
<   Œ7nd}	g }|                     t-          |t.          dFdG|j        |j        |	|j        |j        |j        |j        ¬H¦  «        ¦  «         |                     t-          |t<          dIdJ|j        |j        |	|j         |j!        |j        |j        ¬H¦  «        ¦  «         |                     t-          |tD          dKdL|j#        |j        |	|j$        |j%        |j        |j        ¬H¦  «        ¦  «         |                     t-          |tL          dMdN|j'        |j        |	|j(        |j)        |j        |j        ¬H¦  «        ¦  «         t            *                    dO¦  «         |D ]}|rtW          |¦  «         Œ|j,        €t[          |j        dPdQ¬R¦  «        }n|j,        }|r2t            *                    dS|¦  «         | .                    |¦  «         dS dS )Tz3Plan the standard axis mappings for a variable fontNr   r^   )ÚconfigLogger)ÚTTFontzfonttools varLib.avar.planz#Plan `avar` table for variable font)Údescriptionrã   zvarfont.ttfzVariable-font file.)ÚmetavarÚhelpz-oz--output-filezOutput font file name.)Útyper  z	--weightsz+Space-separate list of weights to generate.z--widthsz*Space-separate list of widths to generate.z--slantsz*Space-separate list of slants to generate.z--sizesz1Space-separate list of optical-sizes to generate.z	--sampleszNumber of samples.z-sz
--sanitizeÚ
store_truezSanitize axis limits)Úactionr  z-gz--glyphsz2Space-separate list of glyphs to use for sampling.z--weight-design-limitsz4min:default:max in design units for the `wght` axis.z--width-design-limitsz4min:default:max in design units for the `wdth` axis.z--slant-design-limitsz4min:default:max in design units for the `slnt` axis.z--optical-size-design-limitsz4min:default:max in design units for the `opsz` axis.z--weight-pinsz=Space-separate list of before:after pins for the `wght` axis.z--width-pinsz=Space-separate list of before:after pins for the `wdth` axis.z--slant-pinsz=Space-separate list of before:after pins for the `slnt` axis.z--optical-size-pinsz=Space-separate list of before:after pins for the `opsz` axis.z-pz--plotzPlot the resulting mapping.F)Úrequiredz-vz	--verbosezRun more verbosely.z-qz--quietzTurn verbosity off.ÚDEBUGÚWARNINGÚINFO)Úlevelrà   zNot a variable font.rì   g      ð?rÇ   ÚWeight)r°   r±   rk   r²   rƒ   rË   rô   rÍ   ÚWidthrÑ   ÚSlantrÕ   ÚOpticalSizezDesignspace snippet:Tz.avar)Ú	overWriteÚsuffixz	Saving %s)/ÚsysÚargvÚ	fontToolsrý   ÚfontTools.ttLibrþ   ÚargparseÚArgumentParserÚadd_argumentrð   ÚintÚadd_mutually_exclusive_groupÚ
parse_argsÚverboseÚquietrã   rO   Úerrorrk   rñ   ré   Úappendr   r   rÊ   r±   Úweight_design_limitsÚweight_pinsrË   rô   r   rÏ   Úwidth_design_limitsÚ
width_pinsr   rÓ   Úslant_design_limitsÚ
slant_pinsr   r×   Úoptical_size_design_limitsÚoptical_size_pinsr   ÚprintÚoutput_filer
   Úsave)Úargsr  rý   rþ   r  ÚparserÚlogging_groupÚoptionsrã   rk   r`   rq   rp   ÚdesignspaceSnippetsÚsnippetÚoutfiles                   r,   r   r   #  s«  € ð €|Øˆ
ˆ
ˆ
àŒx˜˜˜Œ|ˆà&Ð&Ð&Ð&Ð&Ð&Ø&Ð&Ð&Ð&Ð&Ð&Ø€O€O€Oà×$Ò$Ø$Ø9ð %ñ ô €Fð ×Ò˜¨Ð<QÐÑRÔRÐRØ
×ÒØØÝØ%ð	 ñ ô ð ð ×ÒØ�#Ð$Qð ñ ô ð ð ×ÒØ�Ð#Oð ñ ô ð ð ×ÒØ�Ð#Oð ñ ô ð ð ×ÒØ�Ð"Uð ñ ô ð ð ×Ò˜­#Ð4HÐÑIÔIÐIØ
×ÒØˆl <Ð6Lð ñ ô ð ð ×ÒØØÝØAð	 ñ ô ð ð ×ÒØ ÝØCð ñ ô ð ð
 ×ÒØÝØCð ñ ô ð ð
 ×ÒØÝØCð ñ ô ð ð
 ×ÒØ&ÝØCð ñ ô ð ð
 ×ÒØÝØLð ñ ô ð ð
 ×ÒØÝØLð ñ ô ð ð
 ×ÒØÝØLð ñ ô ð ð
 ×ÒØÝØLð ñ ô ð ð
 ×ÒØˆh˜|Ð2Oð ñ ô ð ð ×7Ò7ÀÐ7ÑGÔG€MØ×ÒØˆk ,Ð5Jð ñ ô ð ð ×ÒØˆi Ð3Hð ñ ô ð ð ×Ò Ñ%Ô%€Gà€LØ!œ/ÐUˆwˆw¸G¼MÐ/U¨y¨yÈvðñ ô ð ð ˆ6�'”,ÑÔ€DØ�Tˆ>ˆ>Ý�	Š	Ð(Ñ)Ô)Ð)Øˆqà„~Ð!Ø”×%Ò%Ñ'Ô'ˆØ�'”.Ð Ð ØˆFØ”^×)Ò)Ñ+Ô+ð $ð $�Ø˜!�8�8Ø'(§w¢w¨s¡|¤|Ñ$�E˜9Ý$)¨)Ñ$4Ô$4�F˜5‘M�Mà #�F˜1‘I�IøàˆàÐà×ÒÝØÝØØØ”?Ø”OØØ Ô5ØÔ$ØÔ%Ø”ð	
ñ 	
ô 	
ñô ð ð ×ÒÝØÝØØØ”>Ø”OØØ Ô4ØÔ#ØÔ%Ø”ð	
ñ 	
ô 	
ñô ð ð ×ÒÝØÝØØØ”>Ø”OØØ Ô4ØÔ#ØÔ%Ø”ð	
ñ 	
ô 	
ñô ð ð ×ÒÝØÝØØØ”=Ø”OØØ Ô;ØÔ*ØÔ%Ø”ð	
ñ 	
ô 	
ñô ð õ  ‡H‚HÐ#Ñ$Ô$Ð$Ø&ð ð ˆØð 	Ý�'‰NŒNˆNøàÔÐ"Ý$ W¤\¸TÈ'ÐRÑRÔRˆˆàÔ%ˆØð Ý�Š�˜gÑ&Ô&Ð&Ø�	Š	�'ÑÔÐÐÐðð r.   Ú__main__)N)NNNNN)NNNNNF)NNNNFF)5r  r   ÚfontTools.ttLib.tables._f_v_a_rr   r›   ÚfontTools.pens.areaPenr   ÚfontTools.pens.basePenr   ÚfontTools.pens.statisticsPenr   ÚfontTools.varLib.modelsr   r	   ÚfontTools.misc.cliToolsr
   r&   ÚloggingÚpprintr   Ú__all__Ú	getLoggerrO   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   Ú__name__r  ÚexitrF   r.   r,   ú<module>r=     sb  ðØ $Ð $Ð $Ð $Ð $Ð $Ø <Ð <Ð <Ð <Ð <Ð <Ø *Ð *Ð *Ð *Ð *Ð *Ø *Ð *Ð *Ð *Ð *Ð *Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ðð ð €ð. €gÔÐ4Ñ5Ô5€ðð ð €ð,
ð 
ð 
€ð$ 
ˆÐHÐH¸¸¸sÀB¹¼ÐHÑHÔHÑ	HÔ	H€ð	ð 	ð 	€ð4 €ð6ð 6ð 6ð
ð ð ð
:ð :ð :ð.ð .ð .ðHð Hð Hðð ð ð ð8ð ð ð ð89ð 9ð 9ð 9ð:&ð &ð &ðRDð Dð DðNð ð ðR ØØØ	Øð`ð `ð `ð `ðL ØØØØ	Øð#ð #ð #ð #ðR ØØØØ	Øð#ð #ð #ð #ðR ØØØØ	Øð#ð #ð #ð #ðR ØØØØ	Øð"ð "ð "ð "ðJð ð ð*)ð )ð )ð ØØØ	ØØ	ðYð Yð Yð YðxCð Cð Cð CðL ˆzÒÐØ€J€J€Jà€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr.   