§
    ¢”jD3  ã                   ó  — d Z ddl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mZmZmZ d	d
gZdZdZ ej        e¦  «        ZeZd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Zd„ Zd„ Zdd„Zdd„Z	 dd„Z 	 	 	 	 	 	 	 dd„Z!d„ Z"d„ Z#dS ) a—  Converts cubic bezier curves to quadratic splines.

Conversion is performed such that the quadratic splines keep the same end-curve
tangents as the original cubics. The approach is iterative, increasing the
number of segments for a spline until the error gets below a bound.

Respective curves from multiple fonts will be converted at once to ensure that
the resulting splines are interpolation-compatible.
é    N)ÚAbstractPen)ÚPointToSegmentPen)ÚReverseContourPené   )Úcurves_to_quadratic)ÚUnequalZipLengthsErrorÚIncompatibleSegmentNumberErrorÚIncompatibleSegmentTypesErrorÚIncompatibleGlyphsErrorÚIncompatibleFontsErrorÚfonts_to_quadraticÚfont_to_quadraticgü©ñÒMbP?z&com.github.googlei18n.cu2qu.curve_typec                  ó”   — t          t          d„ | D ¦   «         ¦  «        ¦  «        dk    r	t          | Ž ‚t          t	          | Ž ¦  «        S )zyEnsure each argument to zip has the same length. Also make sure a list is
    returned for python 2/3 compatibility.
    c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N©Úlen)Ú.0Úas     úb/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/cu2qu/ufo.pyú	<genexpr>zzip.<locals>.<genexpr><   s(   è è € Ð$Ð$˜!�s�1‰vŒvÐ$Ð$Ð$Ð$Ð$Ð$ó    r   )r   Úsetr   ÚlistÚ_zip)Úargss    r   Úzipr   7   sK   € õ
 �3Ð$Ð$˜tÐ$Ñ$Ô$Ñ$Ô$Ñ%Ô%¨Ò*Ð*Ý$ dÐ+Ð+Ý•�d�ÑÔÐr   c                 ó6   — | dk    rt          |› d�¦  «        ‚d S )Nr   z must be greater than zero)Ú
ValueError)ÚvalueÚnames     r   Ú_validate_positive_tolerancer"   A   s)   € Ø�‚z€zÝ˜DÐ<Ð<Ð<Ñ=Ô=Ð=ð €zr   c                 ó0   — | D ]}t          ||¦  «         Œd S r   )r"   )Úvaluesr!   r    s      r   Ú_validate_positive_tolerancesr%   F   s.   € Øð 2ð 2ˆÝ$ U¨DÑ1Ô1Ð1Ð1ð2ð 2r   c                 óP   — t          | ¦  «        |k    rt          |› d�¦  «        ‚d S )Nz  must match the number of inputs)r   r   )r$   Úexpectedr!   s      r   Ú_validate_lengthr(   K   s2   € Ý
ˆ6�{„{�hÒÐÝ˜DÐBÐBÐBÑCÔCÐCð Ðr   c                   óH   — 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S )ÚGetSegmentsPenz®Pen to collect segments into lists of points for conversion.

    Curves always include their initial on-curve point, so some points are
    duplicated between segments.
    c                 ó"   — d | _         g | _        d S r   )Ú_last_ptÚsegments©Úselfs    r   Ú__init__zGetSegmentsPen.__init__W   s   € ØˆŒØˆŒˆˆr   c                 ó`   — |dv r|d         | _         | j                             ||f¦  «         d S )N)ÚmoveÚlineÚqcurveÚcurveéÿÿÿÿ)r,   r-   Úappend)r/   Útagr   s      r   Ú_add_segmentzGetSegmentsPen._add_segment[   s9   € ØÐ5Ð5Ð5Ø  œHˆDŒMØŒ×Ò˜c 4˜[Ñ)Ô)Ð)Ð)Ð)r   c                 ó2   — |                       d|¦  «         d S )Nr2   ©r9   ©r/   Úpts     r   ÚmoveTozGetSegmentsPen.moveTo`   ó   € Ø×Ò˜& "Ñ%Ô%Ð%Ð%Ð%r   c                 ó2   — |                       d|¦  «         d S )Nr3   r;   r<   s     r   ÚlineTozGetSegmentsPen.lineToc   r?   r   c                 ó.   —  | j         d| j        g|¢R Ž  d S )Nr4   ©r9   r,   ©r/   Úpointss     r   ÚqCurveTozGetSegmentsPen.qCurveTof   s'   € ØˆÔ˜( D¤MÐ;°FÐ;Ð;Ð;Ð;Ð;Ð;r   c                 ó.   —  | j         d| j        g|¢R Ž  d S )Nr5   rC   rD   s     r   ÚcurveTozGetSegmentsPen.curveToi   s'   € ØˆÔ˜' 4¤=Ð:°6Ð:Ð:Ð:Ð:Ð:Ð:r   c                 ó0   — |                       d¦  «         d S )NÚcloser;   r.   s    r   Ú	closePathzGetSegmentsPen.closePathl   s   € Ø×Ò˜'Ñ"Ô"Ð"Ð"Ð"r   c                 ó0   — |                       d¦  «         d S )NÚendr;   r.   s    r   ÚendPathzGetSegmentsPen.endPatho   s   € Ø×Ò˜%Ñ Ô Ð Ð Ð r   c                 ó   — d S r   © )r/   Ú	glyphNameÚtransformations      r   ÚaddComponentzGetSegmentsPen.addComponentr   s   € Øˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r9   r>   rA   rF   rH   rK   rN   rS   rP   r   r   r*   r*   P   s¥   € € € € € ðð ðð ð ð*ð *ð *ð
