Ë
    ^ãjó2  ã                   ó  — d Z ddlZddlZddlmZmZ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 dd	lmZmZ dd
lmZ ddlmZ ddlZdgZ G d„ de«      Z ej8                  d«      Zeeej>                  f   Z dede dejB                  fd„Z"dejF                  de fd„Z$dejJ                  de de&fd„Z'dejB                  dejJ                  fd„Z(dejB                  dedefd„Z)efdejB                  dee*ge*f   dejB                  fd„Z+edœdejB                  dedee*ge*f   dejB                  fd „Z,d!ejB                  d"ejB                  de&fd#„Z-	 d6dede d%ej\                  d&ej^                  d'e&de&fd(„Z0d)ejb                  d*ee   de d'e&d+e&ddfd,„Z2dede d-e	de&fd.„Z3d$d/œd)ejb                  d*ee   de d'e&d+e&d0ed1e&ddfd2„Z4	 	 	 d7d$d/œd)ejb                  d*eee      d'e&d+e&d1e&ddfd3„Z5d8d4„Z6e7d5k(  r e6«        yy)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                   ó   — e Zd Zy)ÚRemoveOverlapsErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    ú`/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/ttLib/removeOverlaps.pyr   r      s   „ Ør   r   zfontTools.ttLib.removeOverlapsÚ	glyphNameÚglyphSetÚreturnc                 óz   — t        j                  «       }|j                  |¬«      }||    j                  |«       |S )N©r   )ÚpathopsÚPathÚgetPenÚdraw)r   r   ÚpathÚpathPens       r   ÚskPathFromGlyphr$   !   s5   € Ü�<‰<‹>€DØ�k‰k 8ˆkÓ,€GØˆYÑ×Ñ˜WÔ%Ø€Kr   Ú	componentc                 ó^   — | j                  «       \  }}t        ||«      } |j                  |Ž S ©N)ÚgetComponentInfor$   Ú	transform)r%   r   ÚbaseGlyphNameÚtransformationr"   s        r   ÚskPathFromGlyphComponentr,   (   s4   € ð %.×$>Ñ$>Ó$@Ñ!€M�>Ü˜=¨(Ó3€DØˆ4�>‰>˜>Ð*Ð*r   Úglyphc           
      ó:  ‡ ‡‡‡— ‰ j                  «       st        d«      ‚t        ‰ j                  «      dk  ryi Šdt        dt
        j                  fˆˆ ˆfd„Št        ˆfd„t        j                  t        t        ‰ j                  «      «      d«      D «       «      S )Nz5This method only works with TrueType composite glyphsé   FÚindexr   c                 óN   •— | ‰vrt        ‰j                  |    ‰«      ‰| <   ‰|    S r'   )r,   Ú
