§
    ¢”jÏ2  ã                   ó¬   — d dl 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
mZ  G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ d¦  «        ZdS )é    N)Úcurve_to_quadraticÚcurves_to_quadratic)ÚdecomposeSuperBezierSegment)Ú	FilterPen©ÚReverseContourPen)ÚBasePointToSegmentPen)ÚReverseContourPointPenc                   ó:   ‡ — e Zd ZdZ	 	 	 dˆ fd„	Zˆ fd„Zd„ Zˆ xZS )	ÚCu2QuPena	  A filter pen to convert cubic bezier curves to quadratic b-splines
    using the FontTools SegmentPen protocol.

    Args:

        other_pen: another SegmentPen used to draw the transformed outline.
        max_err: maximum approximation error in font units. For optimal results,
            if you know the UPEM of the font, we recommend setting this to a
            value equal, or close to UPEM / 1000.
        reverse_direction: flip the contours' direction but keep starting point.
        stats: a dictionary counting the point numbers of quadratic segments.
        all_quadratic: if True (default), only quadratic b-splines are generated.
            if False, quadratic curves or cubic curves are generated depending
            on which one is more economical.
    FNTc                 ó–   •— |rt          |¦  «        }t          ¦   «                              |¦  «         || _        || _        || _        d S ©N)r   ÚsuperÚ__init__Úmax_errÚstatsÚall_quadratic)ÚselfÚ	other_penr   Úreverse_directionr   r   Ú	__class__s         €úf/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/pens/cu2quPen.pyr   zCu2QuPen.__init__)   sN   ø€ ð ð 	5Ý)¨)Ñ4Ô4ˆIÝ‰Œ×Ò˜Ñ#Ô#Ð#ØˆŒØˆŒ
Ø*ˆÔÐÐó    c                 óÖ  •— | j         |||f}t          || j        | j        ¦  «        }| j        �Et          t          |¦  «        dz
  ¦  «        }| j                             |d¦  «        dz   | j        |<   | j        r | j        |dd …         Ž  d S t          |¦  «        dk    r | j        |dd …         Ž  d S t          |¦  «        dk    sJ ‚ t          ¦   «         j
        |dd …         Ž  d S )Né   r   é   é   é   )Ú
current_ptr   r   r   r   ÚstrÚlenÚgetÚqCurveTor   ÚcurveTo)r   Úpt1Úpt2Úpt3ÚcurveÚresultÚnr   s          €r   Ú_convert_curvezCu2QuPen._convert_curve8   sö   ø€ Ø” # s¨CÐ0ˆÝ# E¨4¬<¸Ô9KÑLÔLˆØŒ:Ð!Ý•C˜‘K”K !‘OÑ$Ô$ˆAØ œJŸNšN¨1¨aÑ0Ô0°1Ñ4ˆDŒJ�q‰MØÔð 	-ØˆDŒM˜6 ! " "œ:Ð&Ð&Ð&Ð&å�6‰{Œ{˜aÒÐØ�”˜v a b bœzÐ*Ð*Ð*Ð*å˜6‘{”{ aÒ'Ð'Ð'Ð'Ø•‘”” ¨¨¨¤Ð,Ð,Ð,Ð,r   c                 ó¤   — t          |¦  «        }|dk    r | j        |Ž  d S |dk    rt          |¦  «        D ]} | j        |Ž  Œd S  | j        |Ž  d S )Nr   )r!   r+   r   r#   )r   Úpointsr*   Úsegments       r   r$   zCu2QuPen.curveToG   s€   € Ý�‰KŒKˆØ�Š6ˆ6àˆDÔ Ð(Ð(Ð(Ð(Ø�ŠUˆUÝ6°vÑ>Ô>ð .ð .�Ø#�Ô# WÐ-Ð-Ð-ð.ð .ð ˆDŒM˜6Ð"Ð"Ð"Ð"r   ©FNT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r$   Ú__classcell__)r   s   @r   r   r      sz   ø€ € € € € ðð ð(  ØØð+ð +ð +ð +ð +ð +ð-ð -ð -ð -ð -ð	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#r   r   c                   ó~   — e Zd ZdZdej        fdej        fdej        fdej        fdœZ	 	 	 dd	„Zd
„ Z	d„ Z
d„ Zd„ ZdS )ÚCu2QuPointPena  A filter pen to convert cubic bezier curves to quadratic b-splines
    using the FontTools PointPen protocol.

    Args:
        other_point_pen: another PointPen used to draw the transformed outline.
        max_err: maximum approximation error in font units. For optimal results,
            if you know the UPEM of the font, we recommend setting this to a
            value equal, or close to UPEM / 1000.
        reverse_direction: reverse the winding direction of all contours.
        stats: a dictionary counting the point numbers of quadratic segments.
        all_quadratic: if True (default), only quadratic b-splines are generated.
            if False, quadratic curves or cubic curves are generated depending
            on which one is more economical.
    r   r   r   )ÚmoveÚlineÚqcurver(   FNTc                 ó”   — t          j        | ¦  «         |rt          |¦  «        | _        n|| _        || _        || _        || _        d S r   )r	   r   r
   Úpenr   r   r   )r   Úother_point_penr   r   r   r   s         r   r   zCu2QuPointPen.__init__j   sQ   € õ 	Ô& tÑ,Ô,Ð,Øð 	'Ý-¨oÑ>Ô>ˆDŒHˆHà&ˆDŒHØˆŒØˆŒ
