
    ^jV8                       d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ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mZ erdd	lmZ  ed
          \  ZZZZZ eZ! ed          Z" ed          Z# ed          Z$ ed          Z% ed          Z& ed          Z' ed          Z(dZ)dZ*e*Z+dZ,dZ-e-Z.dZ/dZ0e0Z1dZ2dZ3e3Z4dZ5dZ6e6Z7dZ8e8Z9dZ:e:Z;i de5de1d e1d!e)d"e*d#e+d$e,d%e.d&e1d'e0d(e2d)e3d*e4d+e5d,e6d-e7d.e8e9e:d/Z<d&d!d"d$d%d&d(d*d+d,d.d-d0Z=dZ>d1Z?dZ@d2ZAdZBd3ZCd4ZDd5ZEdZFeBeBeBe>e?e@eAeBeBeCeDeEeFd6ZGd d&dd&e>d7e?d8e@d9eAd:eBd&eCd;eDd<eEd=eFd>iZHdZIdZJd?ZK ed@          \	  ZLZMZNZOZPZQZRZSZTeZU edA          \  ZVZWeZX G dB dCe          ZY G dD dEe          ZZ G dF dG          Z[ G dH dI          Z\ G dJ dKe\          Z] G dL dMe\          Z^dTdRZ_d a`dUdSZad S )VzJWrapper around the Linux FontConfig library. Used to find available fonts.    )annotations)OrderedDict)
CDLL	StructureUnionbyrefc_char_pc_doublec_intc_uintc_void_pPOINTER)TYPE_CHECKING)FontException)load_library)asbytesasstr)FT_Face   familysizeslantweightftfacefilewidth
   (   2   7   K   P   d                  TFNthin
extralight
ultralightlight	semilightnormalregularmediumdemiboldsemiboldbold	extrabold	ultraboldblack)heavy
extrablack)Nr   r   r   r    r"   r#   r$   r%   r&   r'   r(   ?   W   q   }      )NF	undefinedultracondensedextracondensed	condensedsemicondensedr.   r0   semiexpandedexpandedextraexpandedultraexpandedr?   r@   rA   rB   rC   rD   rE   narrown   	      c            
      H    e Zd Zdefdefdefdefdefdefdefdefd	efg	Zd
S )_FcValueUnionsibdmcfplN)__name__
__module____qualname__r	   r   r
   r   _fields_     Q/home/agentuser/manim-venv/lib/python3.11/site-packages/pyglet/font/fontconfig.pyrL   rL      sT        	h	e	e	h	h	h	h	h	h