components)r0   Úcomponent_pathsr-   r   s    €€€r   Ú_get_nth_component_pathz2componentsOverlap.<locals>._get_nth_component_path8   s7   ø€ Ø˜Ñ'Ü%=Ø× Ñ  Ñ'¨ó&ˆO˜EÑ"ð ˜uÑ%Ð%r   c              3   ó    •K  — | ]E  \  }}t        j                   ‰|«       ‰|«      t         j                  j                  d d ¬«      –— ŒG y­w)F)Úfix_windingÚkeep_starting_pointsN)r   ÚopÚPathOpÚINTERSECTION)Ú.0ÚiÚjr4   s      €r   ú	<genexpr>z$componentsOverlap.<locals>.<genexpr>?   sP   øè ø€ ò 	ñ ˆAˆqô 	�
‰
Ù# AÓ&Ù# AÓ&Ü�N‰N×'Ñ'ØØ!&÷	
ð 	
ñ	ùs   ƒAA)ÚisCompositeÚ
ValueErrorÚlenr2   Úintr   r   ÚanyÚ	itertoolsÚcombinationsÚrange)r-   r   r4   r3   s   ``@@r   ÚcomponentsOverlaprG   0   sˆ   û€ Ø×ÑÔÜÐPÓQÐQÜ
ˆ5×ÑÓ˜qÒ Øà€Oð&¤sð &¬w¯|©|÷ &ô ó 	ô ×*Ñ*¬5´°U×5EÑ5EÓ1FÓ+GÈÓKô	ó 	ð 	r   r"   c                 ó¨   — t        d ¬«      }| j                  |«       |j                  «       }|j                  «       rJ ‚|j	                  d ¬«       |S )Nr   )Ú	glyfTable)r   r!   r-   r?   ÚrecalcBounds)r"   ÚttPenr-   s      r   ÚttfGlyphFromSkPathrL   K   sK   € ä Ô%€EØ‡I�IˆeÔØ�K‰K‹M€EØ× Ñ Ô"Ð"Ð"à	×Ñ ÐÔ&Ø€Lr   Ú
charStringc                 ó  — |j                   |j                  j                  k(  rd }n#|j                   |j                  j                  z
  }t	        |d ¬«      }| j                  |«       |j                  |j                  |j                  «      S )N)Úwidthr   )rO   ÚprivateÚdefaultWidthXÚnominalWidthXr   r!   ÚgetCharStringÚglobalSubrs)r"   rM   rO   Út2Pens       r   Ú_charString_from_SkPathrV   V   sv   € ð ×Ñ˜:×-Ñ-×;Ñ;Ò;Ø‰à× Ñ  :×#5Ñ#5×#CÑ#CÑCˆÜ %°$Ô7€EØ‡I�IˆeÔØ×Ñ˜z×1Ñ1°:×3IÑ3IÓJÐJr   Úroundc                 ó|   ‡— t        j                  «       }| D ]!  \  }} |j                  |gˆfd„|D «       ¢­Ž  Œ# |S )Nc              3   óJ   •K  — | ]  } ‰|d    «       ‰|d   «      f–— Œ y­w)r   é   Nr   )r;   ÚprW   s     €r   r>   z_round_path.<locals>.<genexpr>g   s&   øè ø€ Ò LÀ¡%¨¨!©£+©u°Q°q±T«{Ô!;Ñ Lùs   ƒ #)r   r   Úadd)r"   rW   Úrounded_pathÚverbÚpointss    `   r   Ú_round_pathr`   b   sF   ø€ ô —<‘<“>€LØò N‰ˆˆfØˆ×Ñ˜ÐMÓ LÀVÔ LÔMðNàÐr   ©rW   ÚdebugGlyphNamec                óÀ  — 	 t        j                  | | j                  ¬«      S # t         j                  $ r Y nw xY wt	        | |¬«      } 	 t        j                  | | j                  ¬«      } t
        j                  d|«       | S # t         j                  $ rG}t
        j                  t        j                  «      r| j                  «        t        d|›�«      |‚d }~ww xY w)N)Ú	clockwisera   zkskia-pathops failed to simplify '%s' with float coordinates, but succeded using rounded integer coordinatesz%Failed to remove overlaps from glyph )r   Úsimplifyrd   ÚPathOpsErrorr`   ÚlogÚdebugÚisEnabledForÚloggingÚDEBUGÚdumpr   ÚAssertionError)r"   rb   rW   Úes       r   Ú	_simplifyro   k   sÆ   € ðÜ×Ñ °·±Ô?Ð?øÜ×Ñò Ùðúô �t 5Ô)€DðÜ×Ñ °·±Ô?ˆÜ�	‰	ð=àô	
ð
 ˆøÜ×Ñò Ü×ÑœGŸM™MÔ*Ø�I‰IŒKÜ!Ø3°NÐ3EÐFó
àð	ûðús%   ‚ # £9¸9Á
8B ÂCÂACÃCÚpath1Úpath2c                 ó¤   — | j                   D �ch c]  }t        |«      ’Œ c}|j                   D �ch c]  }t        |«      ’Œ c}k(  S c c}w c c}w r'   )ÚcontoursÚtuple)rp   rq   Úcs      r   Ú
_same_pathrv   ’   s9   € Ø#Ÿn™nÖ-˜ŒE�!�HÒ-ÀEÇNÁNÖ1S¸q´%¸µ(Ò1SÑSÐSùÒ-ùÒ1Ss
   �A±ATrI   Ú	hmtxTableÚremoveHintingc                 ó^  — ||    }|j                   dkD  s|j                  «       rwt        ||«      rkt        | |«      }t	        || «      }t        ||«      sGt        |«      x|| <   }|j                  rJ ‚||    \  }}	|	|j                  k7  r||j                  f|| <   y|r|j                  «        y)Nr   TF)
ÚnumberOfContoursr?   rG   r$   ro   rv   rL   ÚprogramÚxMinrx   )
r   r   rI   rw   rx   r-   r"   rq   rO   Úlsbs
             r   ÚremoveTTGlyphOverlapsr~   –   s½   € ð �iÑ €Eð 	×Ñ Ò"Ø×ÑÔÜ˜e XÔ.ä˜y¨(Ó3ˆô ˜$ 	Ó*ˆô ˜$ Ô&Ü+=¸eÓ+DÐDˆI�iÑ  5à—}’}Ð$Ð$à" 9Ñ-‰JˆE�3Ø�e—j‘jÒ Ø(-¨u¯z©zÐ':�	˜)Ñ$ØáØ×ÑÔØr   ÚfontÚ
glyphNamesÚignoreErrorsc                 óv  ‡
‡— d| v rdnd}|dk(  rdnd}| |   Š
| |   }i Št        |ˆ
ˆfd„¬«      }t        «       }|D ]#  }		 t        |	|‰
||«      r|j                  |	«       Œ% t
        j                  dt        |«      d	j                  |«      «       y # t        $ r |s‚ t
        j                  d|	«       Y Œzw xY w)
NÚGLYFÚglyfÚHMTXÚhmtxc                 óv   •— ‰|    j                  «       r"‰|    j                  ‰‰¬«      j                  | fS d| fS )N)ÚmaxpValuesCacher   )r?   ÚgetCompositeMaxpValuesÚmaxComponentDepth)ÚnamerI   rˆ   s    €€r   ú<lambda>z'_remove_glyf_overlaps.<locals>.<lambda>Ì   sO   ø€ ð
 ˜T‘?×.Ñ.Ô0ð ˜$‘ß'Ñ'¨	À?Ð'ÓSß"Ñ"ð ð	
€ ð àð	
€ r   )Úkeyú"Failed to remove overlaps for '%s'ú"Removed overlaps for %s glyphs:
%sú )
ÚsortedÚsetr~   r\   r   rg   Úerrorrh   rA   Újoin)r   r€   r   rx   r�   ÚglyfTagÚhmtxTagrw   Úmodifiedr   rI   rˆ   s             @@r   Ú_remove_glyf_overlapsr˜   ¹   sÕ   ù€ ð  $™‰f¨F€GØ 6Ò)‰f¨v€GØ�W‘€IØ�W‘€Ið
 €OÜØô	
ô€Jô ‹u€HØò 	Gˆ	ð	GÜ$Ø˜8 Y°	¸=ôð —‘˜YÔ'øð	Gô ‡I�IÐ3´S¸³]ÀCÇHÁHÈXÓDVÕWøô #ò 	GÙØÜ�I‰IÐ:¸IÖFð	Gús   Á BÂ"B8Â7B8Ú
cffFontSetc                 óœ   — t        | |«      }t        || t        ¬«      }t        ||«      s"|d   j                  }t        |||    «      || <   yy)Nra   r   TF)r$   ro   r   rv   ÚCharStringsrV   )r   r   r™   r"   rq   ÚcharStringss         r   Ú_remove_charstring_overlapsr�   æ   sW   € ô ˜9 hÓ/€Dô �d˜I¬WÔ5€Eô �d˜EÔ"Ø  ‘m×/Ñ/ˆÜ!8¸ÀÈIÑ@VÓ!Wˆ�IÑØàr   )ÚremoveUnusedSubroutinesÚ	table_tagrž   c                 óª  — | |   j                   }t        «       }|D ]"  }		 t        |	||¬«      r|j                  |	«       Œ$ |st
        j                  d«       y |r|j                  «        |r|j                  «        t
        j                  dt        |«      dj                  |«      «       y # t        $ r |s‚ t
        j                  d|	«       Y Œµw xY w)N)r   r   r™   rŽ   z-No overlaps found in the specified CFF glyphsr�   r�   )Úcffr’   r�   r\   r   rg   r“   rh   Úremove_hintsÚremove_unused_subroutinesrA   r”   )
r   r€   r   rx   r�   rŸ   rž   r™   r—   r   s
             r   Ú_remove_cff_overlapsr¤   ú   sÊ   € ð �i‘×$Ñ$€JÜ‹u€HØò Gˆ	ð
	GÜ*Ø#Ø!Ø%õð
 —‘˜YÔ'øðGñ Ü�	‰	ÐAÔBØáØ×ÑÔ!áØ×,Ñ,Ô.ä‡I�IÐ3´S¸³]ÀCÇHÁHÈXÓDVÕWøô #ò 	GÙØÜ�I‰IÐ:¸IÖFð	Gús    B-Â-"CÃCc          	      óð   — d| vrd| vrd| vrd| vrt        d«      ‚|€| j                  «       }| j                  «       }d| v sd| v rt        | ||||¬«       d| v sd| v rt	        | ||||d| v rdnd|¬«       yy)	aš  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'/'GLYF', 'CFF ', or 'CFF2'
    tables. Raises NotImplementedError if all of these 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„   rƒ   zCFF ÚCFF2zRNo outline data found in the font: missing 'glyf', 'GLYF', 'CFF ', or 'CFF2' tableN)r   r€   r   rx   r�   )r   r€   r   rx   r�   rŸ   rž   )ÚNotImplementedErrorÚgetGlyphOrderÚgetGlyphSetr˜   r¤   )r   r€   rx   r�   rž   r   s         r   r   r      s¸   € ð@ 	�dÑØ˜$ÑØ˜$ÑØ˜$Ñä!Ø`ó