Ø*ˆÔÐÐr   c                 óÀ  — t          |¦  «        dk    sJ ‚|d         d         dk    }g }|d         d         }|d         d         }|D �]h\  }}|dk    �r6|                      |¦  «        D �]}|d         \  }	}
}}|d         d         |d         d         }}||||	g}t          || j        | j        ¦  «        }| j        �Et          t          |¦  «        dz
  ¦  «        }| j                             |d¦  «        dz   | j        |<   d„ |dd…         D ¦   «         }|                     |	|
||f¦  «         | j        st          |¦  «        dk    r|                     d|g¦  «         n|                     d|g¦  «         |d         d         }�Œ�ŒC|                     ||g¦  «         |d         d         }�Œj|r|dd …         |d d…         z   }|  	                    |¦  «         d S )	Nr   r   r7   éÿÿÿÿr(   r   c                 ó   — g | ]}|d di f‘Œ	S )FN© )Ú.0Úpts     r   ú
<listcomp>z/Cu2QuPointPen._flushContour.<locals>.<listcomp>‹   s!   € Ð!MÐ!MÐ!M¸B 2 u¨d°BÐ"7Ð!MÐ!MÐ!Mr   r9   )
r!   Ú_split_super_bezier_segmentsr   r   r   r   r    r"   ÚappendÚ_drawPoints)r   ÚsegmentsÚclosedÚnew_segmentsÚprev_pointsÚprev_on_curveÚsegment_typer-   Ú
sub_pointsÚon_curveÚsmoothÚnameÚkwargsÚbcp1Úbcp2ÚcubicÚquadr*   Ú
new_pointss                      r   Ú_flushContourzCu2QuPointPen._flushContour{   s   € Ý�8‰}Œ} Ò!Ð!Ð!Ð!Ø˜!”˜Q” 6Ò)ˆØˆØ˜r”l 1”oˆØ# Bœ¨Ô*ˆØ$,ð 	.ñ 	.Ñ ˆL˜&Ø˜wÒ&Ñ&Ø"&×"CÒ"CÀFÑ"KÔ"Kð 6ñ 6�JØ5?À´^Ñ2�H˜f d¨FØ!+¨A¤¨qÔ!1°:¸a´=ÀÔ3C˜$�DØ*¨D°$¸ÐA�EÝ-¨e°T´\À4ÔCUÑVÔV�DØ”zÐ-Ý¥ D¡	¤	¨A¡Ñ.Ô.˜Ø(,¬
¯ª°q¸!Ñ(<Ô(<¸qÑ(@˜œ
 1™Ø!MÐ!MÀ$ÀqÈÀtÄ*Ð!MÑ!MÔ!M�JØ×%Ò% x°¸¸vÐ&FÑGÔGÐGØÔ)ð C­S°©_¬_ÀÒ-AÐ-AØ$×+Ò+¨X°zÐ,BÑCÔCÐCÐCà$×+Ò+¨W°jÐ,AÑBÔBÐBØ$.¨r¤N°1Ô$5�M‘Mñ6ð  ×#Ò# \°6Ð$:Ñ;Ô;Ð;Ø & r¤
¨1¤�‘Øð 	Að (¨¨¨Ô,¨|¸C¸R¸CÔ/@Ñ@ˆLØ×Ò˜Ñ&Ô&Ð&Ð&Ð&r   c                 ó  — g }t          |¦  «        dz
  }|dk    r|                     |¦  «         nÖ|dk    r¾|d         \  }}}}|dz
  }t          t          d„ |D ¦   «         ¦  «        ¦  «        D ]„\  }	}
