§
    ¢”j^.  ã                   ó6  — d dl m Z  d dlmZmZ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mZmZ d dlmZmZ d d	l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mZ d dlZddgZ  G d„ d¦  «        Z! G d„ de!e¦  «        Z" G d„ de!ee¦  «        Z#dS )é    )Úarray)ÚAnyÚCallableÚDictÚOptionalÚTuple)ÚMAX_F2DOT14ÚfloatToFixedToFloat)ÚLogMixin)ÚAbstractPointPen©ÚotRound)Ú
LoggingPenÚPenError)ÚTransformPenÚTransformPointPen)Ú	ttProgram)ÚflagOnCurveÚ	flagCubic)ÚGlyph)ÚGlyphComponent)ÚGlyphCoordinates)ÚdropImpliedOnCurvePointsNÚ
TTGlyphPenÚTTGlyphPointPenc                   óø   — e Zd Z	 ddeeeef                  deddfd„Zdede	e
e
e
e
e
e
f         fd	„Zd
„ Zdd„Z	 ddede	e
e
e
e
e
e
f         dee         deddf
d„Zd„ Z	 	 dedœdededee
gef         defd„ZdS )Ú_TTGlyphBasePenTÚglyphSetÚhandleOverflowingTransformsÚreturnNc                 óJ   — || _         || _        |                      ¦   «          dS )a±  
        Construct a new pen.

        Args:
            glyphSet (Dict[str, Any]): A glyphset object, used to resolve components.
            handleOverflowingTransforms (bool): See below.

        If ``handleOverflowingTransforms`` is True, the components' transform values
        are checked that they don't overflow the limits of a F2Dot14 number:
        -2.0 <= v < +2.0. If any transform value exceeds these, the composite
        glyph is decomposed.

        An exception to this rule is done for values that are very close to +2.0
        (both for consistency with the -2.0 case, and for the relative frequency
        these occur in real fonts). When almost +2.0 values occur (and all other
        values are within the range -2.0 <= x <= +2.0), they are clamped to the
        maximum positive value that can still be encoded as an F2Dot14: i.e.
        1.99993896484375.

        If False, no check is done and all components are translated unmodified
        into the glyf table, followed by an inevitable ``struct.error`` once an
        attempt is made to compile them.

        If both contours and components are present in a glyph, the components
        are decomposed.
        N)r   r   Úinit)Úselfr   r   s      úh/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/pens/ttGlyphPen.pyÚ__init__z_TTGlyphBasePen.__init__   s$   € ð> !ˆŒØ+FˆÔ(Ø�	Š	‰Œˆˆˆó    Ú	glyphNameÚtransformationc                 ó„   — |                       | |¦  «        } t          | j        |         | j        ¦  «        |¦  «         d S ©N)ÚtransformPenÚgetattrr   Ú
drawMethod)r#   r'   r(   Útpens       r$   Ú
_decomposez_TTGlyphBasePen._decompose9   sB   € ð
 × Ò   ~Ñ6Ô6ˆØ:��”˜iÔ(¨$¬/Ñ:Ô:¸4Ñ@Ô@Ð@Ð@Ð@r&   c                 ó   — t           ‚)z6
        Check if the current path is closed.
        )ÚNotImplementedError©r#   s    r$   Ú	_isClosedz_TTGlyphBasePen._isClosedA   s
   € õ "Ð!r&   c                 ó>   — g | _         g | _        g | _        g | _        d S r*   )ÚpointsÚendPtsÚtypesÚ