&ð &ð &ð&ð &ð &ð<ð <ð <ð;ð ;ð ;ð#ð #ð #ð!ð !ð !ðð ð ð ð r   r*   c                 óx   — t          ¦   «         }t          |d¬¦  «        }|                      |¦  «         |j        S )z6Get a glyph's segments as extracted by GetSegmentsPen.T)ÚoutputImpliedClosingLine)r*   r   Ú
drawPointsr-   )ÚglyphÚpenÚpointPens      r   Ú_get_segmentsr^   v   s?   € õ Ñ
Ô
€Cõ ! ¸tÐDÑDÔD€HØ	×Ò�XÑÔÐØŒ<Ðr   c                 ó¾  — |                       ¦   «          |                      ¦   «         }|rt          |¦  «        }|D ] \  }}|dk    r |j        |Ž  Œ|dk    r |j        |Ž  Œ'|dk    r |j        |dd…         Ž  Œ@|dk    r |j        |dd…         Ž  ŒY|dk    r|                     ¦   «          Œt|dk    r|                     ¦   «          Œ�t          d	|z  ¦  «        ‚dS )
z=Draw segments as extracted by GetSegmentsPen back to a glyph.r2   r3   r5   r   Nr4   rJ   rM   zUnhandled segment type "%s")
ÚclearContoursÚgetPenr   r>   rA   rH   rF   rK   rN   ÚAssertionError)r[   r-   Úreverse_directionr\   r8   r   s         r   Ú_set_segmentsrd   ‰   s  € ð 
×ÒÑÔÐØ
�,Š,‰.Œ.€CØð %Ý Ñ$Ô$ˆØð Fð F‰	ˆˆTØ�&Š=ˆ=ØˆCŒJ˜ÐÐÐØ�FŠ]ˆ]ØˆCŒJ˜ÐÐÐØ�GŠ^ˆ^ØˆCŒK˜˜a˜b˜bœÐ"Ð"Ð"Ø�HŠ_ˆ_ØˆCŒL˜$˜q˜r˜rœ(Ð#Ð#Ð#Ø�GŠ^ˆ^Ø�MŠM‰OŒOˆOˆOØ�EŠ\ˆ\Ø�KŠK‰MŒMˆMˆMå Ð!>ÀÑ!DÑEÔEÐEðFð Fr   Tc                 ó   ‡— t          d„ | D ¦   «         ¦  «        s
J d¦   «         ‚t          d„ | D ¦   «         ||¦  «        }t          |d         ¦  «        Št          ˆfd„|dd…         D ¦   «         ¦  «        s
J d¦   «         ‚t          ‰d	z
  ¦  «        }|                     |d¦  «        dz   ||<   |s‰d