ð 	
ð ÐØ×'Ñ'Ó)ˆ
ð ×ÑÓ!€Hà��~˜ 4™ÜØØ!ØØ'Ø%õ	
ð ��~˜ 4™ÜØØ!ØØ'Ø%Ø &¨$¡‘f°FØ$;ö	
ð (r   c                 óh  — ddl }|j                  dt        ¬«      }|j                  ddd¬«       |j                  d	d
d¬«       |j                  dddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j                  ddd¬«       |j	                  | «      } t        j                  | j                  «      5 }t        || j                  xs d| j                   | j                  | j                   ¬«       |j                  | j                  «       ddd«       y# 1 sw Y   yxY w)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€   rx   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Â   d  sO  € ó à×$Ñ$Ø(´gð %ó €Fð ×Ñ˜¨Ð;LÐÔMØ
×Ñ˜¨,Ð=OÐÔPØ
×ÑØØØØCð	 ô ð ×ÑØØØMð ô ð
 ×ÑØØð3ð ô ð ×ÑØ#Øð?ð ô ð ×Ñ˜TÓ"€Dä	�‰�t—z‘zÓ	"ð  dÜØØ—{‘{Ò* dØ"×/Ñ/Ð/Ø×+Ñ+Ø(,×(DÑ(DÐ$Dõ	
ð 	�	‰	�$—+‘+Ô÷÷ ñ ús   ÃAD(Ä(D1Ú__main__)T)NTFr'   )8r¸   rD   rj   Ú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   Ú	getLoggerrg   ÚstrÚ_TTGlyphÚ_TTGlyphMappingr   r$   ÚGlyphComponentr,   ÚGlyphÚboolrG   rL   rV   Úfloatr`   ro   rv   Útable__g_l_y_fÚtable__h_m_t_xr~   r»   r˜   r�   r¤   r   rÂ   r   r   r   r   ú<module>rØ      sY  ðñó
 Û ß 8Ó 8å 'Ý "Ý +Ý +Ý 5ß 6Ý 0Ý :ã àÐ
€ô	˜)ô 	ð €g×ÑÐ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ðZàðð ðð ð	ð
 
óð8 %)ò#Xà
�-‰-ð#Xð ˜‘ð#Xð ð	#Xð
 ð#Xð ð#Xð ð#Xð "ð#Xð 
ó#XðP +/ØØð	A
ð %)òA
Ø
�-‰-ðA
à˜ #™Ñ'ðA
ð ðA
ð ð	A
ð "ðA
ð 
óA
óH,ð^ ˆzÒÙ…Fð r   