componentsr2   s    r$   r"   z_TTGlyphBasePen.initG   s"   € ØˆŒØˆŒØˆŒ
ØˆŒˆˆr&   ÚbaseGlyphNameÚ
identifierÚkwargsc                 ó>   — | j                              ||f¦  «         dS )z"
        Add a sub glyph.
        N)r8   Úappend)r#   r9   r(   r:   r;   s        r$   ÚaddComponentz_TTGlyphBasePen.addComponentM   s%   € ð 	Œ×Ò ¨~Ð>Ñ?Ô?Ð?Ð?Ð?r&   c                 ó¦  — | j         rt          d„ | j        D ¦   «         ¦  «        }g }| j        D �] \  }}|| j        vr| j                             d|› d�¦  «         Œ.| j        s	| j         r|r|                      ||¦  «         ŒUt          ¦   «         }||_	        d„ |dd …         D ¦   «         \  |_
        |_        t          d„ |d d…         D ¦   «         ¦  «        }|dk    rR| j         r2t          d„ |D ¦   «         ¦  «        rt          d	„ |D ¦   «         ¦  «        }|d d
…         |d
d …         f|_        ||_        |                     |¦  «         �Œ"|S )Nc              3   óN   K  — | ] \  }}|d d…         D ]}|dk    p|dk     V — ŒŒ!d S )Né   é   éþÿÿÿ© )Ú.0r'   r(   Úss       r$   ú	<genexpr>z3_TTGlyphBasePen._buildComponents.<locals>.<genexpr>]   sf   è è € ð ð á/�Y Ø'¨¨¨Ô+ðð ð ð �A’�˜˜Ršðð ð ð ð ð ð r&   z skipped non-existing component 'ú'c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r*   r   ©rE   Úvs     r$   rG   z3_TTGlyphBasePen._buildComponents.<locals>.<genexpr>n   s(   è è € Ð'OÐ'O°q­°©
¬
Ð'OÐ'OÐ'OÐ'OÐ'OÐ'Or&   rA   c              3   ó6   K  — | ]}t          |d ¦  «        V — ŒdS )é   N)r
   rJ   s     r$   rG   z3_TTGlyphBasePen._buildComponents.<locals>.<genexpr>q   s>   è è € ð #ð #Ø/0Õ# A rÑ*Ô*ð#ð #ð #ð #ð #ð #r&   )é   r   r   rN   c              3   ó@   K  — | ]}t           |cxk     od k    nc V — ŒdS ©rB   N©r	   ©rE   rF   s     r$   rG   z3_TTGlyphBasePen._buildComponents.<locals>.<genexpr>u   sO   è è € ð <ð <Ø-.•K !Ð(Ð(Ò(Ð( qÒ(Ð(Ð(Ð(ð<ð <ð <ð <ð <ð <r&   c              3   óR   K  — | ]"}t           |cxk     rd k    r
n nt           n|V — Œ#dS rP   rQ   rR   s     r$   rG   z3_TTGlyphBasePen._buildComponents.<locals>.<genexpr>y   s[   è è € ð +ð +àõ (3°QÐ';Ð';Ò';Ð';¸!Ò';Ð';Ð';Ð';Ð';�˜Àð+ð +ð +ð +ð +ð +r&   rB   )r   Úanyr8   r   ÚlogÚwarningr5   r/   r   r'   ÚxÚyÚtupleÚ	transformÚflagsr=   )r#   ÚcomponentFlagsÚoverflowingr8   r'   r(   Ú	components          r$   Ú_buildComponentsz _TTGlyphBasePen._buildComponentsY   sâ  € ØÔ+ð 	õ ð ð à37´?ðñ ô ñ ô ˆKð
 ˆ
