ó
    oñ:iÏ2  ã                   ó˜   • S SK r S SKJrJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SK
Jr   " S S	\5      r " S
 S\5      r " S S5      rg)é    N)Úcurve_to_quadraticÚcurves_to_quadratic)ÚdecomposeSuperBezierSegment)Ú	FilterPen)ÚReverseContourPen)ÚBasePointToSegmentPen)ÚReverseContourPointPenc                   óH   ^ • \ rS rSrSr   SU 4S jjrU 4S jrS rSrU =r	$ )ÚCu2QuPené   aÙ  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.
c                 ól   >• U(       a  [        U5      n[        TU ]	  U5        X l        X@l        XPl        g ©N)r   ÚsuperÚ__init__Úmax_errÚstatsÚall_quadratic)ÚselfÚ	other_penr   Úreverse_directionr   r   Ú	__class__s         €ÚZ/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/pens/cu2quPen.pyr   ÚCu2QuPen.__init__)   s/   ø€ ö Ü)¨)Ó4ˆIÜ‰Ñ˜Ô#ØŒØŒ
Ø*Õó    c                 óÒ  >• U R                   XU4n[        X@R                  U R                  5      nU R                  bC  [        [        U5      S-
  5      nU R                  R                  US5      S-   U R                  U'   U R                  (       a  U R                  " USS  6   g [        U5      S:X  a  U R                  " USS  6   g [        U5      S:X  d   e[        TU ](  " USS  6   g )Né   r   é   é   é   )Ú
current_ptr   r   r   r   ÚstrÚlenÚgetÚqCurveTor   ÚcurveTo)r   Úpt1Úpt2Úpt3ÚcurveÚresultÚnr   s          €r   Ú_convert_curveÚCu2QuPen._convert_curve8   sÃ   ø€ Ø—‘ #¨CÐ0ˆÜ# E¯<©<¸×9KÑ9KÓLˆØ�:‰:Ñ!Ü”C˜“K !‘OÓ$ˆAØ ŸJ™JŸN™N¨1¨aÓ0°1Ñ4ˆD�J‰J�q‰MØ××Ø�MŠM˜6 ! "˜:Ò&ä�6‹{˜aÓØ—’˜v a b˜zÒ*ä˜6“{ aÓ'Ð'Ð'Ü‘’ ¨¨ Ò,r   c                 ó´   • [        U5      nUS:X  a  U R                  " U6   g US:”  a"  [        U5       H  nU R                  " U6   M     g U R                  " U6   g )Nr   )r"   r,   r   r$   )r   Úpointsr+   Úsegments       r   r%   ÚCu2QuPen.curveToG   sR   € Ü�‹KˆØ�‹6à×Ò Ò(Ø�‹UÜ6°vÖ>�Ø×#Ò# WÓ-ò ?ð �MŠM˜6Ò"r   )r   r   r   ©FNT)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   r%   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      s'   ø† ñð(  ØØ÷+õ-÷	#ð 	#r   r   c                   ó®   • \ rS rSrSrS\R                  4S\R                  4S\R                  4S\R                  4S.r   SS jr	S	 r
S
 rS rS rSrg)ÚCu2QuPointPenéS   aÓ  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)   Nc                 ó�   • [         R                  " U 5        U(       a  [        U5      U l        OXl        X l        X@l        XPl        g r   )r   r   r	   Úpenr   r   r   )r   Úother_point_penr   r   r   r   s         r   r   ÚCu2QuPointPen.__init__j   s6   € ô 	×&Ò& tÔ,ÞÜ-¨oÓ>ˆD�Hà&ŒHØŒØŒ
Ø*Õr   c           	      óR  • [        U5      S:¼  d   eUS   S   S:g  n/ nUS   S   nUS   S   nU GHJ  u  pgUS:X  Ga#  U R                  U5       GH
  nUS   u  pšp¼US   S   US   S   píX]Xé/n[        XðR                  U R                  5      nU R
                  bC  [        [        U5      S-
  5      nU R
                  R                  US5      S-   U R
                  U'   USS  Vs/ s H	  nUSS 0 4PM     nnUR                  XšX¼45        U R                  (       d  [        U5      S:X  a  UR                  SU/5        OUR                  SU/5        US   S   nGM     GM0  UR                  Xg/5        US   S   nGMM     U(       a  USS  US S -   nU R                  U5        g s  snf )	Nr   r   r=   éÿÿÿÿr)   r   Fr?   )
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+   ÚptÚ
new_pointss                       r   Ú_flushContourÚCu2QuPointPen._flushContour{   sÆ  € Ü�8‹} Ó!Ð!Ð!Ø˜!‘˜Q‘ 6Ñ)ˆØˆØ˜r‘l 1‘oˆØ# B™¨Ñ*ˆÜ$,Ñ ˆLØ˜wÔ&Ø"&×"CÑ"CÀF×"K�JØ5?À±^Ñ2�H dØ!+¨A¡¨qÑ!1°:¸a±=ÀÑ3C˜$Ø*°$ÐA�EÜ-¨e·\±\À4×CUÑCUÓV�DØ—z‘zÑ-Ü¤ D£	¨A¡Ó.˜Ø(,¯
©
¯©°q¸!Ó(<¸qÑ(@˜Ÿ
™
 1™ØBFÀqÈÁ*Ó!MÂ*¸B 2 u¨d°BÓ"7Á*�JÐ!MØ×%Ñ% x¸Ð&FÔGØ×)×)¬S°«_ÀÓ-AØ$×+Ñ+¨X°zÐ,BÕCà$×+Ñ+¨W°jÐ,AÔBØ$.¨r¡N°1Ñ$5“Mô #Lð  ×#Ñ# \Ð$:Ô;Ø & r¡
¨1¡“ñ' %-ö( ð (¨¨Ð,¨|¸C¸RÐ/@Ñ@ˆLØ×Ñ˜Õ&ùò "Ns   Ã%F$c                 óÞ  • / n[        U5      S-
  nUS:X  a  UR                  U5        U$ US:”  a«  US   u  pEpgUS-
  n[        [        U V	V
s/ s H	  u  n	    o©PM     sn
n	5      5       Hm  u  p¼/ nUS S  H  nUR                  USS 0 45        M     X¸S-
  :X  a  UR                  XEXg45        OUR                  US   SS 0 45        UR                  U5        Mo     U$ [	        SU-  5      es  sn
n	f )Nr   r   rE   FTz$expected 2 control points, found: %d)r"   rG   Ú	enumerater   ÚAssertionError)r   r/   Úsub_segmentsr+   rP   rQ   rR   rS   Únum_sub_segmentsrX   Ú_ÚirO   Únew_segmentÚpoints                  r   rF   Ú*Cu2QuPointPen._split_super_bezier_segmentsœ   s  € Øˆä�‹K˜!‰OˆØ�‹6à×Ñ Ô'ð( Ðð' �‹Uà-3°B©ZÑ*ˆH˜dØ  1™uÐÜ!*Ü+Á6Ô,JÂ6±K°B¸¸1¸aªRÁ6Ò,JÓKö"‘�ð !�Ø'¨¨›_�EØ×&Ñ&¨¨u°d¸BÐ'?Ö@ñ -à¨AÑ-Ó.à×&Ñ&¨¸$Ð'GÕHð  ×&Ñ&¨
°2©¸¸dÀBÐ'GÔHØ×#Ñ# KÖ0ñ"ð Ðô !Ð!GÈ!Ñ!KÓLÐLùó -Ks   ÁC)c           
      ó,  • U R                   nUR                  5         / nU R                  n[        U5       Hª  u  nu  pgXd;   a‘  XF   u  p‰U	" [	        U5      U5      (       d   SU< SU S[	        U5       35       eUS S n
US:X  a  U
nO!U
 H  u  p¼pÞUR
                  " US XÍ40 UD6  M     US   u  p¼pÞUc
  US:X  d   eMˆ  UR
                  " X¶XÍ40 UD6  Mž  [        SU-  5      e   U H  u  p¼pÞUR
                  " US XÍ40 UD6  M     UR                  5         g )Nzillegal z segment point count: expected z, got rE   r   r?   zunexpected segment type: %r)rA   Ú	beginPathÚ_Cu2QuPointPen__points_requiredr]   r"   ÚaddPointr^   ÚendPath)r   rI   rA   Úlast_offcurvesÚpoints_requiredrb   rN   r/   r+   ÚopÚ	offcurvesrX   rQ   rR   rS   s                  r   rH   ÚCu2QuPointPen._drawPoints¸   sB  € Ø�h‰hˆØ�‰ŒØˆØ×0Ñ0ˆÜ)2°8Ö)<Ñ%ˆAÑ%�ØÓ.Ø'Ñ5‘�Ùœ#˜f›+ q×)Ñ)ð Ø˜|Ñ.ð / Ø !˜s &¬¨V«¨ð7óÐ)ð # 3 B˜K�	Ø˜“6ð &/‘Nã4=Ñ0˜ DØŸš R¨¨vÑF¸vÔFñ 5>à+1°"©:Ñ(�˜DØ‘:Ø'¨8Ó3Ð3Ð3ñ à—L’L °6ÑJÀ6ÔJä$Ð%BÀ\Ñ%QÓRÐRñ3 *=ó4 )7Ñ$ˆB˜Ø�LŠL˜˜T 6Ñ:°6Ô:ñ )7à�‰�r   c                 óX   • U R                   b   eU R                  R                  X5        g r   )ÚcurrentPathrA   ÚaddComponent)r   ÚbaseGlyphNameÚtransformations      r   rr   ÚCu2QuPointPen.addComponentÛ   s&   € Ø×ÑÑ'Ð'Ð'Ø�‰×Ñ˜mÕ<r   )r   r   rA   r   r2   )r3   r4   r5   r6   r7   ÚoperatorÚeqÚgerh   r   rZ   rF   rH   rr   r8   © r   r   r;   r;   S   sg   † ñð  �H—K‘KÐ Ø�H—K‘KÐ Ø�h—k‘kÐ"Ø�X—[‘[Ð!ñ	Ðð  ØØô+ò"'òBò8!õF=r   r;   c                   ód   • \ rS rSrSrSS jrS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)ÚCu2QuMultiPenéà   aï  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.
