Ë
    £èh¼I  ã                  óö  — d dl mZ d dlZd dlmZmZmZmZ d dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZ ddlmZ ddlmZmZ  ej*                  d	«      Zd
ZdZdZej4                  j7                  dd«      Zde› d�gZg d¢ZddgZeeeeeeiZ g d¢Z!dZ" G d„ de«      Z#ddddœZ$ G d„ d«      Z%d-d„Z&d.d„Z'h d £Z(h d!£Z) e«       Z*g d"¢Z+g d#¢Z, G d$„ d%e-«      Z. G d&„ d'e-«      Z/ G d(„ d)«      Z0d/d*„Z1d0d+„Z2d0d,„Z3y)1é    )ÚannotationsN)ÚIterableÚ
NamedTupleÚOptionalÚSequence)ÚPath)ÚTTFontÚ
TTLibErroré   )ÚFontFace)Ú	shapefileÚlffÚezdxfÚWindowsÚLinuxÚDarwinÚ
SystemRootz
C:/Windowsz'~/AppData/Local/Microsoft/Windows/Fontsz/Fonts)z/usr/share/fontsz/usr/local/share/fontsz~/.fontsz~/.local/share/fontsz~/.local/share/texmf/fontsz/Library/Fonts/z/System/Library/Fonts/)zArialUni.ttfzArial Unicode.ttfz	Arial.ttfzDejaVuSansCondensed.ttfzDejaVuSans.ttfzLiberationSans-Regular.ttfzOpenSans-Regular.ttfé   c                  ó"   — e Zd ZU ded<   ded<   y)Ú
CacheEntryr   Ú	file_pathr   Ú	font_faceN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    ú8lib/python3.12/site-packages/ezdxf/fonts/font_manager.pyr   r   7   s   … ØƒOØÔr   r   zDejaVu SerifzDejaVu SanszDejaVu Sans Mono)Úserifú
sans-serifÚ	monospacec                  ó¨   — e Zd Zdd„Zdd„Zdd„Zdd„Zd„ Zdd„Ze	dd„«       Z
dd„Zdd	„Zdd
„Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zddd„Zy)Ú	FontCachec                ó"   — t        «       | _        y ©N)ÚdictÚ_cache©Úselfs    r   Ú__init__zFontCache.__init__D   s   € ô .2«Vˆ�r   c                ó<   — | j                  |«      | j                  v S r&   )Úkeyr(   ©r*   Ú	font_names     r   Ú__contains__zFontCache.__contains__I   s   € Ø�x‰x˜	Ó" d§k¡kÐ1Ð1r   c                ó>   — | j                   | j                  |«         S r&   ©r(   r-   )r*   Úitems     r   Ú__getitem__zFontCache.__getitem__L   s   € Ø�{‰{˜4Ÿ8™8 D›>Ñ*Ð*r   c                ó@   — || j                   | j                  |«      <   y r&   r2   )r*   r3   Úentrys      r   Ú__setitem__zFontCache.__setitem__O   s   € Ø&+ˆ�‰�D—H‘H˜T“NÒ#r   c                ó,   — t        | j                  «      S r&   )Úlenr(   r)   s    r   Ú__len__zFontCache.__len__R   s   € Ü�4—;‘;ÓÐr   c                ó8   — | j                   j                  «        y r&   )r(   Úclearr)   s    r   r<   zFontCache.clearU   s   € Ø�‰×ÑÕr   c                ó4   — t        | «      j                  «       S r&   )ÚstrÚlower)r/   s    r   r-   zFontCache.keyX   s   € ä�9‹~×#Ñ#Ó%Ð%r   c                óh   — t        ||«      | j                  | j                  |j                  «      <   y r&   )r   r(   r-   Úname)r*   Ú	font_pathr   s      r   Ú	add_entryzFontCache.add_entry\   s$   € Ü0:¸9ÀiÓ0Pˆ�‰�D—H‘H˜YŸ^™^Ó,Ò-r   c                óÐ   — 	 | j                   | j                  |«         S # t        $ r< | j                   j                  | j                  |«      «      }|�|cY S t	        d«      ‚w xY w)Nz+no fonts available, not even fallback fonts)r(   r-   ÚKeyErrorÚgetÚFontNotFoundError)r*   r/   Úfallbackr6   s       r   rF   zFontCache.get_   sc   € ð	WØ—;‘;˜tŸx™x¨	Ó2Ñ3Ð3øÜò 	WØ—K‘K—O‘O D§H¡H¨XÓ$6Ó7ˆEØÐ Ø’ä'Ð(UÓVÐVð	Wús   ‚   7A%ÁA%c                ó  — | j                   j                  | j                  |j                  «      d «      }|r|j                  S | j                  |j                  |j                  |j                  |j                  |j                  ¬«      S )N)ÚfamilyÚstyleÚweightÚwidthÚitalic)r(   rF   r-   Úfilenamer   Úfind_best_match_exrJ   rK   rL   rM   Ú	is_italic)r*   r   r6   s      r   Úfind_best_matchzFontCache.find_best_matchi   ss   € Ø—‘—‘ §¡¨×);Ñ);Ó <¸dÓCˆÙØ—?‘?Ð"Ø×&Ñ&Ø×#Ñ#Ø—/‘/Ø×#Ñ#Ø—/‘/Ø×&Ñ&ð 'ó 
ð 	
r   c                ó‚  ‡‡‡— t         j                  ||«      }t        || j                  j	                  «       «      }t        |«      dk(  ry t        |«      dk(  r|d   j                  S t        ||«      }t        |«      dk(  r|d   j                  S t        |«      r|}t        |ˆˆˆfd„¬«      }|d   j                  S )Nr   r   c                óº   •— t        | j                  j                  ‰z
  «      | j                  j                  ‰ut        | j                  j                  ‰z
  «      fS r&   )Úabsr   rL   rQ   rM   )ÚerN   rL   rM   s    €€€r   Ú<lambda>z.FontCache.find_best_match_ex.<locals>.<lambda>Ž   sH   ø€ Ü�A—K‘K×&Ñ&¨Ñ/Ó0Ø—‘×%Ñ%¨VÐ3Ü�A—K‘K×%Ñ%¨Ñ-Ó.ñr   )r-   )	ÚGENERIC_FONT_FAMILYrF   Úfilter_familyr(   Úvaluesr9   r   Úfilter_styleÚsorted)	r*   rJ   rK   rL   rM   rN   ÚentriesÚentries_Úresults	      ```   r   rP   zFontCache.find_best_match_exu   sµ   ú€ ô %×(Ñ(¨°Ó8ˆÜ ¨¯©×(:Ñ(:Ó(<Ó=ˆÜˆw‹<˜1ÒØÜ�‹\˜QÒØ˜1‘:×'Ñ'Ð'Ü  wÓ/ˆÜˆx‹=˜AÒØ˜A‘;×(Ñ(Ð(Ü�Œ]ØˆGô Øõô
ˆð �a‰y×"Ñ"Ð"r   c                óî  — t        «       }	 t        j                  |«      }	 |d   }|d   }|t        k(  re|D ]X  }	 |\  }}}}	}
t        |«      }t        |j                  |||	|
¬«      }t        ||«      || j                  |j                  «      <   ŒZ || _        y t	        d«      ‚# t        j                  $ r t	        d«      ‚w xY w# t
        $ r t	        d«      ‚w xY w# t        $ r t	        d«      ‚w xY w)Nzinvalid JSON file formatÚversionú
font-faceszinvalid cache file format)rO   rJ   rK   rL   rM   zinvalid cache file version)r'   ÚjsonÚloadsÚJSONDecodeErrorÚIOErrorrE   ÚCURRENT_CACHE_VERSIONÚ
ValueErrorr   r   rA   r   r-   r(   )r*   ÚsÚcacheÚcontentra   r6   r   rJ   rK   rL   rM   Úpathr   s                r   rd   zFontCache.loads–   s  € Ü'+£vˆð	6Ü—j‘j “mˆGð	7Ø˜iÑ(ˆGØ˜lÑ+ˆGð Ô+Ò+Û �ð?Ø>CÑ;�I˜v u¨f°eô ˜I“�Ü$Ø!ŸY™YØ!ØØ!Øô�	ô .8¸¸iÓ-H��d—h‘h˜tŸy™yÓ)Ò*ð !ð  ˆ�ô Ð6Ó7Ð7øô/ ×#Ñ#ò 	6ÜÐ4Ó5Ð5ð	6ûô
 ò 	7ÜÐ5Ó6Ð6ð	7ûô "ò ?Ü!Ð"=Ó>Ð>ð?ús!   ŒB% ¢
C »CÂ%CÃCÃC4c                ój  — | j                   j                  «       D �cg c]l  }t        |j                  «      |j                  j
                  |j                  j                  |j                  j                  |j                  j                  f‘Œn }}t        |dœ}t        j                  |d¬«      S c c}w )N)ra   rb   r   )Úindent)r(   rZ   r>   r   r   rJ   rK   rL   rM   rg   rc   Údumps)r*   r6   ÚfacesÚdatas       r   ro   zFontCache.dumps´   s™   € ð Ÿ™×+Ñ+Ô-ó	
ñ .�ô �E—O‘OÓ$Ø—‘×&Ñ&Ø—‘×%Ñ%Ø—‘×&Ñ&Ø—‘×%Ñ%òð .ð 	ð 	
ô 1ÀÑFˆÜ�z‰z˜$ qÔ)Ð)ùò	
s   �A1B0c                ó¼  — | j                   j                  «       D �]  }t        |j                  › «       |sŒ|j                  j                  j                  «       }|j                  }|dv rt        d|j                  › d�«       Œk|dk(  rt        d|j                  › d�«       ŒŠt        d|j                  › d�«       t        d|j                  › �«       t        d|j                  › �«       t        d	|j                  › d
|j                  › �«       t        d|j                  › d
|j                  › �«       �Œ t        dt        | j                   «      › d�«       y )N)ú.shxú.shpz  Shape font file: 'Ú'ú.lffz  LibreCAD font file: 'z   TrueType/OpenType font file: 'z
  family: z	  style: z
  weight: z, z	  width: z
found z fonts)r(   rZ   Úprintr   Úsuffixr?   r   rO   rJ   rK   rL   Ú
weight_strrM   Ú	width_strr9   )r*   Úverboser6   Ú	font_typeÚffs        r   Úprint_available_fontszFontCache.print_available_fontsÂ   s  € Ø—[‘[×'Ñ'×)ˆEÜ�U—_‘_Ð%Ô'ÙØØŸ™×.Ñ.×4Ñ4Ó6ˆIØ—‘ˆBØÐ,Ñ,ÜÐ,¨R¯[©[¨M¸Ð;Õ<Ø˜fÒ$ÜÐ/°·±¨}¸AÐ>Õ?äÐ8¸¿¹¸ÀQÐGÔHÜ˜
 2§9¡9 +Ð.Ô/Ü˜	 "§(¡( Ð,Ô-Ü˜
 2§9¡9 +¨R°·±¨Ð?Ô@Ü˜	 "§(¡( ¨2¨b¯l©l¨^Ð<Ö=ð *ô  	�œ˜TŸ[™[Ó)Ð*¨&Ð1Õ2r   N©ÚreturnÚNone©r/   r>   r€   Úbool)r3   r>   r€   r   )r3   r>   r6   r   r€   r�   )r/   r>   r€   r>   )rB   r   r   r   r€   r�   )r/   r>   rH   r>   r€   r   )r   r   r€   úOptional[FontFace]©r!   ÚRegularé�  é   F)rJ   r>   rK   r>   rL   ÚintrM   r‰   rN   úOptional[bool]r€   r„   ©ri   r>   r€   r�   ©r€   r>   ©F)r   r   r   r+   r0   r4   r7   r:   r<   Ústaticmethodr-   rC   rF   rR   rP   rd   ro   r~   r   r   r   r$   r$   C   s¥   „ ó4ó
2ó+ó,ò óð ò&ó ð&óQóWó

ð #ØØØØ!&ð#àð#ð ð#ð ð	#ð
 ð#ð ð#ð 
ó#óBó<*õ3r   r$   c                óÆ   — t        | «      j                  «       }|D �cg c]8  }|j                  j                  j                  «       j	                  |«      sŒ7|‘Œ: c}S c c}w r&   )r>   r?   r   rJ   Ú
startswith)rJ   r]   r-   rV   s       r   rY   rY   Ö   sL   € Ü
ˆf‹+×
Ñ
Ó
€CÙÓM‘w�! !§+¡+×"4Ñ"4×":Ñ":Ó"<×"GÑ"GÈÕ"LŠA�wÑMÐMùÒMs   ž8AÁAc                ó¬   — t        | «      j                  «       }|D �cg c]+  }||j                  j                  j                  «       v sŒ*|‘Œ- c}S c c}w r&   )r>   r?   r   rK   )rK   r]   r-   rV   s       r   r[   r[   Û   sF   € Ü
ˆe‹*×
Ñ
Ó
€CÙÓC‘w�! #¨¯©×):Ñ):×)@Ñ)@Ó)BÒ"BŠA�wÑCÐCùÒCs   ž+AÁ
A>   ú.otfú.ttcú.ttf>   rv   rt   rs   )ztxt.shxztxt.shpziso.shxziso.shp)zstandard.lffziso.lffzsimplex.lffc                  ó   — e Zd Zy)rG   N©r   r   r   r   r   r   rG   rG   ê   ó   „ Ør   rG   c                  ó   — e Zd Zy)ÚUnsupportedFontNr–   r   r   r   r™   r™   î   r—   r   r™   c                  óÎ   — e Zd Zdd„Zddd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	ddd„Z
dd	„Zdd
„Zdd„Zdd„Z	 	 	 	 	 d 	 	 	 	 	 	 	 d!d„Zd"d„Zd#d$d„Zd%d&d„Zd'd„Zd(d„Zdd„Zd)d„Zy)*ÚFontManagerc                óö   — t        j                  «       | _         t        «       | _        t	        «       | _        t	        «       | _        t	        «       | _        t	        «       | _        d| _	        d| _
        d| _        y ©NÚ )ÚplatformÚsystemr$   Ú_font_cacher'   Ú_match_cacheÚ_loaded_ttf_fontsÚ_loaded_shape_file_glyph_cachesÚ_loaded_lff_glyph_cachesÚ_fallback_font_nameÚ_fallback_shape_fileÚ_fallback_lffr)   s    r   r+   zFontManager.__init__ó   s[   € Ü Ÿ™Ó)ˆŒÜ&/£kˆÔÜ;?»6ˆÔÜ48³FˆÔÜPTÓPVˆÔ,ÜCGÃ6ˆÔ%Ø#%ˆÔ Ø$&ˆÔ!ØˆÕr   c                ó<   — | j                   j                  |¬«       y )N)r{   )r¡   r~   )r*   r{   s     r   r~   z!FontManager.print_available_fontsþ   s   € Ø×Ñ×.Ñ.°wÐ.Õ?r   c                ó   — || j                   v S r&   )r¡   r.   s     r   Úhas_fontzFontManager.has_font  s   € Ø˜D×,Ñ,Ð,Ð,r   c                ód   — t        «       | _        | j                  j                  «        d| _        y r�   )r$   r¡   r£   r<   r¦   r)   s    r   r<   zFontManager.clear  s&   € Ü$›;ˆÔØ×Ñ×$Ñ$Ô&Ø#%ˆÕ r   c                óâ   — | j                   }|r|S t        d   }t        D ]6  }	 | j                  j                  ||«      }|j                  j
                  } n || _         |S # t        $ r Y ŒMw xY w)Nr   )r¦   ÚDEFAULT_FONTSr¡   rF   r   rA   rG   )r*   Úfallback_namerA   Úcache_entrys       r   Úfallback_font_namezFontManager.fallback_font_name	  s   € Ø×0Ñ0ˆÙØ Ð Ü% aÑ(ˆß!ˆDðØ"×.Ñ.×2Ñ2°4¸ÓG�Ø +× 5Ñ 5× :Ñ :�Ùð	 "ð $1ˆÔ ØÐøô %ò Ùðús   ¤2A"Á"	A.Á-A.c                ól   — | j                   }|r|S t        D ]  }|| j                  v sŒ|| _         |c S  yr�   )r§   ÚFALLBACK_SHAPE_FILESr¡   )r*   Úfallback_shape_filerA   s      r   Úfallback_shapefilezFontManager.fallback_shapefile  sA   € Ø"×7Ñ7ÐÙØ&Ð&ç(ˆDØ�t×'Ñ'Ò'Ø,0�Ô)Ø’ð )ð r   c                ól   — | j                   }|r|S t        D ]  }|| j                  v sŒ|| _        |c S  yr�   )r¨   r³   r¡   r§   )r*   Úfallback_lffrA   s      r   r·   zFontManager.fallback_lff#  s@   € Ø×)Ñ)ˆÙØÐç(ˆDØ�t×'Ñ'Ò'Ø,0�Ô)Ø’ð )ð r   c                ór  — 	 | j                   |   S # t        $ r Y nw xY w| j                  «       }	 t        | j                  j                  ||«      j                  |¬«      }nE# t        $ r}t        t        |«      «      ‚d }~wt        $ r}t        t        |«      «      ‚d }~ww xY w|| j                   |<   |S )N©Ú
fontNumber)r£   rE   r±   r	   r¡   rF   r   rf   rG   r>   r
   )r*   r/   Úfont_numberr¯   ÚfontrV   s         r   Úget_ttf_fontzFontManager.get_ttf_font.  s´   € ð	Ø×)Ñ)¨)Ñ4Ð4øÜò 	Ùð	úà×/Ñ/Ó1ˆð	,ÜØ× Ñ ×$Ñ$ Y°Ó>×HÑHØ&ô‰Døô ò 	,Ü#¤C¨£FÓ+Ð+ûÜò 	,Ü#¤C¨£FÓ+Ð+ûð	,úà,0ˆ×Ñ˜yÑ)Øˆs/   ‚ ‘	œ±1A# Á#	B%Á,B Â B%ÂB Â B%c                ó^   — | j                  t        |j                  «      j                  «      S r&   )r½   r   rO   rA   ©r*   r   s     r   Úttf_font_from_font_facez#FontManager.ttf_font_from_font_face@  s$   € Ø× Ñ ¤ i×&8Ñ&8Ó!9×!>Ñ!>Ó?Ð?r   c           	     óH  — 	 | j                   |   S # t        $ r Y nw xY w| j                  «       }	 | j                  j	                  ||«      j
                  }n# t        $ r t        d|› d�«      ‚w xY w	 t        j                  t        |«      «      }nL# t        $ r t        d|› d�«      ‚t        j                  $ r}t        d|› dt        |«      › �«      ‚d }~ww xY w	 t        j                  |«      }n# t        $ r t        d|› d�«      ‚w xY w|| j                   |<   |S )Nzshape font 'ú' not foundzshape file 'zunsupported font 'ú': ú#can't create glyph-cache for font 'ú'.)r¤   rE   rµ   r¡   rF   r   rG   r   Úreadfiler>   rf   ÚUnsupportedShapeFiler™   Ú
GlyphCacheÚ	Exception)r*   r/   r¯   r   ÚfilerV   Úglyph_caches          r   Úget_shapefile_glyph_cachez%FontManager.get_shapefile_glyph_cacheC  s@  € ð	Ø×7Ñ7¸	ÑBÐBøÜò 	Ùð	úà×/Ñ/Ó1ˆð	KØ×(Ñ(×,Ñ,¨Y¸ÓF×PÑP‰IøÜò 	KÜ# l°9°+¸[Ð$IÓJÐJð	Kúð	OÜ×%Ñ%¤c¨)£nÓ5‰DøÜò 	KÜ# l°9°+¸[Ð$IÓJÐJÜ×-Ñ-ò 	OÜ!Ð$6°y°kÀÄSÈÃVÀHÐ"MÓNÐNûð	Oúð	WÜ#×.Ñ.¨tÓ4‰KøÜò 	WÜ!Ð$GÈ	À{ÐRTÐ"UÓVÐVð	Wúà:Eˆ×,Ñ,¨YÑ7ØÐs;   ‚ ‘	œ±&A ÁA1Á5B Â*CÂ>CÃCÃ!C7 Ã7Dc                ó   — 	 | j                   |   S # t        $ r Y nw xY w| j                  «       }	 | j                  j	                  ||«      j
                  }n# t        $ r t        d|› d�«      ‚w xY w	 t        j                  |«      j                  d¬«      }t        j                  |«      }n# t        $ r t        d|› d�«      ‚w xY w	 t        j                  |«      }n# t        $ r t        d|› d�«      ‚w xY w|| j                   |<   |S )NzLibreCAD font 'rÂ   Úutf8)ÚencodingzLibreCAD font file 'rÄ   rÅ   )r¥   rE   r·   r¡   rF   r   rG   Úpathlibr   Ú	read_textr   rd   rf   rÈ   rÉ   r™   )r*   r/   r¯   r   ri   r¼   rË   s          r   Úget_lff_glyph_cachezFontManager.get_lff_glyph_cacheZ  s)  € ð	Ø×0Ñ0°Ñ;Ð;øÜò 	Ùð	úà×)Ñ)Ó+ˆð	NØ×(Ñ(×,Ñ,¨Y¸ÓF×PÑP‰IøÜò 	NÜ# o°i°[ÀÐ$LÓMÐMð	Núð	SÜ—‘˜YÓ'×1Ñ1¸6Ð1ÓBˆAÜ—9‘9˜Q“<‰DøÜò 	SÜ#Ð&:¸9¸+À[Ð$QÓRÐRð	Súð	WÜŸ.™.¨Ó.‰KøÜò 	WÜ!Ð$GÈ	À{ÐRTÐ"UÓVÐVð	Wúð 4?ˆ×%Ñ% iÑ0ØÐs/   ‚ ‘	œ±&A ÁA1Á5:B0 Â0C	ÃC# Ã#C<c                ón   — | j                   j                  || j                  «       «      }|j                  S r&   )r¡   rF   r±   r   )r*   r/   r°   s      r   Úget_font_facezFontManager.get_font_faceq  s/   € Ø×&Ñ&×*Ñ*¨9°d×6MÑ6MÓ6OÓPˆØ×$Ñ$Ð$r   c                óÀ   — t        |||||f«      }	 | j                  |   S # t        $ r Y nw xY w| j                  j	                  |||||«      }|| j                  |<   |S r&   )Úhashr¢   rE   r¡   rP   )r*   rJ   rK   rL   rM   rN   r-   r   s           r   rR   zFontManager.find_best_matchu  sz   € ô �F˜E 6¨5°&Ð9Ó:ˆð	Ø×$Ñ$ SÑ)Ð)øÜò 	Ùð	úà×$Ñ$×7Ñ7Ø�E˜6 5¨&ó
ˆ	ð "+ˆ×Ñ˜#ÑØÐs   ’! ¡	-¬-c                óª   — | j                   j                  |«      }|€+| j                  | j                  «       «      }|j                  S |j                  S )zuReturns the font file name of the font without parent directories
        e.g. "LiberationSans-Regular.ttf".
        )r¡   rR   rÔ   r±   rO   r¿   s     r   Úfind_font_namezFontManager.find_font_nameˆ  sQ   € ð ×$Ñ$×4Ñ4°YÓ?ˆ	ØÐØ×*Ñ*¨4×+BÑ+BÓ+DÓEˆIØ×%Ñ%Ð%à×%Ñ%Ð%r   Nc                óÊ   — ddl m} |rt        |«      }n$t        j	                  | j
                  t        «      }|r|t        |j                  «      z   }| j                  |«       y)aà  Adds all supported font types located in the given `folders` to the font
        manager. If no directories are specified, the known font folders for Windows,
        Linux and macOS are searched by default, except `support_dirs` is ``False``.
        Searches recursively all subdirectories.

        The folders stored in the config SUPPORT_DIRS option are scanned recursively for
        .shx, .shp and .lff fonts, the basic stroke fonts included in CAD applications.

        r   )ÚoptionsN)	Úezdxf._optionsrÚ   ÚlistÚFONT_DIRECTORIESrF   rŸ   ÚLINUX_FONT_DIRSÚsupport_dirsÚscan_all)r*   Úfoldersrß   rÚ   Údirss        r   ÚbuildzFontManager.build“  sM   € õ 	+áÜ˜“=‰Dä#×'Ñ'¨¯©´ÓGˆDÙØœ$˜w×3Ñ3Ó4Ñ4ˆDØ�‰�dÕr   c                óð   — | j                   }|j                  «       D ]  \  }}||vrŒ||v rŒ||   }|||<   Œ |r6| j                  |j                  «       D ��ci c]  \  }}||“Œ
 c}}d¬«       y y c c}}w )NF)Úreverse)r¡   ÚitemsÚadd_synonyms)	r*   Úsynonymsrå   Ú
font_cacher/   Úsynonymr°   ÚkÚvs	            r   rç   zFontManager.add_synonyms§  s�   € Ø×%Ñ%ˆ
Ø"*§.¡.Ö"2ÑˆI�wØ 
Ñ*ØØ˜*Ñ$ØØ$ YÑ/ˆKØ"-ˆJ�wÒð #3ñ Ø×Ñ°·±Ô0@ÔAÑ0@©¨¨1˜q !™tÐ0@ÒAÈ5ÐÕQð ùÛAs   ÁA2
c                óà   — |D ]?  }|j                  d«      }|sŒ	 | j                  t        |«      j                  «       «       ŒA y # t        $ r}t        t        |«      «       Y d }~Œed }~ww xY w)Nz'")ÚstripÚscan_folderr   Ú
expanduserÚPermissionErrorrw   r>   )r*   rá   ÚfolderrV   s       r   rà   zFontManager.scan_all³  s`   € ÛˆFØ—\‘\ %Ó(ˆFÙØðØ× Ñ ¤ f£×!8Ñ!8Ó!:Õ;ñ øô #ò Ü”c˜!“f”Üûðús   ›(AÁ	A-ÁA(Á(A-c           
     óþ  — |j                  «       sy |j                  «       D ]Ÿ  }|j                  «       r| j                  |«       Œ%|j                  j                  «       }|t        v r)	 t        |«      }| j                  j                  ||«       Œp|t        v sŒyt        |«      }| j                  j                  ||«       Œ¡ y # t        $ r.}t        j                  d|› dt        |«      › �«       Y d }~ŒÕd }~ww xY w)Nzcannot open font 'rÃ   )ÚexistsÚiterdirÚis_dirrï   rx   r?   ÚSUPPORTED_TTF_TYPESÚget_ttf_font_facer¡   rC   rÉ   ÚloggerÚwarningr>   ÚSUPPORTED_SHAPE_FILESÚget_shape_file_font_face)r*   rò   rÊ   Úextr   rV   s         r   rï   zFontManager.scan_folder¾  sÚ   € Ø�}‰}ŒØØ—N‘NÖ$ˆDØ�{‰{Œ}Ø× Ñ  Ô&ØØ—+‘+×#Ñ#Ó%ˆCØÔ)Ñ)ð@Ü 1°$Ó 7�Ið ×$Ñ$×.Ñ.¨t°YÕ?ØÔ-Ò-Ü4°TÓ:�	Ø× Ñ ×*Ñ*¨4°Õ;ñ %øô !ò KÜ—N‘NÐ%7¸°v¸SÄÀQÃÀÐ#I×JÑJûðKús   Á*CÃ	C<Ã$C7Ã7C<c                ó6   — | j                   j                  «       S r&   )r¡   ro   r)   s    r   ro   zFontManager.dumpsÑ  s   € Ø×Ñ×%Ñ%Ó'Ð'r   c                ó:   — | j                   j                  |«       y r&   )r¡   rd   )r*   ri   s     r   rd   zFontManager.loadsÔ  s   € Ø×Ñ×Ñ˜qÕ!r   r   r�   r‚   rŒ   )r   )r/   r>   r»   r‰   r€   r	   )r   r   r€   r	   )r/   r>   r€   zshapefile.GlyphCache)r/   r>   r€   zlff.GlyphCache)r/   r>   r€   r   r…   )rJ   r>   rK   r>   rN   rŠ   r€   r„   )r   r   r€   r>   )NT)rá   zOptional[Sequence[str]]r€   r�   )T)rè   zdict[str, str]r€   r�   )rá   zIterable[str]r€   r�   )rò   r   r‹   )r   r   r   r+   r~   r«   r<   r±   rµ   r·   r½   rÀ   rÌ   rÒ   rÔ   rR   rØ   rã   rç   rà   rï   ro   rd   r   r   r   r›   r›   ò   s    „ ó	 ô@ó-ó&ó