Ø)-¬ð 	)ñ 	)Ñ%ˆI�~Ø ¤Ð-Ð-Ø”× Ò Ð!PÀIÐ!PÐ!PÐ!PÑQÔQÐQØØŒ{ð ˜tÔ?ð ÀKð à—’ 	¨>Ñ:Ô:Ð:Øå&Ñ(Ô(ˆIØ"+ˆIÔØ'OÐ'O¸NÈ1È2È2Ô<NÐ'OÑ'OÔ'OÑ$ˆIŒK˜œõ #ð #ð #Ø4BÀ2ÀAÀ2Ô4Fð#ñ #ô #ñ ô ˆNð  Ò-Ð-ØÔ3ð ½ð <ð <Ø2@ð<ñ <ô <ñ 9ô 9ð õ &+ð +ð +à!/ð+ñ +ô +ñ &ô &�Nð (6°b°q°bÔ'9¸>È!È"È"Ô;MÐ&N�	Ô#Ø,ˆIŒOØ×Ò˜iÑ(Ô(Ð(Ñ(ØÐr&   rA   F©Úroundr\   ÚdropImpliedOnCurvesra   c                óH  — |                       ¦   «         st          d¦  «        ‚|                      |¦  «        }t          ¦   «         }t	          | j        ¦  «        |_        | j        |_        t          d| j
        ¦  «        |_        |                      ¦   «          |r||_        d|_        nwt          |j        ¦  «        |_        t!          j        ¦   «         |_        |j                             d¦  «         |rt)          |¦  «         |j                             |¬¦  «         |S )a  
        Returns a :py:class:`~._g_l_y_f.Glyph` object representing the glyph.

        Args:
            componentFlags: Flags to use for component glyphs. (default: 0x04)

            dropImpliedOnCurves: Whether to remove implied-oncurve points. (default: False)
        zDidn't close last contour.ÚBéÿÿÿÿr&   r`   )r3   r   r_   r   r   r5   Úcoordinatesr6   ÚendPtsOfContoursr   r7   r[   r"   r8   ÚnumberOfContoursÚlenr   ÚProgramÚprogramÚfromBytecoder   ÚtoInt)r#   r\   rb   ra   r8   Úglyphs         r$   rn   z_TTGlyphBasePen.glyph‚   s  € ð �~Š~ÑÔð 	9ÝÐ7Ñ8Ô8Ð8Ø×*Ò*¨>Ñ:Ô:ˆ
å‘”ˆÝ,¨T¬[Ñ9Ô9ˆÔØ!%¤ˆÔÝ˜C ¤Ñ,Ô,ˆŒØ�	Š	‰Œˆàð 	1ð  *ˆEÔØ%'ˆEÔ"Ð"å%(¨Ô)?Ñ%@Ô%@ˆEÔ"Ý%Ô-Ñ/Ô/ˆEŒMØŒM×&Ò& sÑ+Ô+Ð+Ø"ð 0Ý(¨Ñ/Ô/Ð/ØÔ×#Ò#¨%Ð#Ñ0Ô0Ð0àˆr&   )T©r    Nr*   )rA   F)Ú__name__Ú
__module__Ú__qualname__r   r   Ústrr   Úboolr%   r   Úfloatr/   r3   r"   r>   r_   r   Úintr   r   rn   rD   r&   r$   r   r      sœ  € € € € € ð -1ð!ð !à˜4  S œ>Ô*ð!ð &*ð!ð 
ð	!ð !ð !ð !ðFAàðAð ˜e U¨E°5¸%ÀÐFÔGðAð Að Að Að"ð "ð "ðð ð ð ð %)ð	
@ð 
@àð
@ð ˜e U¨E°5¸%ÀÐFÔGð
@ð ˜S”Mð	
@ð
 ð
@ð 
ð
@ð 
@ð 
@ð 
@ð'ð 'ð 'ðV #Ø$)ð&ð
 )0ð&ð &ð &àð&ð "ð&ð
 ˜˜ ˜Ô%ð&ð 
ð&ð &ð &ð &ð &ð &r&   r   c            	       óø   ‡ — e Zd ZdZdZeZ	 	 	 ddeee	e
f                  deded	dfˆ fd
„Zdeeef         ded	dfd„Zdd„Zd	efd„Zdeeef         d	dfd„Zdeeef         d	dfd„Zdd„Zdd„Zdd„Zdd„Zˆ xZS )r   a  
    Pen used for drawing to a TrueType glyph.

    This pen can be used to construct or modify glyphs in a TrueType format
    font. After using the pen to draw, use the ``.glyph()`` method to retrieve
    a :py:class:`~._g_l_y_f.Glyph` object representing the glyph.
    ÚdrawNTFr   r   ÚoutputImpliedClosingLiner    c                 óZ   •— t          ¦   «                              ||¦  «         || _        d S r*   )Úsuperr%   ry   )r#   r   r   ry   Ú	__class__s       €r$   r%   zTTGlyphPen.__init__·   s.   ø€ õ 	‰Œ×Ò˜Ð#>Ñ?Ô?Ð?Ø(@ˆÔ%Ð%Ð%r&   ÚptÚtpc                 ón   — | j                              |¦  «         | j                             |¦  «         d S r*   )r5   r=   r7   )r#   r}   r~   s      r$   Ú	_addPointzTTGlyphPen._addPointÀ   s4   € ØŒ×Ò˜2ÑÔÐØŒ