g }|
d d…         D ]}|                     |dd i f¦  «         Œ|	|dz
  k    r|                     ||||f¦  «         n|                     |
d         dd i f¦  «         |                     |¦  «         Œ…nt	          d|z  ¦  «        ‚|S )Nr   r   r>   c                 ó   — g | ]	\  }}}}|‘Œ
S r@   r@   )rA   rB   Ú_s      r   rC   z>Cu2QuPointPen._split_super_bezier_segments.<locals>.<listcomp>¨   s    € Ð,JÐ,JÐ,J±K°B¸¸1¸a¨RÐ,JÐ,JÐ,Jr   FTz$expected 2 control points, found: %d)r!   rE   Ú	enumerater   ÚAssertionError)r   r-   Úsub_segmentsr*   rN   rO   rP   rQ   Únum_sub_segmentsÚirM   Únew_segmentÚpoints                r   rD   z*Cu2QuPointPen._split_super_bezier_segmentsœ   s^  € Øˆå�‰KŒK˜!‰OˆØ�Š6ˆ6à×Ò Ñ'Ô'Ð'Ð'Ø�ŠUˆUà-3°B¬ZÑ*ˆH�f˜d FØ  1™uÐÝ!*Ý+Ð,JÐ,JÀ6Ð,JÑ,JÔ,JÑKÔKñ"ô "ð 1ð 1‘��:ð !�Ø'¨¨¨œ_ð Að A�EØ×&Ò&¨¨u°d¸BÐ'?Ñ@Ô@Ð@Ð@ØÐ)¨AÑ-Ò.Ð.à×&Ò&¨°&¸$ÀÐ'GÑHÔHÐHÐHð  ×&Ò&¨
°2¬¸¸dÀBÐ'GÑHÔHÐHØ×#Ò# KÑ0Ô0Ð0Ð0ð1õ !Ð!GÈ!Ñ!KÑLÔLÐLØÐr   c           
      ó>  — | j         }|                     ¦   «          g }| j        }t          |¦  «        D ]¹\  }\  }}||v rœ||         \  }}	 |	t	          |¦  «        |¦  «        s J d|›d|› dt	          |¦  «        › �¦   «         ‚|d d…         }