k    rd„ |D ¦   «         S d„ |D ¦   «         S )z2Return quadratic approximations of cubic segments.c              3   ó.   K  — | ]}|d          dk    V — ŒdS )r   r5   NrP   ©r   Úss     r   r   z)_segments_to_quadratic.<locals>.<genexpr>¤   s*   è è € Ð1Ð1 1ˆq�Œt�wŠÐ1Ð1Ð1Ð1Ð1Ð1r   zNon-cubic given to convertc                 ó   — g | ]
}|d          ‘ŒS )r   rP   rg   s     r   ú
<listcomp>z*_segments_to_quadratic.<locals>.<listcomp>¦   s   € Ð%=Ð%=Ð%=¨q a¨¤dÐ%=Ð%=Ð%=r   r   c              3   ó>   •K  — | ]}t          |¦  «        ‰k    V — Œd S r   r   )r   rh   Úns     €r   r   z)_segments_to_quadratic.<locals>.<genexpr>¨   s-   øè è € Ð3Ð3˜q�s�1‰vŒv˜Š{Ð3Ð3Ð3Ð3Ð3Ð3r   r   NzConverted incompatiblyé   é   c                 ó   — g | ]}d |f‘ŒS )r4   rP   ©r   Úps     r   rj   z*_segments_to_quadratic.<locals>.<listcomp>®   s   € Ð2Ð2Ð2 !�˜1�Ð2Ð2Ð2r   c                 ó   — g | ]}d |f‘ŒS )r5   rP   rp   s     r   rj   z*_segments_to_quadratic.<locals>.<listcomp>°   s   € Ð1Ð1Ð1 �˜!�Ð1Ð1Ð1r   )Úallr   r   ÚstrÚget)r-   Úmax_errÚstatsÚall_quadraticÚ
new_pointsÚspline_lengthrl   s         @r   Ú_segments_to_quadraticr{   ¡   s   ø€ õ Ð1Ð1¨Ð1Ñ1Ô1Ñ1Ô1ÐOÐOÐ3OÑOÔOÐOå$Ð%=Ð%=°HÐ%=Ñ%=Ô%=¸wÈÑVÔV€JÝˆJ�qŒMÑÔ€AÝÐ3Ð3Ð3Ð3 J¨q¨r¨r¤NÐ3Ñ3Ô3Ñ3Ô3ÐMÐMÐ5MÑMÔMÐMå˜˜A™‘J”J€MØ Ÿ9š9 ]°AÑ6Ô6¸Ñ:€Eˆ-Ñàð 2˜˜Qš˜Ø2Ð2 zÐ2Ñ2Ô2Ð2à1Ð1 jÐ1Ñ1Ô1Ð1r   c                 ó¸  ‡ ‡‡— d„ t          ‰ ¦  «        D ¦   «         }|sdS ˆ fd„|D ¦   «         Š ˆfd„|D ¦   «         Š	 t          d„ ‰ D ¦   «         Ž }n# t          $ r t          ‰ ¦  «        ‚w xY wt	          |¦  «        sdS |}g }i }	t          |¦  «        D ]\  }
}|d         d         Št          ˆfd„|dd	…         D ¦   «         ¦  «        sd
„ |D ¦   «         |	|
<   n$‰dk    rt          |‰||¦  «        }|s||k    rd}|}|                     |¦  «         Œ€|r0t          |Ž }t          ‰ |¦  «        D ]\  }}t          |||¦  «         Œ|	rt          ‰ |	¬¦  «        ‚|S )zòDo the actual conversion of a set of compatible glyphs, after arguments
    have been set up.

    Empty glyphs (without contours) are ignored and passed through unchanged.

    Return True if the glyphs were modified, else return False.
    c                 ó>   — g | ]\  }}t          |¦  «        d k    ¯|‘ŒS ©r   r   )r   ÚiÚgs      r   rj   z(_glyphs_to_quadratic.<locals>.<listcomp>½   s'   € ÐGÐGÐG™t˜q !½CÀ¹F¼FÀQºJ¸J˜¸J¸J¸Jr   Fc                 ó    •— g | ]
}‰|         ‘ŒS rP   rP   )r   r   Úglyphss     €r   rj   z(_glyphs_to_quadratic.<locals>.<listcomp>Á   s   ø€ Ð3Ð3Ð3˜Aˆf�QŒiÐ3Ð3Ð3r   c                 ó    •— g | ]
}‰|         ‘ŒS rP   rP   )r   r   rv   s     €r   rj   z(_glyphs_to_quadratic.<locals>.<listcomp>Â   s   ø€ Ð5Ð5Ð5˜aˆw�qŒzÐ5Ð5Ð5r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rP   )r^   )r   r€   s     r   rj   z(_glyphs_to_quadratic.<locals>.<listcomp>Å   s    € Ð$FÐ$FÐ$F¸!¥]°1Ñ%5Ô%5Ð$FÐ$FÐ$Fr   r   c              3   ó0   •K  — | ]}|d          ‰k    V — ŒdS )r   NrP   )r   rh   r8   s     €r   r   z'_glyphs_to_quadratic.<locals>.<genexpr>Ò   s+   øè è € Ð5Ð5 1�1�Q”4˜3’;Ð5Ð5Ð5Ð5Ð5Ð5r   r   Nc                 ó   — g | ]
}|d          ‘ŒS r~   rP   rg   s     r   rj   z(_glyphs_to_quadratic.<locals>.<listcomp>Ó   s   € Ð6Ð6Ð6¨˜q œtÐ6Ð6Ð6r   r5   T)r-   )
Ú	enumerater   r   r	   Úanyrs   r{   r7   rd   r
   )r‚   rv   rc   rw   rx   Únon_empty_indicesÚsegments_by_locationÚglyphs_modifiedÚnew_segments_by_locationÚincompatibler   r-   Únew_segmentsÚnew_segments_by_glyphr[   r8   s   ``             @r   Ú_glyphs_to_quadraticr�   ³   s  øøø€ ð HÐG¥y°Ñ'8Ô'8ÐGÑGÔGÐØð Øˆuà3Ð3Ð3Ð3Ð!2Ð3Ñ3Ô3€FØ5Ð5Ð5Ð5Ð#4Ð5Ñ5Ô5€Gð5Ý"Ð$FÐ$F¸vÐ$FÑ$FÔ$FÐGÐÐøÝ!ð 5ð 5ð 5Ý,¨VÑ4Ô4Ð4ð5øøøåÐ#Ñ$Ô$ð Øˆuð (€Oà!ÐØ€LÝ Ð!5Ñ6Ô6ð 2ð 2‰ˆˆ8Ø�qŒk˜!ŒnˆÝÐ5Ð5Ð5Ð5¨°°°¬Ð5Ñ5Ô5Ñ5Ô5ð 	$Ø6Ð6¨XÐ6Ñ6Ô6ˆL˜‰OˆOØ�GŠ^ˆ^Ý1Ø˜' 5¨-ñô ˆLð ð ' °Ò 8Ð 8Ø"&�Ø#ˆHØ ×'Ò'¨Ñ1Ô1Ð1Ð1àð BÝ #Ð%=Ð >ÐÝ#& vÐ/DÑ#EÔ#Eð 	Bð 	BÑˆE�<Ý˜% Ð/@ÑAÔAÐAÐAàð KÝ+¨F¸\ÐJÑJÔJÐJØÐs   ¾A ÁA,Fc                 ó  — |€i }|€
t           dz  }t          |t          t          f¦  «        r|}n|gt	          | ¦  «        z  }t          |t	          | ¦  «        d¦  «         t          |d¦  «         t          | ||||¦  «        S )a  Convert the curves of a set of compatible of glyphs to quadratic.

    All curves will be converted to quadratic at once, ensuring interpolation
    compatibility. If this is not required, calling glyphs_to_quadratic with one
    glyph at a time may yield slightly more optimized results.

    Empty glyphs (without contours) are ignored and passed through unchanged.

    Return True if glyphs were modified, else return False.

    Raises IncompatibleGlyphsError if glyphs have non-interpolatable outlines.
    Niè  rv   )ÚDEFAULT_MAX_ERRÚ