×Ò˜"ÑÔÐÐÐr&   c                 ój   — | j                              ¦   «          | j                             ¦   «          d S r*   )r5   Úpopr7   r2   s    r$   Ú	_popPointzTTGlyphPen._popPointÄ   s,   € ØŒ�ŠÑÔÐØŒ
�ŠÑÔÐÐÐr&   c                 ól   — | j          p,| j        o%| j        d         t          | j         ¦  «        dz
  k    S )Nre   rN   )r5   r6   ri   r2   s    r$   r3   zTTGlyphPen._isClosedÈ   s7   € Ø”K�ð 
ØŒKÐC˜DœK¨œO­s°4´;Ñ/?Ô/?À!Ñ/CÒCð	
r&   c                 ó<   — |                       |t          ¦  «         d S r*   )r€   r   ©r#   r}   s     r$   ÚlineTozTTGlyphPen.lineToÍ   s   € Ø�Š�r�;Ñ'Ô'Ð'Ð'Ð'r&   c                 ó‚   — |                       ¦   «         st          d¦  «        ‚|                      |t          ¦  «         d S )Nz+"move"-type point must begin a new contour.)r3   r   r€   r   r†   s     r$   ÚmoveTozTTGlyphPen.moveToÐ   s>   € Ø�~Š~ÑÔð 	JÝÐHÑIÔIÐIØ�Š�r�;Ñ'Ô'Ð'Ð'Ð'r&   c                 óÒ   — t          |¦  «        dz  dk    sJ ‚|d d…         D ]}|                      |t          ¦  «         Œ|d         �|                      |d         d¦  «         d S d S )NrB   rN   re   )ri   r€   r   ©r#   r5   r}   s      r$   ÚcurveTozTTGlyphPen.curveToÕ   s}   € Ý�6‰{Œ{˜Q‰ !Ò#Ð#Ð#Ð#Ø˜˜"˜”+ð 	*ð 	*ˆBØ�NŠN˜2�yÑ)Ô)Ð)Ð)ð �"Œ:Ð!Ø�NŠN˜6 "œ: qÑ)Ô)Ð)Ð)Ð)ð "Ð!r&   c                 óÂ   — t          |¦  «        dk    sJ ‚|d d…         D ]}|                      |d¦  «         Œ|d         �|                      |d         d¦  «         d S d S )NrN   re   r   )ri   r€   r‹   s      r$   ÚqCurveTozTTGlyphPen.qCurveToÞ   sy   € Ý�6‰{Œ{˜aÒÐÐÐØ˜˜"˜”+ð 	"ð 	"ˆBØ�NŠN˜2˜qÑ!Ô!Ð!Ð!ð �"Œ:Ð!Ø�NŠN˜6 "œ: qÑ)Ô)Ð)Ð)Ð)ð "Ð!r&   c                 ó€  — t          | j        ¦  «        dz
  }|dk    s| j        r*|| j        d         dz   k    r|                      ¦   «          d S | j        sNd}| j        r| j        d         dz   }| j        |         | j        |         k    r|                      ¦   «          |dz  }| j                             |¦  «         d S )NrN   r   re   )ri   r5   r6   rƒ   ry   r=   )r#   ÚendPtÚstartPts      r$   Ú	closePathzTTGlyphPen.closePathç   sÉ   € Ý�D”KÑ Ô  1Ñ$ˆð �AŠ:ˆ:˜$œ+ˆ:¨%°4´;¸r´?ÀQÑ3FÒ*FÐ*FØ�NŠNÑÔÐØˆFàÔ,ð 	àˆGØŒ{ð .Øœ+ bœ/¨AÑ-�ØŒ{˜7Ô# t¤{°5Ô'9Ò9Ð9Ø—’Ñ Ô Ð Ø˜‘