|dk    r|
}n|
D ]\  }}}} |j        |d ||fi |¤Ž Œ|d         \  }}}}|€	|dk    sJ ‚Œ– |j        ||||fi |¤Ž Œ¨t          d|z  ¦  «        ‚|D ]\  }}}} |j        |d ||fi |¤Ž Œ|                     ¦   «          d S )Nzillegal z segment point count: expected z, got r>   r   r9   zunexpected segment type: %r)r;   Ú	beginPathÚ_Cu2QuPointPen__points_requiredr[   r!   ÚaddPointr\   ÚendPath)r   rG   r;   Úlast_offcurvesÚpoints_requiredr_   rL   r-   r*   ÚopÚ	offcurvesrB   rO   rP   rQ   s                  r   rF   zCu2QuPointPen._drawPoints¸   sÌ  € ØŒhˆØ�Š‰ŒˆØˆØÔ0ˆÝ)2°8Ñ)<Ô)<ð 	Sð 	SÑ%ˆAÑ%�˜fØ˜Ð.Ð.Ø'¨Ô5‘��2Ø�r�#˜f™+œ+ qÑ)Ô)ð ð ð7˜|ð 7ð 7Ø !ð7ð 7Ý),¨V©¬ð7ð 7ñô ð ð # 3 B 3œK�	Ø˜’6�6ð &/�N�Nà4=ð Gð GÑ0˜˜F D¨&Ø$˜œ R¨¨v°tÐFÐF¸vÐFÐFÐFÐFØ+1°"¬:Ñ(��F˜D &Ø�:Ø'¨8Ò3Ð3Ð3Ð3ð à �C”L  \°6¸4ÐJÐJÀ6ÐJÐJÐJÐJå$Ð%BÀ\Ñ%QÑRÔRÐRØ(6ð 	;ð 	;Ñ$ˆB�˜˜fØˆCŒL˜˜T 6¨4Ð:Ð:°6Ð:Ð:Ð:Ð:Ø�Š‰Œˆˆˆr   c                 óN   — | j         �J ‚| j                             ||¦  «         d S r   )ÚcurrentPathr;   ÚaddComponent)r   ÚbaseGlyphNameÚtransformations      r   rm   zCu2QuPointPen.addComponentÛ   s/   € ØÔÐ'Ð'Ð'ØŒ×Ò˜m¨^Ñ<Ô<Ð<Ð<Ð<r   r/   )r0   r1   r2   r3   ÚoperatorÚeqÚgerd   r   rW   rD   rF   rm   r@   r   r   r6   r6   S   s²   € € € € € ðð ð  �H”KÐ Ø�H”KÐ Ø�h”kÐ"Ø�X”[Ð!ð	ð Ðð  ØØð+ð +ð +ð +ð"'ð 'ð 'ðBð ð ð8!ð !ð !ðF=ð =ð =ð =ð =r   r6   c                   ó\   — e Zd ZdZd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S )ÚCu2QuMultiPena  A filter multi-pen to convert cubic bezier curves to quadratic b-splines
    in a interpolation-compatible manner, using the FontTools SegmentPen protocol.

    Args:

        other_pens: list of SegmentPens used to draw the transformed outlines.
        max_err: maximum approximation error in font units. For optimal results,
            if you know the UPEM of the font, we recommend setting this to a
            value equal, or close to UPEM / 1000.
        reverse_direction: flip the contours' direction but keep starting point.

    This pen does not follow the normal SegmentPen protocol. Instead, its
    moveTo/lineTo/qCurveTo/curveTo methods take a list of tuples that are
    arguments that would normally be passed to a SegmentPen, one item for
    each of the pens in other_pens.
    Fc                 óZ   — |rd„ |D ¦   «         }|| _         || _        d | _        d | _        d S )Nc                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS )T)ÚoutputImpliedClosingLiner   )rA   r;   s     r   rC   z*Cu2QuMultiPen.__init__.<locals>.<listcomp>÷   s5   € ð ð ð àõ " #ÀÐEÑEÔEðð ð r   )Úpensr   Ú	start_ptsÚcurrent_pts)r   Ú