isinstancer   Útupler   r(   r%   r�   )r‚   rv   rc   rw   rx   Ú
max_errorss         r   Úglyphs_to_quadraticr–   ç   s’   € ð €}Øˆà€å! DÑ(ˆå�'�D¥%˜=Ñ)Ô)ð -Øˆ
ˆ
à�Y¥ V¡¤Ñ,ˆ
Ý�Z¥ V¡¤¨iÑ8Ô8Ð8Ý! *¨iÑ8Ô8Ð8åØ�
Ð-¨u°mñô ð r   c                 ó¤  ‡‡— |ržd„ | D ¦   «         }t          |¦  «        dk    rRt          t          |¦  «        ¦  «        }	|	dv rt                               d¦  «         dS |	dk    rn<t          |	¦  «        ‚t          |¦  «        dk    rt                               d¦  «         ‰€i Š‰�|�t          d	¦  «        ‚‰€	|€t          Št          |t          t          f¦  «        r1t          |t          | ¦  «        d
¦  «         |}
t          |
d
¦  «         n%|�#t          |d
¦  «         |gt          | ¦  «        z  }
t          ‰t          t          f¦  «        rIt          ‰t          | ¦  «        d¦  «         t          ‰d¦  «         d„ t          | ‰¦  «        D ¦   «         }
n ‰�t          ‰d¦  «         ˆfd„| D ¦   «         }
t!          ¦   «         }i } t!          ¦   «         j        d„ | D ¦   «         Ž D ]¯}g }g }t          | |
¦  «        D ]9\  }}||v r0|                     ||         ¦  «         |                     |¦  «         Œ:	 t'          |||‰|¦  «        r|                     |¦  «         Œz# t*          $ r)}t                               |¦  «         |||<   Y d}~Œ¨d}~ww xY w|rt/          |¦  «        ‚|r_|r]t1          ‰                     ¦   «         ¦  «        }t                               dd                     ˆfd„|D ¦   «         ¦  «        z  ¦  «         |r@| D ]=}|j                             t:          d¦  «        }	|rdnd}|	|k    r||j        t:          <   Œ>|S )aP  Convert the curves of a collection of fonts to quadratic.

    All curves will be converted to quadratic at once, ensuring interpolation
    compatibility. If this is not required, calling fonts_to_quadratic with one
    font at a time may yield slightly more optimized results.

    Empty glyphs (without contours) are ignored and passed through unchanged.

    Return the set of modified glyph names if any, else return an empty set.

    By default, cu2qu stores the curve type in the fonts' lib, under a private
    key "com.github.googlei18n.cu2qu.curve_type", and will not try to convert
    them again if the curve type is already set to "quadratic".
    Setting 'remember_curve_type' to False disables this optimization.

    Raises IncompatibleFontsError if same-named glyphs from different fonts
    have non-interpolatable outlines.
    c                 óN   — h | ]"}|j                              t          d ¦  «        ’Œ#S )Úcubic)Úlibru   ÚCURVE_TYPE_LIB_KEY©r   Úfs     r   ú	<setcomp>z%fonts_to_quadratic.<locals>.<setcomp>'  s)   € ÐMÐMÐMÀ!�q”u—y’yÕ!3°WÑ=Ô=ÐMÐMÐMr   r   )Ú	quadraticÚmixedz%Curves already converted to quadraticFr™   z'fonts may contain different curve typesNz4Only one of max_err and max_err_em can be specified.rv   Ú