�àŒ×Ò˜5Ñ!Ô!Ð!Ð!Ð!r&   c                 ó.   — |                       ¦   «          d S r*   )r’   r2   s    r$   ÚendPathzTTGlyphPen.endPathú   s   € à�ŠÑÔÐÐÐr&   )NTFro   )rp   rq   rr   Ú__doc__r-   r   r+   r   r   rs   r   rt   r%   r   ru   rv   r€   rƒ   r3   r‡   r‰   rŒ   rŽ   r’   r”   Ú__classcell__©r|   s   @r$   r   r   «   s¨  ø€ € € € € ðð ð €JØ€Lð .2Ø,0Ø).ð	Að Aà˜4  S œ>Ô*ðAð &*ðAð #'ð	Að
 
ðAð Að Að Að Að Að˜E %¨ ,Ô/ð °Sð ¸Tð ð ð ð ðð ð ð ð
˜4ð 
ð 
ð 
ð 
ð
(˜˜u e˜|Ô,ð (°ð (ð (ð (ð (ð(˜˜u e˜|Ô,ð (°ð (ð (ð (ð (ð
*ð *ð *ð *ð*ð *ð *ð *ð"ð "ð "ð "ð&ð ð ð ð ð ð ð r&   c                   óÄ   ‡ — e Zd ZdZdZeZdˆ fd„Zdefd„Z	dde
e         deddfd	„Zdd
„Z	 	 	 	 ddeeef         de
e         dede
e         de
e         deddfd„Zˆ xZS )r   a  
    Point pen used for drawing to a TrueType glyph.

    This pen can be used to construct or modify glyphs in a TrueType format
    font. After using the pen to draw, use the ``.glyph()`` method to retrieve
    a :py:class:`~._g_l_y_f.Glyph` object representing the glyph.
    Ú
drawPointsr    Nc                 óV   •— t          ¦   «                              ¦   «          d | _        d S r*   )r{   r"   Ú_currentContourStartIndex)r#   r|   s    €r$   r"   zTTGlyphPointPen.init  s"   ø€ Ý‰Œ�Š‰ŒˆØ)-ˆÔ&Ð&Ð&r&   c                 ó   — | j         d u S r*   )r›   r2   s    r$   r3   zTTGlyphPointPen._isClosed  s   € ØÔ-°Ð5Ð5r&   r:   r;   c                 ó~   — |                       ¦   «         st          d¦  «        ‚t          | j        ¦  «        | _        dS )z'
        Start a new sub path.
        zDidn't close previous contour.N)r3   r   ri   r5   r›   )r#   r:   r;   s      r$   Ú	beginPathzTTGlyphPointPen.beginPath  s=   € ð �~Š~ÑÔð 	=ÝÐ;Ñ<Ô<Ð<Ý),¨T¬[Ñ)9Ô)9ˆÔ&Ð&Ð&r&   c                 ó8  — |                       ¦   «         rt          d¦  «        ‚| j        t          | j        ¦  «        k    r	d| _        dS | j        r| j        d         dz   nd}| j                             t          | j        ¦  «        dz
  ¦  «         d| _        | j        }t          |t          |¦  «        ¦  «        D ]\}||         dk    rN|dz
  }||k     rt          |¦  «        dz
  }||         dk    rt          ||<   |dz  }||         dk    °t          ||<   Œ]dS )z+
        End the current sub path.
        zContour is already closed.Nre   rN   r   Úcurve)r3   r   r›   ri   r5   r6   r=   r7   Úranger   r   )r#   ÚcontourStartr[   ÚiÚjs        r$   r”   zTTGlyphPointPen.endPath  s1  € ð
 �>Š>ÑÔð 	9ÝÐ7Ñ8Ô8Ð8ØÔ)­S°´Ñ-=Ô-=Ò=Ð=à-1ˆDÔ*ØˆFà.2¬kÐ@�t”{ 2”¨Ñ*Ð*¸qˆØŒ×Ò�3˜tœ{Ñ+Ô+¨aÑ/Ñ0Ô0Ð0Ø)-ˆÔ&ð ”
ˆÝ�|¥S¨¡Z¤ZÑ0Ô0ð 	'ð 	'ˆAØ�QŒx˜7Ò"Ð"Ø˜‘E�Ø�|Ò#Ð#Ý˜E™
œ
 Q™�AØ˜A”h !’m�mÝ(�E˜!‘HØ˜‘F�Að ˜A”h !’m�mõ '��a‘øð	'ð 	'r&   Fr}   ÚsegmentTypeÚsmoothÚnamec                 ó®  — |                       ¦   «         rt          d¦  «        ‚|€| j                             d¦  «         nz|dv r | j                             t          ¦  «         nV|dk    r | j                             t          ¦  «         n0|dk    r| j                             d¦  «         nt          |¦  «        ‚| j                             |¦  «         dS )z6
        Add a point to the current sub path.
        z&Can't add a point to a closed contour.Nr   )ÚlineÚmoveÚqcurver    )r3   r   r7   r=   r   ÚAssertionErrorr5   )r#   r}   r¥   r¦   r§   r:   r;   s          r$   ÚaddPointzTTGlyphPointPen.addPoint6  sÜ   € ð �>Š>ÑÔð 	EÝÐCÑDÔDÐDØÐØŒJ×Ò˜aÑ Ô Ð Ð ØÐ,Ð,Ð,ØŒJ×Ò�kÑ*Ô*Ð*Ð*Ø˜HÒ$Ð$ØŒJ×Ò�kÑ*Ô*Ð*Ð*Ø˜GÒ#Ð#ØŒJ×Ò˜gÑ&Ô&Ð&Ð&å  Ñ-Ô-Ð-àŒ×Ò˜2ÑÔÐÐÐr&   ro   r*   )NFNN)rp   rq   rr   r•   r-   r   r+   r"   rt   r3   r   rs   r   rž   r”   r   ru   r­   r–   r—   s   @r$   r   r   ÿ   s4  ø€ € € € € ðð ð €JØ$€Lð.ð .ð .ð .ð .ð .ð6˜4ð 6ð 6ð 6ð 6ð:ð : H¨S¤Mð :ÀCð :ÈDð :ð :ð :ð :ð'ð 'ð 'ð 'ð> &*ØØ"Ø$(ðð à�%˜�,Ôðð ˜c”]ðð ð	ð
 �sŒmðð ˜S”Mðð ðð 
ðð ð ð ð ð ð ð r&   )$r   Útypingr   r   r   r   r   ÚfontTools.misc.fixedToolsr	   r
   ÚfontTools.misc.loggingToolsr   ÚfontTools.pens.pointPenr   ÚfontTools.misc.roundToolsr   ÚfontTools.pens.basePenr   r   ÚfontTools.pens.transformPenr   r   ÚfontTools.ttLib.tablesr   ÚfontTools.ttLib.tables._g_l_y_fr   r   r   r   r   r   ÚmathÚ__all__r   r   r   rD   r&   r$   ú<module>r¹      sð  ðØ Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø :Ð :Ð :Ð :Ð :Ð :Ø <Ð <Ð <Ð <Ð <Ð <Ø DÐ DÐ DÐ DÐ DÐ DØ €€€ð Ð*Ð
+€ðSð Sð Sð Sð Sñ Sô Sð SðlQð Qð Qð Qð Q� *ñ Qô Qð QðhPð Pð Pð Pð P�o xÐ1Añ Pô Pð Pð Pð Pr&   