ó
    oñ:iÈ1  ã                   ó,  • S r SSKrSSKrSSKJrJr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	KJrJr  SS
KJr  SSKJr  SSKrS/r " S S\5      r\R8                  " S5      r\\\R>                  4   r S\S\ S\RB                  4S jr"S\RF                  S\ 4S jr$S\RJ                  S\ S\&4S jr'S\RB                  S\RJ                  4S jr(S\RB                  S\S\4S jr)\4S\RB                  S\\*/\*4   S\RB                  4S jjr+\S.S\RB                  S\S\\*/\*4   S\RB                  4S  jjr,S!\RB                  S"\RB                  S\&4S# jr- S6S\S\ S%\R\                  S&\R^                  S'\&S\&4S( jjr0S)\Rb                  S*\\   S\ S'\&S+\&SS4S, jr2S\S\ S-\	S\&4S. jr3S$S/.S)\Rb                  S*\\   S\ S'\&S+\&S0\S1\&SS4S2 jjr4   S7S$S/.S)\Rb                  S*\\\      S'\&S+\&S1\&SS4S3 jjjr5S8S4 jr6\7S5:X  a  \6" 5         gg)9zySimplify TrueType glyphs by merging overlapping contours/components.

Requires https://github.com/fonttools/skia-pathops
é    N)ÚCallableÚIterableÚOptionalÚMapping)Ú
CFFFontSet)ÚttFont)Ú_g_l_y_f)Ú_h_m_t_x)ÚT2CharString)ÚotRoundÚnoRound)Ú
TTGlyphPen)ÚT2CharStringPenÚremoveOverlapsc                   ó   • \ rS rSrSrg)ÚRemoveOverlapsErroré   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Úa/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/ttLib/removeOverlaps.pyr   r      s   † Úr   r   zfontTools.ttLib.removeOverlapsÚ	glyphNameÚglyphSetÚreturnc                 ót   • [         R                  " 5       nUR                  US9nX   R                  U5        U$ )N©r   )ÚpathopsÚPathÚgetPenÚdraw)r   r   ÚpathÚpathPens       r   ÚskPathFromGlyphr'   "   s3   € Ü�<Š<‹>€DØ�k‰k 8ˆkÐ,€GØÑ×Ñ˜WÔ%Ø€Kr   Ú	componentc                 óZ   • U R                  5       u  p#[        X!5      nUR                  " U6 $ ©N)ÚgetComponentInfor'   Ú	transform)r(   r   ÚbaseGlyphNameÚtransformationr%   s        r   ÚskPathFromGlyphComponentr/   )   s.   € ð %.×$>Ñ$>Ó$@Ñ!€MÜ˜=Ó3€DØ�>Š>˜>Ð*Ð*r   Úglyphc           
      óN  ^ ^^^• T R                  5       (       d  [        S5      e[        T R                  5      S:  a  g0 mS[        S[
        R                  4UU U4S jjm[        U4S j[        R                  " [        [        T R                  5      5      S5       5       5      $ )Nz5This method only works with TrueType composite glyphsé   FÚindexr   c                 óR   >• U T;  a  [        TR                  U    T5      TU '   TU    $ r*   )r/   Ú
components)r3   Úcomponent_pathsr0   r   s    €€€r   Ú_get_nth_component_pathÚ2componentsOverlap.<locals>._get_nth_component_path9   s7   ø€ Ø˜Ó'Ü%=Ø× Ñ  Ñ'¨ó&ˆO˜EÑ"ð ˜uÑ%Ð%r   c           	   3   ó    >#   • U  HC  u  p[         R                  " T" U5      T" U5      [         R                  R                  S S S9v •  ME     g7f)F)Úfix_windingÚkeep_starting_pointsN)r!   ÚopÚPathOpÚINTERSECTION)Ú.0ÚiÚjr7   s      €r   Ú	<genexpr>Ú$componentsOverlap.<locals>.<genexpr>@   sL   øé € ð 	ò L‰DˆAô 	�
Š
Ù# AÓ&Ù# AÓ&Ü�N‰N×'Ñ'ØØ!&ö	
ò Lùs   ƒAA)ÚisCompositeÚ
ValueErrorÚlenr5   Úintr!   r"   ÚanyÚ	itertoolsÚcombinationsÚrange)r0   r   r7   r6   s   ``@@r   ÚcomponentsOverlaprL   1   s�   û€ Ø×Ñ×ÑÜÐPÓQÐQÜ
ˆ5×ÑÓ˜qÓ Øà€Oð&¤sð &¬w¯|©|÷ &ñ &ô ô 	ô ×*Ò*¬5´°U×5EÑ5EÓ1FÓ+GÈÔKó	ó 	ð 	r   r%   c                 ó¦   • [        S S9nU R                  U5        UR                  5       nUR                  5       (       a   eUR	                  S S9  U$ )Nr    )Ú	glyfTable)r   r$   r0   rD   ÚrecalcBounds)r%   ÚttPenr0   s      r   ÚttfGlyphFromSkPathrQ   L   sN   € ä Ñ%€EØ‡I�IˆeÔØ�K‰K‹M€EØ× Ñ ×"Ñ"Ð"Ð"à	×Ñ ÐÑ&Ø€Lr   Ú
charStringc                 ó  • UR                   UR                  R                  :X  a  S nO#UR                   UR                  R                  -
  n[	        US S9nU R                  U5        UR                  UR                  UR                  5      $ )N)Úwidthr   )rT   ÚprivateÚdefaultWidthXÚnominalWidthXr   r$   ÚgetCharStringÚglobalSubrs)r%   rR   rT   Út2Pens       r   Ú_charString_from_SkPathr[   W   sv   € ð ×Ñ˜:×-Ñ-×;Ñ;Ó;Ø‰à× Ñ  :×#5Ñ#5×#CÑ#CÑCˆÜ %°$Ñ7€EØ‡I�IˆeÔØ×Ñ˜z×1Ñ1°:×3IÑ3IÓJÐJr   Úroundc                 ó‚   ^• [         R                  " 5       nU  H"  u  p4UR                  " U/U4S jU 5       Q76   M$     U$ )Nc              3   óP   >#   • U  H  nT" US    5      T" US   5      4v •  M     g7f)r   é   Nr   )r?   Úpr\   s     €r   rB   Ú_round_path.<locals>.<genexpr>h   s&   øé € Ð LÂVÀ¡%¨¨!©£+©u°Q°q±T«{Õ!;ÂVùs   ƒ#&)r!   r"   Úadd)r%   r\   Úrounded_pathÚverbÚpointss    `   r   Ú_round_pathrf   c   s;   ø€ ô —<’<“>€LÛ‰ˆØ×Ò˜ÐMÔ LÁVÓ LÕMñ àÐr   ©r\   ÚdebugGlyphNamec                ó¼  •  [         R                  " X R                  S9$ ! [         R                   a     Of = f[	        XS9n  [         R                  " X R                  S9n [
        R                  SU5        U $ ! [         R                   aM  n[
        R                  [        R                  5      (       a  U R                  5         [        SU< 35      UeS nAff = f)N)Ú	clockwiserg   zkskia-pathops failed to simplify '%s' with float coordinates, but succeded using rounded integer coordinatesz%Failed to remove overlaps from glyph )r!   Úsimplifyrj   ÚPathOpsErrorrf   ÚlogÚdebugÚisEnabledForÚloggingÚDEBUGÚdumpr   ÚAssertionError)r%   rh   r\   Úes       r   Ú	_simplifyru   l   sÃ   € ðÜ×Ò ·±Ñ?Ð?øÜ×Ñó Ùðúô �tÑ)€DðÜ×Ò ·±Ñ?ˆÜ�	‰	ð=àô	
ð
 ˆøÜ×Ñó Ü×ÑœGŸM™M×*Ñ*Ø�I‰IŒKÜ!Ø3°NÑ3EÐFó
àð	ûðús%   ‚   7¶7Á5A: Á:CÂACÃCÚpath1Úpath2c                 ó°   • U R                    Vs1 s H  n[        U5      iM     snUR                    Vs1 s H  n[        U5      iM     sn:H  $ s  snf s  snf r*   )ÚcontoursÚtuple)rv   rw   Úcs      r   Ú
_same_pathr|   “   sA   € Ø#ŸnšnÓ-šn˜ŒE�!ŽH™nÑ-ÀEÇNÂNÓ1SÂN¸q´%¸¶(ÁNÑ1SÑSÐSùÒ-ùÒ1Ss
   �A´ATrN   Ú	hmtxTableÚremoveHintingc                 ó~  • X    nUR                   S:”  d%  UR                  5       (       a}  [        XQ5      (       am  [        X5      n[	        X`5      n[        Xg5      (       dG  [        U5      =X '   nUR                  (       a   eX0   u  p‰X•R                  :w  a  X…R                  4X0'   gU(       a  UR                  5         g)Nr   TF)
ÚnumberOfContoursrD   rL   r'   ru   r|   rQ   ÚprogramÚxMinr~   )
r   r   rN   r}   r~   r0   r%   rw   rT   Úlsbs
             r   ÚremoveTTGlyphOverlapsr„   —   s°   € ð Ñ €Eð 	×Ñ Ó"Ø×Ñ×ÑÜ˜e×.Ñ.ä˜yÓ3ˆô ˜$Ó*ˆô ˜$×&Ñ&Ü+=¸eÓ+DÐDˆIÑ  5à—}—}Ð$Ð$à"Ñ-‰JˆEØ—j‘jÓ Ø(-¯z©zÐ':�	Ñ$ØæØ×ÑÔØr   ÚfontÚ
glyphNamesÚignoreErrorsc                 ód  ^• U S   mU S   n[        UU4S jS9n[        5       nU H)  n [        XrTXS5      (       a  UR                  U5        M)  M+     [
        R                  S[        U5      SR                  U5      5        g ! [         a"    U(       d  e [
        R                  SU5         Mˆ  f = f)NÚglyfÚhmtxc                 ó|   >• TU    R                  5       (       a   TU    R                  T5      R                  U 4$ SU 4$ )Nr   )rD   ÚgetCompositeMaxpValuesÚmaxComponentDepth)ÚnamerN   s    €r   Ú<lambda>Ú'_remove_glyf_overlaps.<locals>.<lambda>Ê   sI   ø€ ð ˜T‘?×.Ñ.×0Ñ0ð ˜$‘×6Ñ6°yÓA×SÑSð ñ
ð àñ
r   )Úkeyú"Failed to remove overlaps for '%s'ú"Removed overlaps for %s glyphs:
%sÚ )
ÚsortedÚsetr„   rb   r   rm   Úerrorrn   rF   Újoin)	r…   r†   r   r~   r‡   r}   Úmodifiedr   rN   s	           @r   Ú_remove_glyf_overlapsrš   º   s³   ø€ ð �V‘€IØ�V‘€Iô
 Øô
ñ
€Jô ‹u€HÛˆ	ð	GÜ$Ø Y°	÷ñ ð —‘˜YÖ'ññ  ô ‡I�IÐ3´S¸³]ÀCÇHÁHÈXÓDVÕWøô #ó 	GÞØÜ�I‰IÐ:¸I×Fð	Gús   ª#BÂ(B/Â.B/Ú
cffFontSetc                 ó–   • [        X5      n[        X0[        S9n[        X45      (       d   US   R                  n[        XEU    5      XP'   gg)Nrg   r   TF)r'   ru   r   r|   ÚCharStringsr[   )r   r   r›   r%   rw   ÚcharStringss         r   Ú_remove_charstring_overlapsrŸ   â   sP   € ô ˜9Ó/€Dô �d¬WÑ5€Eô �d×"Ñ"Ø  ‘m×/Ñ/ˆÜ!8¸ÈIÑ@VÓ!WˆÑØàr   )ÚremoveUnusedSubroutinesÚ	table_tagr    c                 óà  • X   R                   n[        5       nU H'  n	 [        U	UUS9(       a  UR                  U	5        M'  M)     U(       d  [
        R                  S5        g U(       a  UR                  5         U(       a  UR                  5         [
        R                  S[        U5      SR                  U5      5        g ! [         a"    U(       d  e [
        R                  SU	5         MÑ  f = f)N)r   r   r›   r’   z-No overlaps found in the specified CFF glyphsr“   r”   )Úcffr–   rŸ   rb   r   rm   r—   rn   Úremove_hintsÚremove_unused_subroutinesrF   r˜   )
r…   r†   r   r~   r‡   r¡   r    r›   r™   r   s
             r   Ú_remove_cff_overlapsr¦   ö   sÅ   € ð ‘×$Ñ$€JÜ‹u€HÛˆ	ð
	GÜ*Ø#Ø!Ø%÷ð
 —‘˜YÖ'ññ  ö Ü�	‰	ÐAÔBØæØ×ÑÔ!æØ×,Ñ,Ô.ä‡I�IÐ3´S¸³]ÀCÇHÁHÈXÓDVÕWøô #ó 	GÞØÜ�I‰IÐ:¸I×Fð	Gús   Ÿ!CÃ(C-Ã,C-c          
      óò   • SU ;  a  SU ;  a  SU ;  a  [        S5      eUc  U R                  5       nU R                  5       nSU ;   a  [        U UUUUS9  SU ;   d  SU ;   a  [	        U UUUUSU ;   a  SOSUS9  gg)aJ  Simplify glyphs in TTFont by merging overlapping contours.

Overlapping components are first decomposed to simple contours, then merged.

Currently this only works for fonts with 'glyf' or 'CFF ' tables.
Raises NotImplementedError if 'glyf' or 'CFF ' tables are absent.

Note that removing overlaps invalidates the hinting. By default we drop hinting
from all glyphs whether or not overlaps are removed from a given one, as it would
look weird if only some glyphs are left (un)hinted.

Args:
    font: input TTFont object, modified in place.
    glyphNames: optional iterable of glyph names (str) to remove overlaps from.
        By default, all glyphs in the font are processed.
    removeHinting (bool): set to False to keep hinting for unmodified glyphs.
    ignoreErrors (bool): set to True to ignore errors while removing overlaps,
        thus keeping the tricky glyphs unchanged (fonttools/fonttools#2363).
    removeUnusedSubroutines (bool): set to False to keep unused subroutines
        in CFF table after removing overlaps. Default is to remove them if
        any glyphs are modified.
r‰   zCFF ÚCFF2zJNo outline data found in the font: missing 'glyf', 'CFF ', or 'CFF2' tableN)r…   r†   r   r~   r‡   )r…   r†   r   r~   r‡   r¡   r    )ÚNotImplementedErrorÚgetGlyphOrderÚgetGlyphSetrš   r¦   )r…   r†   r~   r‡   r    r   s         r   r   r     s§   € ð> �TÓ˜f¨DÓ0°VÀ4Ó5GÜ!ØXó
ð 	
ð ÑØ×'Ñ'Ó)ˆ
ð ×ÑÓ!€Hà�ƒ~ÜØØ!ØØ'Ø%ò	
ð �ƒ~˜ 4›ÜØØ!ØØ'Ø%Ø &¨$£‘f°FØ$;ó	
ð (r   c           	      ó^  • SSK nUR                  S[        S9nUR                  SSSS9  UR                  S	S
SS9  UR                  SSSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR	                  U 5      n [
        R                  " U R                  5       n[        UU R                  =(       d    SU R                  (       + U R                  U R                  (       + S9  UR                  U R                  5        SSS5        g! , (       d  f       g= f)z:Simplify glyphs in TTFont by merging overlapping contours.r   Nzfonttools ttLib.removeOverlaps)ÚdescriptionÚinputz	INPUT.ttfzInput font file)ÚmetavarÚhelpÚoutputz
OUTPUT.ttfzOutput font fileÚglyphsÚGLYPHSÚ*z4Optional list of glyph names to remove overlaps from)r¯   Únargsr°   z--keep-hintingÚ
store_truez>Keep hinting for unmodified glyphs, default is to drop hinting)Úactionr°   z--ignore-errorszOignore errors while removing overlaps, thus keeping the tricky glyphs unchangedz--keep-unused-subroutineszrKeep unused subroutines in CFF table after removing overlaps, default is to remove them if any glyphs are modified)r…   r†   r~   r‡   r    )ÚargparseÚArgumentParserÚ__doc__Úadd_argumentÚ
parse_argsr   ÚTTFontr®   r   r²   Úkeep_hintingÚignore_errorsÚkeep_unused_subroutinesÚsaver±   )Úargsr¸   Úparserr…   s       r   ÚmainrÄ   [  sF  € ó à×$Ñ$Ø(´gð %ð €Fð ×Ñ˜¨Ð;LÐÑMØ
×Ñ˜¨,Ð=OÐÑPØ
×ÑØØØØCð	 ñ ð ×ÑØØØMð ñ ð
 ×ÑØØð3ð ñ ð ×ÑØ#Øð?ð ñ ð ×Ñ˜TÓ"€Dä	�Š�t—z‘zÔ	" dÜØØ—{‘{×* dØ"×/Ñ/Ô/Ø×+Ñ+Ø(,×(DÑ(DÔ$Dò	
ð 	�	‰	�$—+‘+Ô÷ 
#×	"Ö	"ús   Â1A$DÄ
D,Ú__main__)T)NTFr*   )8rº   rI   rp   Útypingr   r   r   r   ÚfontTools.cffLibr   ÚfontTools.ttLibr   ÚfontTools.ttLib.tablesr	   r
   ÚfontTools.misc.psCharStringsr   ÚfontTools.misc.roundToolsr   r   ÚfontTools.pens.ttGlyphPenr   ÚfontTools.pens.t2CharStringPenr   r!   Ú__all__Ú	Exceptionr   Ú	getLoggerrm   ÚstrÚ_TTGlyphÚ_TTGlyphMappingr"   r'   ÚGlyphComponentr/   ÚGlyphÚboolrL   rQ   r[   Úfloatrf   ru   r|   Útable__g_l_y_fÚtable__h_m_t_xr„   r½   rš   rŸ   r¦   r   rÄ   r   r   r   r   Ú<module>rÚ      sQ  ðñó
 Û ß 8Ó 8å 'Ý "Ý +Ý +Ý 5ß 6Ý 0Ý :ã ð Ð
€ô	˜)ô 	ð ×ÒÐ8Ó9€à˜#˜vŸ™Ð.Ñ/€ð˜sð ¨oð À'Ç,Á,ô ð+Ø×&Ñ&ð+Ø2Aô+ð˜XŸ^™^ð °ð È4ô ð6˜WŸ\™\ð ¨h¯n©nô ð	KØ
�,‰,ð	KØ$0ð	Kàô	Kð ;BñØ
�,‰,ðØ'¨¨°¨Ñ7ðà‡\�\õð '.ò	$(Ø
�,‰,ð$(àð$(ð �U�G˜U�NÑ#ð	$(ð
 ‡\�\õ$(ðNT�g—l‘lð T¨7¯<©<ð T¸Dô Tð ñ Øð àð ð ×&Ñ&ð ð ×&Ñ&ð	 ð
 ð ð 
õ ðF%Xà
�-‰-ð%Xð ˜‘ð%Xð ð	%Xð
 ð%Xð ð%Xð 
ô%XðPàðð ðð ð	ð
 
ôð8 %)ò#Xà
�-‰-ð#Xð ˜‘ð#Xð ð	#Xð
 ð#Xð ð#Xð ð#Xð "ð#Xð 
õ#XðP +/ØØð	<
ð %)ò<
Ø
�-‰-ð<
à˜ #™Ñ'ð<
ð ð<
ð ð	<
ð "ð<
ð 
ö<
ô~,ð^ ˆzÓÙ…Fð r   