max_err_emc                 ó2   — g | ]\  }}|j         j        |z  ‘ŒS rP   ©ÚinfoÚ
unitsPerEm)r   r�   Úes      r   rj   z&fonts_to_quadratic.<locals>.<listcomp>H  s&   € ÐOÐOÐO±°°1�a”fÔ'¨!Ñ+ÐOÐOÐOr   c                 ó.   •— g | ]}|j         j        ‰z  ‘ŒS rP   r£   )r   r�   r¡   s     €r   rj   z&fonts_to_quadratic.<locals>.<listcomp>K  s#   ø€ ÐDÐDÐD¸�a”fÔ'¨*Ñ4ÐDÐDÐDr   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r   )Úkeysrœ   s     r   r   z%fonts_to_quadratic.<locals>.<genexpr>O  s*   è è € Ð6Ð6¨1˜aŸfšf™hœhÐ6Ð6Ð6Ð6Ð6Ð6r   zNew spline lengths: %sz, c              3   ó2   •K  — | ]}d |‰|         fz  V — ŒdS )z%s: %dNrP   )r   Úlrw   s     €r   r   z%fonts_to_quadratic.<locals>.<genexpr>f  s0   øè è € ÐJÐJ°a˜ Q¨¨a¬ MÑ1ÐJÐJÐJÐJÐJÐJr   rŸ   r    )r   ÚnextÚiterÚloggerr¤   ÚNotImplementedErrorÚwarningÚ	TypeErrorr’   r“   r   r”   r(   r%   r"   r   r   Úunionr7   r�   Úaddr   Úerrorr   Úsortedr©   Újoinrš   ru   r›   )Úfontsr¡   rv   rc   rw   Ú
dump_statsÚremember_curve_typerx   Úcurve_typesÚ
curve_typer•   ÚmodifiedÚglyph_errorsr!   r‚   Úcur_max_errorsÚfontr´   ÚexcÚspline_lengthsÚnew_curve_types    `  `                r   r   r   	  sÎ  øø€ ð: ð FØMÐMÀuÐMÑMÔMˆÝˆ{ÑÔ˜qÒ Ð Ý�d ;Ñ/Ô/Ñ0Ô0ˆJØÐ3Ð3Ð3Ý—’ÐCÑDÔDÐDØ�uØ˜wÒ&Ð&Øå)¨*Ñ5Ô5Ð5Ý�ÑÔ Ò!Ð!å�NŠNÐDÑEÔEÐEà€}ØˆàÐ 'Ð"5ÝÐNÑOÔOÐOØÐ˜g˜oÝ$ˆ
å�'�D¥%˜=Ñ)Ô)ð ,Ý˜¥# e¡*¤*¨iÑ8Ô8Ð8Øˆ
Ý% j°)Ñ<Ô<Ð<Ð<Ø	Ð	Ý$ W¨iÑ8Ô8Ð8Ø�Y¥ U¡¤Ñ+ˆ
å�*�t¥U˜mÑ,Ô,ð EÝ˜¥S¨¡Z¤Z°Ñ>Ô>Ð>Ý% j°,Ñ?Ô?Ð?ØOÐO½¸EÀ:Ñ8NÔ8NÐOÑOÔOˆ
ˆ
Ø	Ð	Ý$ Z°Ñ>Ô>Ð>ØDÐDÐDÐD¸eÐDÑDÔDˆ
å‰uŒu€HØ€LØ•‘””Ð6Ð6°Ð6Ñ6Ô6Ð7ð %ð %ˆØˆØˆÝ˜u jÑ1Ô1ð 	-ð 	-‰KˆD�%Ø�tˆ|ˆ|Ø—’˜d 4œjÑ)Ô)Ð)Ø×%Ò% eÑ,Ô,Ð,øð	%Ý#Ø˜Ð(9¸5À-ñô ð #ð —’˜TÑ"Ô"Ð"øøÝ&ð 	%ð 	%ð 	%Ý�LŠL˜ÑÔÐØ!$ˆL˜ÑÐÐÐÐÐøøøøð	%øøøð ð 3Ý$ \Ñ2Ô2Ð2àð 
�Jð 
Ý §
¢
¡¤Ñ-Ô-ˆÝ�ŠØ$Ø�yŠyÐJÐJÐJÐJ¸>ÐJÑJÔJÑJÔJñLñ	
ô 	
ð 	
ð
 ð >Øð 	>ð 	>ˆDØœŸšÕ&8¸'ÑBÔBˆJØ,9ÐF˜[˜[¸wˆNØ˜^Ò+Ð+Ø/=�”Õ+Ñ,øØ€Os   È=(I&É&