c                 ó„   • U(       a  U Vs/ s H  n[        USS9PM     nnXl        X l        S U l        S U l        g s  snf )NT)ÚoutputImpliedClosingLine)r   Úpensr   Ú	start_ptsÚcurrent_pts)r   Ú
other_pensr   r   rA   s        r   r   ÚCu2QuMultiPen.__init__õ   sN   € Þñ &óâ%�Cô " #ÀÔEÙ%ð ð ð Œ	ØŒØˆŒØˆÕùòs   Œ=c                 ó4   • U R                   c  [        S5      eg )NzmoveTo is required©r�   r^   ©r   s    r   Ú_check_contour_is_openÚ$Cu2QuMultiPen._check_contour_is_open   s   € Ø×ÑÑ#Ü Ð!5Ó6Ð6ð $r   c                 ó4   • U R                   b  [        S5      eg )Nz closePath or endPath is requiredr…   r†   s    r   Ú_check_contour_is_closedÚ&Cu2QuMultiPen._check_contour_is_closed  s   € Ø×ÑÑ'Ü Ð!CÓDÐDð (r   c                 óž   • U R                   b@  [        U R                   U R                  5       H  u  pUR                  " U6   M     S U l         g g r   )r€   Úzipr   ÚmoveTo)r   rX   rA   s      r   Ú_add_moveToÚCu2QuMultiPen._add_moveTo  s>   € Ø�>‰>Ñ%Ü˜tŸ~™~¨t¯y©yÖ9‘�Ø—
’
˜B“ñ :à!ˆD�Nð &r   c                 ó`   • U R                  5         U=U l        U l        U R                  5         g r   )rŠ   r€   r�   r�   )r   Úptss     r   rŽ   ÚCu2QuMultiPen.moveTo  s)   € Ø×%Ñ%Ô'Ø,/Ð/ˆŒ˜Ô)Ø×ÑÕr   c                 óª   • U R                  5         U R                  5         [        XR                  5       H  u  p#UR                  " U6   M     Xl        g r   )r‡   r�   r�   r   ÚlineTor�   )r   r’   rX   rA   s       r   r•   ÚCu2QuMultiPen.lineTo  s@   € Ø×#Ñ#Ô%Ø×ÑÔÜ˜3§	¡	Ö*‰GˆBØ�JŠJ˜‹Oñ +àÕr   c                 óR  • U R                  5         [        US   5      S:X  a&  U R                  U Vs/ s H  o"S   4PM
     sn5        g U R                  5         / n[	        XR
                  5       H)  u  p$UR                  " U6   UR                  US   45        M+     X0l        g s  snf )Nr   r   rE   )	r‡   r"   r•   r�   r�   r   r$   rG   r�   )r   Ú
pointsListr/   r�   rA   s        r   r$   ÚCu2QuMultiPen.qCurveTo  s•   € Ø×#Ñ#Ô%Üˆz˜!‰}Ó Ó"Ø�K‰K±JÓ?²J¨& ™)›±JÑ?Ô@ØØ×ÑÔØˆÜ˜z¯9©9Ö5‰KˆFØ�LŠL˜&Ñ!Ø×Ñ  r¡
˜}Ö-ñ 6ð 'Õùò @s   ²B$c                 ó  • / n[        U R                  U5       H  u  p4UR                  X4-   5        M     [        X R                  /[        U5      -  5      n/ nU H  nUR                  USS  5        M     U R                  U5        g )Nr   )r�   r�   rG   r   r   r"   r$   )r   r˜   Úcurvesr    r/   Ú
quadraticsÚ	quadratics          r   Ú_curves_to_quadraticÚ"Cu2QuMultiPen._curves_to_quadratic&  sy   € ØˆÜ"% d×&6Ñ&6¸
Ö"CÑˆJØ�M‰M˜*Ñ-Ö.ñ #Dä(¨·,±,°Ä#ÀfÃ+Ñ1MÓNˆ
Øˆ
Û#ˆIØ×Ñ˜i¨¨˜mÖ,ñ $à�‰�jÕ!r   c                 óF   • U R                  5         U R                  U5        g r   )r‡   rž   )r   r˜   s     r   r%   ÚCu2QuMultiPen.curveTo0  s   € Ø×#Ñ#Ô%Ø×!Ñ! *Õ-r   c                 ó    • U R                  5         U R                  c#  U R                   H  nUR                  5         M     S =U l        U l        g r   )r‡   r€   r   Ú	closePathr�   ©r   rA   s     r   r£   ÚCu2QuMultiPen.closePath4  s>   € Ø×#Ñ#Ô%Ø�>‰>Ñ!Ø—y”y�Ø—‘–ñ !à,0Ð0ˆÔ˜4�>r   c                 ó    • U R                  5         U R                  c#  U R                   H  nUR                  5         M     S =U l        U l        g r   )r‡   r€   r   rj   r�   r¤   s     r   rj   ÚCu2QuMultiPen.endPath;  s>   € Ø×#Ñ#Ô%Ø�>‰>Ñ!Ø—y”y�Ø—‘–ñ !à,0Ð0ˆÔ˜4�>r   c                 ó‚   • U R                  5         [        X R                  5       H  u  p4UR                  X5        M     g r   )rŠ   r�   r   rr   )r   Ú	glyphNameÚtransformationsÚtransrA   s        r   rr   ÚCu2QuMultiPen.addComponentB  s1   € Ø×%Ñ%Ô'Ü˜o¯y©yÖ9‰JˆEØ×Ñ˜YÖ.ò :r   )r�   r   r   r€   N)F)r3   r4   r5   r6   r7   r   r‡   rŠ   r�   rŽ   r•   r$   rž   r%   r£   rj   rr   r8   ry   r   r   r{   r{   à   sD   † ñô(	 ò7òEò"òò
ò
'ò"ò.ò1ò1õ/r   r{   )rv   ÚfontTools.cu2qur   r   ÚfontTools.pens.basePenr   ÚfontTools.pens.filterPenr   Ú fontTools.pens.reverseContourPenr   ÚfontTools.pens.pointPenr   r	   r   r;   r{   ry   r   r   Ú<module>r²      sE   ðó ß CÝ >Ý .Ý >Ý 9Ý :ô8#ˆyô 8#ôvJ=Ð)ô J=÷Ze/ò e/r   