HHHr[   rL   c                      e Zd ZdefdefgZdS )FcValuetypeuN)rV   rW   rX   FcTyperL   rY   rZ   r[   r\   r^   r^      s%        		mHHHr[   r^   c                      e Zd ZU ded<   ded<   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d0d$Zed1d&            Zd'S )2
FontConfigzFOrderedDict[tuple[str, float, str, bool, str], FontConfigSearchResult]_search_cachezCDLL | None_fontconfigreturnNonec                ~    |                                  | _        | j        J t                      | _        d| _        d S )N   )_load_fontconfig_libraryre   r   rd   _cache_sizeselfs    r\   __init__zFontConfig.__init__   s?    88::+++(]]r[   c                   t          | j                  dk    rH| j                                        \  }}|                                 t          | j                  dk    H| j                                         d | _        d S Nr   )lenrd   popitemdisposere   FcFini)rm   kvs      r\   rs   zFontConfig.dispose   sz    $$%%))%--//DAqIIKKK $$%%)) 	!!!r[   FontConfigSearchPatternc                *    t          | j                  S N)rw   re   rl   s    r\   create_search_patternz FontConfig.create_search_pattern   s    &t'7888r[   	font_facer   c                    | j                             |d dd           }t          | j         |          }|j        |j        |j        fS rp   )re   FcFreeTypeQueryFaceFontConfigSearchResultr   italicstretch)rm   r{   patternresults       r\   style_from_facezFontConfig.style_from_face   sC    "66y$4PP'(8'BB}fmV^;;r[      r.   Fnamestrr   floatr   r   boolr   r~   c                *   |                      |||||          x}r|S |                                 }||_        ||_        ||_        ||_        ||_        |                                }|                     ||           |	                                 |S ry   )
_get_from_search_cacherz   r   r   r   r   r   match_add_to_search_cachers   )rm   r   r   r   r   r   r   search_patterns           r\   	find_fontzFontConfig.find_font   s    00tVVWUUU6 	M3355"" & &!(%%''!!.&999   r[   c                    |                      |          x}r<|r8|j        r1|j                                        |                                k    rdS dS dS )NFT)r   r   lower)rm   r   r   s      r\   	have_fontzFontConfig.have_font   s[    ^^D)))6 	  (9(9(;(;tzz||(K(Ku4ur[   ft_face	characterintc                R    | j                             |t          |                    S ry   )re   FcFreeTypeCharIndexord)rm   r   r   s      r\   
char_indexzFontConfig.char_index   s!    33GS^^LLLr[   r   result_patternc                    || j         |j        |j        |j        |j        |j        f<   t          | j                   | j        k    r5| j                             d          d         	                                 d S d S )NF)last   )
rd   r   r   r   r   r   rq   rk   rr   rs   )rm   r   r   s      r\   r   zFontConfig._add_to_search_cache   s     8F	 	N/*/*1*1*2	4 	5
 t!""T%555&&E&2215==????? 65r[   FontConfigSearchResult | Nonec                \    | j                             |||||fd           }|r	|j        r|S d S ry   )rd   getis_valid)rm   r   r   r   r   r   r   s          r\   r   z!FontConfig._get_from_search_cache   s@    #''tVVW(MtTT 	fo 	Mtr[   r   c                 \   t          d          } |                                  t          | j        _        t          | j        _        t          | j        _        t          | j        _        t          t          t          g| j        _        t          t          t          g| j        _        t          t          t          g| j        _        t          t          t          g| j        _        t          g| j        _        t          t          t          g| j        _        t          g| j        _        t          t          t          t          g| j        _        t          t          t          t          g| j        _        t          t          t          t+          t                    g| j        _        t          | j        _        | S )N
fontconfig)r   FcInitr   FcPatternBuildrestypeFcPatternCreateFcFontMatchr   r   r	   r
   FcPatternAddDoubleargtypesr   FcPatternAddIntegerFcPatternAddStringFcConfigSubstituteFcDefaultSubstituteFcPatternDestroyFcPatternGetFTFaceFcPatternGetr   r}   )r   s    r\   rj   z#FontConfig._load_fontconfig_library   s   !,//
,4
!)-5
"*)1
&17
&.2:Hh1O
%.3;Xu2M
&/2:Hh1O
%.2:He1L
%.3;*
&/+3Xx*H
'08z
#,2:HeX1V
%.,4hx+P
(3;XugV[nn2]
&/19
&.r[   Nrf   rg   )rf   rw   )r{   r   )r   r.   Fr.   )r   r   r   r   r   r   r   r   r   r   rf   r~   )r   r   rf   r   )r   r   r   r   rf   r   )r   rw   r   r~   rf   rg   )r   r   r   r   r   r   r   r   r   r   rf   r   )rf   r   )rV   rW   rX   __annotations__rn   rs   rz   r   r   r   r   r   r   staticmethodrj   rZ   r[   r\   rc   rc      s        YYYY          9 9 9 9< < < <
 DL7?    "   M M M M@ @ @ @       \  r[   rc   c                      e Zd Zd!d"dZed#d
            Zd$dZd$dZed%d            Z	d&dZ
d'dZd(dZd)dZd*dZd+dZd,dZd,d ZdS )-FontConfigPatternNr   r   r   c_void_p | Nonerf   rg   c                "    || _         || _        d S ry   )re   _pattern)rm   r   r   s      r\   rn   zFontConfigPattern.__init__  s    %r[   r   c                8    t          | j        o| j                  S ry   )r   re   r   rl   s    r\   r   zFontConfigPattern.is_valid  s    D$6777r[   c                f    | j         rJ | j        sJ | j                                        | _         d S ry   )r   re   r   rl   s    r\   _createzFontConfigPattern._create  s9    =   (88::r[   c                v    | j         sJ | j        sJ | j                            | j                    d | _         d S ry   )r   re   r   rl   s    r\   _destroyzFontConfigPattern._destroy#  sB    }}))$-888r[   r   r   c                "    | rt           nt          S ry   )FC_SLANT_ITALICFC_SLANT_ROMAN)r   s    r\   _italic_to_slantz"FontConfigPattern._italic_to_slant)  s    "(<n<r[   r   bytesvaluer   c                    | j         sJ |sJ | j        sJ |sd S |                    d          }| j                            | j         |t	          |                     d S )Nutf8)r   re   encoder   r   rm   r   r   s      r\   _set_stringzFontConfigPattern._set_string-  sn    }}t 	FV$$++DM4PPPPPr[   r   c                    | j         sJ |sJ | j        sJ |sd S | j                            | j         |t          |                     d S ry   )r   re   r   r
   r   s      r\   _set_doublezFontConfigPattern._set_double9  s]    }}t 	F++DM4%QQQQQr[   c                    | j         sJ |sJ | j        sJ |sd S | j                            | j         |t          |                     d S ry   )r   re   r   r   r   s      r\   _set_integerzFontConfigPattern._set_integerC  s]    }}t 	F,,T]D%,,OOOOOr[   FcValue | Nonec                    | j         sJ |sJ | j        sJ t                      }| j                            | j         |dt	          |                    }t          |          r|S d S rp   )r   re   r^   r   r   _handle_fcresult)rm   r   r   r   s       r\   
_get_valuezFontConfigPattern._get_valueM  sr    }}t		+88aQVW\Q]Q]^^F## 	Ltr[   
str | Nonec                    |                      |          }|r)|j        t          k    rt          |j        j                  S d S ry   )r   r_   FcTypeStringr   r`   rM   r   s      r\   _get_stringzFontConfigPattern._get_stringY  s>    %% 	$UZ<//###tr[   FT_Face | Nonec                l    |                      |          }|r|j        t          k    r|j        j        S d S ry   )r   r_   FcTypeFTFacer`   rS   r   s      r\   	_get_facezFontConfigPattern._get_facea  6    %% 	UZ<//79tr[   
int | Nonec                l    |                      |          }|r|j        t          k    r|j        j        S d S ry   )r   r_   FcTypeIntegerr`   rN   r   s      r\   _get_integerzFontConfigPattern._get_integeri  s6    %% 	UZ=0079tr[   c                l    |                      |          }|r|j        t          k    r|j        j        S d S ry   )r   r_   FcTypeDoubler`   rP   r   s      r\   _get_doublezFontConfigPattern._get_doubleq  r   r[   ry   r   r   r   r   rf   rg   rf   r   r   )r   r   rf   r   )r   r   r   r   rf   rg   )r   r   r   r   rf   rg   )r   r   r   r   rf   rg   )r   r   rf   r   )r   r   rf   r   )r   r   rf   r   )r   r   rf   r   )rV   rW   rX   rn   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r[   r\   r   r     sA                 8 8 8 X8; ; ; ;
    = = = \=
Q 
Q 
Q 
QR R R RP P P P
 
 
 
              r[   r   c                  ~     e Zd ZU ded<   ded<   ded<   ded<   ded	<   dd fdZddZddZddZddZddZ	 xZ
S )rw   zfloat | Noner   r   r   r   r   r   r   r   Nr   r   r   r   rf   rg   c                    t                                          ||           d | _        d| _        d| _        d | _        d| _        d S )Nr.   F)superrn   r   r   r   r   r   )rm   r   r   	__class__s      r\   rn   z FontConfigSearchPattern.__init__  sD    W---		r[   r   c                    |                                   |                                 }|rt          | j        |          S d S ry   )_prepare_search_pattern
_get_matchr~   re   )rm   r   s     r\   r   zFontConfigSearchPattern.match  sD    $$&&&** 	L)$*:NKKKtr[   c                   | j         |                                  |                     t          | j                   |                     t          | j                   |                     t          t          | j
                            |                     t          |                     | j                             |                     t          t           | j                            |                                  d S ry   )r   r   r   	FC_FAMILYr   r   FC_SIZEr   	FC_WEIGHTname_to_weightr   r   FC_SLANTr   r   FC_WIDTHname_to_stretchr   _substitute_defaultsrl   s    r\   r   z/FontConfigSearchPattern._prepare_search_pattern  s    = LLNNNDI...$),,,N4;$?@@@(D$9$9$+$F$FGGG(ODL$ABBB!!#####r[   c                    | j         sJ | j        sJ | j                            d | j         t                     | j                            | j                    d S ry   )r   re   r   FcMatchPatternr   rl   s    r\   r   z,FontConfigSearchPattern._substitute_defaults  sZ    }}++D$-PPP,,T];;;;;r[   c                    | j         sJ | j        sJ t                      }| j                            d| j         t	          |                    }t          |j                  r|S d S rp   )r   re   FcResultr   r   r   r   )rm   match_resultmatch_patterns      r\   r   z"FontConfigSearchPattern._get_match  si    }}zz(44Qu\GZGZ[[L.// 	!  tr[   c                .    |                                   d S ry   r   rl   s    r\   rs   zFontConfigSearchPattern.dispose      r[   ry   r   )rf   r   r   )rf   r   )rV   rW   rX   r   rn   r   r   r   r   rs   __classcell__r   s   @r\   rw   rw   z  s         LLLKKKLLL                	$ 	$ 	$ 	$< < < <
 
 
 
       r[   rw   c                       e Zd Zd fdZedd	            Zedd            Zedd            Zedd            Zedd            Z	edd            Z
edd            ZddZ xZS )r~   r   r   r   r   rf   rg   c                L    t                                          ||           d S ry   )r   rn   )rm   r   r   r   s      r\   rn   zFontConfigSearchResult.__init__  s#    ^44444r[   r   c                6    |                      t                    S ry   )r   r   rl   s    r\   r   zFontConfigSearchResult.name  s    	***r[   r   c                6    |                      t                    S ry   )r   r   rl   s    r\   r   zFontConfigSearchResult.size      (((r[   c                L    t           |                     t                             S ry   )weight_to_namer   r   rl   s    r\   r   zFontConfigSearchResult.weight  s    d..y99::r[   r   c                H    |                      t                    t          k    S ry   )r   r   r   rl   s    r\   r   zFontConfigSearchResult.italic  s      **o==r[   r   c                6    |                      t                    S ry   )r   
FC_FT_FACErl   s    r\   facezFontConfigSearchResult.face  s    ~~j)))r[   c                L    t           |                     t                             S ry   )stretch_to_namer   r   rl   s    r\   r   zFontConfigSearchResult.stretch  s    t00::;;r[   c                6    |                      t                    S ry   )r   FC_FILErl   s    r\   r   zFontConfigSearchResult.file  r  r[   c                .    |                                   d S ry   r   rl   s    r\   rs   zFontConfigSearchResult.dispose  r   r[   )r   r   r   r   rf   rg   )rf   r   )rf   r   r   )rf   r   r   )rV   rW   rX   rn   r   r   r   r   r   r	  r   r   rs   r   r   s   @r\   r~   r~     s1       5 5 5 5 5 5 + + + X+ ) ) ) X) ; ; ; X; > > > X> * * * X* < < < X< ) ) ) X)       r[   r~   r   r   rf   bool | Nonec                    | t           k    rdS | t          t          t          fv rdS | t          k    rd}t          |          d S )NTFzFontConfig ran out of memory.)FcResultMatchFcResultNoMatchFcResultTypeMismatchFcResultNoIdFcResultOutOfMemoryr   )r   msgs     r\   r   r     sN    t/#7FFFu$$$-C   4r[   c                 :    t           st                      a t           S ry   )_fontconfig_instancerc   rZ   r[   r\   get_fontconfigr    s     ,)||r[   )r   r   rf   r  )rf   rc   )b__doc__
__future__r   collectionsr   ctypesr   r   r   r   r	   r
   r   r   r   r   typingr   pyglet.font.baser   
pyglet.libr   pyglet.utilr   r   pyglet.font.freetype_libr   ranger  r  r  r  r  r   r   r   r   r   r  r  r   FC_WEIGHT_THINFC_WEIGHT_EXTRALIGHTFC_WEIGHT_ULTRALIGHTFC_WEIGHT_LIGHTFC_WEIGHT_DEMILIGHTFC_WEIGHT_SEMILIGHTFC_WEIGHT_BOOKFC_WEIGHT_REGULARFC_WEIGHT_NORMALFC_WEIGHT_MEDIUMFC_WEIGHT_DEMIBOLDFC_WEIGHT_SEMIBOLDFC_WEIGHT_BOLDFC_WEIGHT_EXTRABOLDFC_WEIGHT_ULTRABOLDFC_WEIGHT_BLACKFC_WEIGHT_HEAVYFC_WEIGHT_EXTRABLACKFC_WEIGHT_ULTRABLACKr   r  FC_WIDTH_ULTRACONDENSEDFC_WIDTH_EXTRACONDENSEDFC_WIDTH_CONDENSEDFC_WIDTH_SEMICONDENSEDFC_WIDTH_NORMALFC_WIDTH_SEMIEXPANDEDFC_WIDTH_EXPANDEDFC_WIDTH_EXTRAEXPANDEDFC_WIDTH_ULTRAEXPANDEDr   r  r   r   FC_SLANT_OBLIQUE
FcTypeVoidr   r   r   
FcTypeBoolFcTypeMatrixFcTypeCharSetr   FcTypeLangSetra   r   FcMatchFontFcMatchKindrL   r^   rc   r   rw   r~   r   r  r  rZ   r[   r\   <module>rH     sN   P P " " " " " " # # # # # # f f f f f f f f f f f f f f f f f f f f f f f f             * * * * * * # # # # # # & & & & & & & & 1000000 a	GH	
'&//77GH	WX

'&//77 +  )  $   '  ) ! + .	 	
 N	
 & & _ $     " " N $  $!" _#$ &'  . 						             --#+)!++ " 	(	8.-OX>
OH   %((	 a    E       i   b b b b b b b bJb b b b b b b bJ8 8 8 8 8/ 8 8 8v! ! ! ! !. ! ! !H                r[   