JÉ0JÊJc                 ó   — t          | gfi |¤ŽS )z†Convenience wrapper around glyphs_to_quadratic, for just one glyph.
    Return True if the glyph was modified, else return False.
    )r–   )r[   Úkwargss     r   Úglyph_to_quadraticrÅ   r  s   € õ
  ˜wÐ1Ð1¨&Ð1Ð1Ð1r   c                 ó   — t          | gfi |¤ŽS )z�Convenience wrapper around fonts_to_quadratic, for just one font.
    Return the set of modified glyph names if any, else return empty set.
    )r   )r¿   rÄ   s     r   r   r   z  s   € õ
 ˜t˜fÐ/Ð/¨Ð/Ð/Ð/r   )T)NFNT)NNFNFTT)$rW   ÚloggingÚfontTools.pens.basePenr   ÚfontTools.pens.pointPenr   Ú fontTools.pens.reverseContourPenr   Ú r   Úerrorsr   r	   r
   r   r   Ú__all__r’   r›   Ú	getLoggerrT   r®   r   r   r"   r%   r(   r*   r^   rd   r{   r�   r–   r   rÅ   r   rP   r   r   ú<module>rÏ      s  ðð ð ð €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø >Ð >Ð >Ð >Ð >Ð >à !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð!4Ð
5€ð
 €Ø=Ð à	ˆÔ	˜8Ñ	$Ô	$€ð €ðð ð ð>ð >ð >ð
2ð 2ð 2ð
Dð Dð Dð
#ð #ð #ð #ð #�[ñ #ô #ð #ðLð ð ð&Fð Fð Fð02ð 2ð 2ð 2ð$1ð 1ð 1ð 1ðj NRðð ð ð ðH ØØØ
ØØØðfð fð fð fðR2ð 2ð 2ð0ð 0ð 0ð 0ð 0r   