Ë
    £ehD1  ã                   óþ  — 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-	 d5d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&ddfd1„Z4	 	 	 d6d$d/œd)ejb                  d*eee      d'e&d+e&d0e&ddfd2„Z5d7d3„Z6e7d4k(  r e6«        yy)8zz Simplify 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/skyplay_api_hub/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_path9   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   1   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   L   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   W   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>h   s&   øè ø€ Ò LÀ¡%¨¨!©£+©u°Q°q±T«{Ô!;Ñ Lùs   ƒ #)r   r   Úadd)r"   rW   Úrounded_pathÚverbÚpointss    `   r   Ú_round_pathr`   c   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   l   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                 óL  ‡— | d   Š| d   }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Úhmtxc                 ór   •— ‰|    j                  «       r ‰|    j                  ‰«      j                  | fS d| fS )Nr   )r?   ÚgetCompositeMaxpValuesÚmaxComponentDepth)ÚnamerI   s    €r   ú<lambda>z'_remove_glyf_overlaps.<locals>.<lambda>Ê   sJ   ø€ ð ˜T‘?×.Ñ.Ô0ð ˜$‘×6Ñ6°yÓA×SÑ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�   rw   Úmodifiedr   rI   s	           @r   Ú_remove_glyf_overlapsr“   º   sµ   ø€ ð �V‘€IØ�V‘€Iô
 Øó
ô
€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   ¬ A>Á>"B#Â"B#Ú
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   )ÚremoveUnusedSubroutinesr™   c                 óª  — | d   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úCFF )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   s	            r   Ú_remove_cff_overlapsrŸ   ö   sÊ   € ð �f‘×!Ñ!€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t        d«      ‚|€| j                  «       }| j                  «       }d| v rt        | ||||¬«       d| v rt	        | |||||¬«       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' 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ƒ   r›   zANo outline data found in the font: missing 'glyf' or 'CFF ' tableN)r   r€   r   rx   r�   )r   r€   r   rx   r�   r™   )ÚNotImplementedErrorÚgetGlyphOrderÚgetGlyphSetr“   rŸ   )r   r€   rx   r�   r™   r   s         r   r   r     s�   € ð> �TÑ˜f¨DÑ0Ü!ØOó
ð 	
ð ÐØ×'Ñ'Ó)ˆ
ð ×ÑÓ!€Hà��~ÜØØ!ØØ'Ø%õ	
ð ��~ÜØØ!ØØ'Ø%Ø$;ö	
ð 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¼   Y  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Ò      sH  ðñó
 Û ß 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ðPàðð ðð ð	ð
 
óð6 %)ò"Xà
�-‰-ð"Xð ˜‘ð"Xð ð	"Xð
 ð"Xð ð"Xð "ð"Xð 
ó"XðN +/ØØð	;
ð %)ò;
Ø
�-‰-ð;
à˜ #™Ñ'ð;
ð ð;
ð ð	;
ð "ð;
ð 
ó;
ó|,ð^ ˆzÒÙ…Fð r   