ó	ó	ôó$@óó.ó.%ð #ØØØØ!&ðàðð ðð ðð 
óó&	&ôô(
Ró	ó<ó&(ô"r   r›   c                ó   — | dv rd} | S )N>   ÚBookr†   r   )rK   s    r   Únormalize_styler  Ø  s   € Ø�ÑØˆØ€Lr   c                ó.  — t        | d¬«      }|d   j                  }d}d}|D ]z  }|j                  dk(  r*|j                  j	                  |j                  «       «      }n8|j                  dk(  r)|j                  j	                  |j                  «       «      }|sŒw|sŒz n 	 |d   }|j                  }|j                  }t        | j                  |t        |«      ||¬«      S # t        $ r* t        j                  d| j                  › d	�«       d
}d}Y ŒUw xY w)zƒThe caller should catch ALL exception (see scan_folder function above) - strange
    things can happen when reading TTF files.
    r   r¹   rA   rž   r   r   zOS/2z cannot load OS/2 table of font 'ru   r‡   rˆ   ©rO   rJ   rK   rM   rL   )r	   ÚnamesÚnameIDÚstringÚdecodeÚgetEncodingÚusWeightClassÚusWidthClassrÉ   rù   ÚinforA   r   r  )	rB   Úttfr  rJ   rK   ÚrecordÚ	os2_tablerL   rM   s	            r   rø   rø   Þ  s  € ô � qÔ
)€CØ�‰K×Ñ€EØ€FØ€EÛˆØ�=‰=˜AÒØ—]‘]×)Ñ)¨&×*<Ñ*<Ó*>Ó?‰FØ�]‰]˜aÒØ—M‘M×(Ñ(¨×);Ñ);Ó)=Ó>ˆEÚ’eÙð ð'Ø˜‘Kˆ	ð ×(Ñ(ˆØ×&Ñ&ˆÜØ—‘ØÜ˜eÓ$ØØôð øô ò Ü�‰Ð6°y·~±~Ð6FÀaÐHÔIØˆØŠðús   Â!C! Ã!0DÄDc                óê   — | j                   j                  «       }d}|dk(  rd}|dk(  rd}t        | j                  | j                  j                  «       | j                   j                  «       |d¬«      S )Nrˆ   rt   é   rv   é   r‡   r  )rx   r?   r   rA   Ústem)rB   rý   rM   s      r   rü   rü      sq   € Ø
×
Ñ
×
 Ñ
 Ó