other_pensr   r   s       r   r   zCu2QuMultiPen.__init__õ   sM   € Øð 	ðð à%ðñ ô ˆJð ˆŒ	ØˆŒØˆŒØˆÔÐÐr   c                 ó2   — | j         €t          d¦  «        ‚d S )NzmoveTo is required©rz   r\   ©r   s    r   Ú_check_contour_is_openz$Cu2QuMultiPen._check_contour_is_open   s"   € ØÔÐ#Ý Ð!5Ñ6Ô6Ð6ð $Ð#r   c                 ó2   — | j         �t          d¦  «        ‚d S )Nz closePath or endPath is requiredr}   r~   s    r   Ú_check_contour_is_closedz&Cu2QuMultiPen._check_contour_is_closed  s"   € ØÔÐ'Ý Ð!CÑDÔDÐDð (Ð'r   c                 óz   — | j         �3t          | j         | j        ¦  «        D ]\  }} |j        |Ž  Œd | _         d S d S r   )ry   Úziprx   ÚmoveTo)r   rB   r;   s      r   Ú_add_moveTozCu2QuMultiPen._add_moveTo  sM   € ØŒ>Ð%Ý˜tœ~¨t¬yÑ9Ô9ð  ð  ‘��CØ�”
˜B���Ø!ˆDŒNˆNˆNð &Ð%r   c                 ór   — |                       ¦   «          |x| _        | _        |                      ¦   «          d S r   )r�   ry   rz   r…   )r   Úptss     r   r„   zCu2QuMultiPen.moveTo  s;   € Ø×%Ò%Ñ'Ô'Ð'Ø,/Ð/ˆŒ˜Ô)Ø×ÒÑÔÐÐÐr   c                 ó®   — |                       ¦   «          |                      ¦   «          t          || j        ¦  «        D ]\  }} |j        |Ž  Œ|| _        d S r   )r   r…   rƒ   rx   ÚlineTorz   )r   r‡   rB   r;   s       r   r‰   zCu2QuMultiPen.lineTo  sb   € Ø×#Ò#Ñ%Ô%Ð%Ø×ÒÑÔÐÝ˜3 ¤	Ñ*Ô*ð 	ð 	‰GˆB�ØˆCŒJ˜ˆOˆOˆOØˆÔÐÐr   c                 ó^  — |                       ¦   «          t          |d         ¦  «        dk    r!|                      d„ |D ¦   «         ¦  «         d S |                      ¦   «          g }t	          || j        ¦  «        D ]+\  }} |j        |Ž  |                     |d         f¦  «         Œ,|| _        d S )Nr   r   c                 ó    — g | ]}|d          f‘ŒS )r   r@   )rA   r-   s     r   rC   z*Cu2QuMultiPen.qCurveTo.<locals>.<listcomp>  s   € Ð?Ð?Ð?¨&˜& œ)˜Ð?Ð?Ð?r   r>   )	r   r!   r‰   r…   rƒ   rx   r#   rE   rz   )r   Ú
pointsListrz   r-   r;   s        r   r#   zCu2QuMultiPen.qCurveTo  sÁ   € Ø×#Ò#Ñ%Ô%Ð%Ýˆz˜!Œ}ÑÔ Ò"Ð"Ø�KŠKÐ?Ð?°JÐ?Ñ?Ô?Ñ@Ô@Ð@ØˆFØ×ÒÑÔÐØˆÝ˜z¨4¬9Ñ5Ô5ð 	.ð 	.‰KˆF�CØˆCŒL˜&Ð!Ð!Ø×Ò  r¤
˜}Ñ-Ô-Ð-Ð-Ø&ˆÔÐÐr   c                 ó.  — g }t          | j        |¦  «        D ]\  }}|                     ||z   ¦  «         Œt          || j        gt          |¦  «        z  ¦  «        }g }|D ]}|                     |dd …         ¦  «         Œ |                      |¦  «         d S )Nr   )rƒ   rz   rE   r   r   r!   r#   )r   rŒ   Úcurvesr   r-   Ú
quadraticsÚ	quadratics          r   Ú_curves_to_quadraticz"Cu2QuMultiPen._curves_to_quadratic&  s«   € ØˆÝ"% dÔ&6¸
Ñ"CÔ"Cð 	/ð 	/ÑˆJ˜Ø�MŠM˜* vÑ-Ñ.Ô.Ð.Ð.Ý(¨°$´,°Å#ÀfÁ+Ä+Ñ1MÑNÔNˆ
Øˆ
Ø#ð 	-ð 	-ˆIØ×Ò˜i¨¨¨œmÑ,Ô,Ð,Ð,Ø�Š�jÑ!Ô!Ð!Ð!Ð!r   c                 óX   — |                       ¦   «          |                      |¦  «         d S r   )r   r‘   )r   rŒ   s     r   r$   zCu2QuMultiPen.curveTo0  s.   € Ø×#Ò#Ñ%Ô%Ð%Ø×!Ò! *Ñ-Ô-Ð-Ð-Ð-r   c                 ó”   — |                       ¦   «          | j        €| j        D ]}|                     ¦   «          Œd x| _        | _        d S r   )r   ry   rx   Ú	closePathrz   ©r   r;   s     r   r”   zCu2QuMultiPen.closePath4  sO   € Ø×#Ò#Ñ%Ô%Ð%ØŒ>Ð!Ø”yð  ð  �Ø—’‘”��Ø,0Ð0ˆÔ˜4œ>˜>˜>r   c                 ó”   — |                       ¦   «          | j        €| j        D ]}|                     ¦   «          Œd x| _        | _        d S r   )r   ry   rx   rf   rz   r•   s     r   rf   zCu2QuMultiPen.endPath;  sO   € Ø×#Ò#Ñ%Ô%Ð%ØŒ>Ð!Ø”yð ð �Ø—’‘”��Ø,0Ð0ˆÔ˜4œ>˜>˜>r   c                 ó�   — |                       ¦   «          t          || j        ¦  «        D ]\  }}|                     ||¦  «         Œd S r   )r�   rƒ   rx   rm   )r   Ú	glyphNameÚtransformationsÚtransr;   s        r   rm   zCu2QuMultiPen.addComponentB  sV   € Ø×%Ò%Ñ'Ô'Ð'Ý˜o¨t¬yÑ9Ô9ð 	/ð 	/‰JˆE�3Ø×Ò˜Y¨Ñ.Ô.Ð.Ð.ð	/ð 	/r   N)F)r0   r1   r2   r3   r   r   r�   r…   r„   r‰   r#   r‘   r$   r”   rf   rm   r@   r   r   rt   rt   à   sÚ   € € € € € ðð ð(	 ð 	 ð 	 ð 	 ð7ð 7ð 7ðEð Eð Eð"ð "ð "ðð ð ð
ð ð ð
'ð 
'ð 
'ð"ð "ð "ð.ð .ð .ð1ð 1ð 1ð1ð 1ð 1ð/ð /ð /ð /ð /r   rt   )rp   ÚfontTools.cu2qur   r   ÚfontTools.pens.basePenr   ÚfontTools.pens.filterPenr   Ú fontTools.pens.reverseContourPenr   ÚfontTools.pens.pointPenr	   r
   r   r6   rt   r@   r   r   ú<module>r       s  ðð €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ >Ð >Ð >Ð >Ð >Ð >Ø .Ð .Ð .Ð .Ð .Ð .Ø >Ð >Ð >Ð >Ð >Ð >Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø :Ð :Ð :Ð :Ð :Ð :ð8#ð 8#ð 8#ð 8#ð 8#ˆyñ 8#ô 8#ð 8#ðvJ=ð J=ð J=ð J=ð J=Ð)ñ J=ô J=ð J=ðZe/ð e/ð e/ð e/ð e/ñ e/ô e/ð e/ð e/ð e/r   