"€Cð
 €EØ
ˆf‚}ØˆØ
ˆf‚}ØˆäØ—‘Ø�~‰~×#Ñ#Ó%Ø×Ñ×$Ñ$Ó&ØØôð r   )rJ   r>   r]   úIterable[CacheEntry]r€   úlist[CacheEntry])rK   r>   r]   r  r€   r  )rK   r>   r€   r>   )rB   r   r€   r   )4Ú
__future__r   rÐ   Útypingr   r   r   r   ÚosrŸ   rc   Úloggingr   ÚfontTools.ttLibr	   r
   r   r   rž   r   r   Ú	getLoggerrù   ÚWINDOWSÚLINUXÚMACOSÚenvironrF   ÚWIN_SYSTEM_ROOTÚWIN_FONT_DIRSrÞ   ÚMACOS_FONT_DIRSrÝ   r®   rg   r   rX   r$   rY   r[   r÷   rû   ÚNO_FONT_FACEr³   ÚFALLBACK_LFFrÉ   rG   r™   r›   r  rø   rü   r   r   r   Ú<module>r%     s@  ðõ #ã ß ;Ó ;Û 	Û Û Û å ß .Ý ß à	ˆ×	Ñ	˜7Ó	#€Ø
€Ø€Ø€ð —*‘*—.‘. ¨|Ó<€ð .ØÐ�vÐð€ò
€ð %Ð&>Ð?€àˆ]Ø	ˆ?Ø	ˆ?ðÐ ò€ð Ð ô�ô ð ØØ#ñÐ ÷P3ñ P3ófNó
Dò /Ð â0Ð Ù‹z€ÚCÐ Ú9€ô	˜	ô 	ô	�iô 	÷c"ñ c"óLóôDr   