
    \
j-              	          d Z ddlmZ ddlT ddlZddlmZmZ 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dZdZdZdZ ed          \	  ZZZZ Z!Z"Z#Z$Z%eZ& ed          \  Z'Z(eZ) G d de*          Z+ G d de,          Z- G d d          Z. G d d          Z/ G d de/          Z0 G d de/          Z1d Z2da3d  Z4dS )!zL
Wrapper around the Linux FontConfig library. Used to find available fonts.
    )OrderedDict)*N)asbytesasstr)FontException   familysizeslantweightftfacefileP      d   	      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__c_char_pc_intc_doublec_void_p_fields_     P/DATA/AppData/hermes/venv/lib/python3.11/site-packages/pyglet/font/fontconfig.pyr   r   U   sT        	h	e	e	h	h	h	h	h	h
HHHr(   r   c                       e Zd ZdefdefgZdS )FcValuetypeuN)r   r    r!   FcTyper   r&   r'   r(   r)   r+   r+   c   s%        		mHHHr(   r+   c                   V    e Zd Zd Zd Zd ZddZd Zd Zd	 Z	d
 Z
ed             ZdS )
FontConfigc                 l    |                                  | _        t                      | _        d| _        d S )N   )_load_fontconfig_library_fontconfigr   _search_cache_cache_sizeselfs    r)   __init__zFontConfig.__init__m   s0    88::(]]r(   c                     t          | j                  dk    rC| j                                                                         t          | j                  dk    C| j                                         d | _        d S Nr   )lenr5   popitemdisposer4   FcFinir7   s    r)   r>   zFontConfig.disposer   sv    $$%%))&&((00222 $$%%)) 	!!!r(   c                 *    t          | j                  S N)FontConfigSearchPatternr4   r7   s    r)   create_search_patternz FontConfig.create_search_patterny   s    &t'7888r(      Fc                    |                      ||||          }|r|S |                                 }||_        ||_        ||_        ||_        |                                }|                     ||           |                                 |S rA   )	_get_from_search_cacherC   namer
   bolditalicmatch_add_to_search_cacher>   )r8   rG   r
   rH   rI   resultsearch_patterns          r)   	find_fontzFontConfig.find_font|   s    ,,T4vFF 	M3355""" &%%''!!.&999   r(   c                     |                      |          }|r<|r8|j        r1|j                                        |                                k    rdS dS dS )NFT)rN   rG   lower)r8   rG   rL   s      r)   	have_fontzFontConfig.have_font   s[    %% 	  (9(9(;(;tzz||(K(Ku45r(   c                 R    | j                             |t          |                    S rA   )r4   FcFreeTypeCharIndexord)r8   ft_face	characters      r)   
char_indexzFontConfig.char_index   s!    33GS^^LLLr(   c                     || j         |j        |j        |j        |j        f<   t          | j                   | j        k    r5| j                             d          d                                          d S d S )NF)last   )	r5   rG   r
   rH   rI   r<   r6   r=   r>   )r8   rM   result_patterns      r)   rK   zFontConfig._add_to_search_cache   s     7E 	N/*/*/*13 	4 t!""T%555&&E&2215==????? 65r(   c                 Z    | j                             ||||fd           }|r	|j        r|S d S rA   )r5   getis_valid)r8   rG   r
   rH   rI   rL   s         r)   rF   z!FontConfig._get_from_search_cache   s>    #''tT6(BDII 	fo 	M4r(   c                     t           j                            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        _        | S )N
fontconfig)pygletlibload_libraryFcInitr%   FcPatternBuildrestypeFcPatternCreateFcFontMatchc_uintrS   r"   r$   FcPatternAddDoubleargtypesr#   FcPatternAddIntegerFcPatternAddStringFcConfigSubstituteFcDefaultSubstituteFcPatternDestroyFcPatternGetFTFaceFcPatternGet)r`   s    r)   r3   z#FontConfig._load_fontconfig_library   s    Z,,\::
,4
!)-5
"*)1
&17
&.2:Hh1O
%.3;Xu2M
&/2:Hh1O
%.2:He1L
%.3;*
&/+3Xx*H
'08z
#,2:HeX1V
%.,4hx+P
(r(   N)rD   FF)r   r    r!   r9   r>   rC   rN   rQ   rW   rK   rF   staticmethodr3   r'   r(   r)   r0   r0   l   s          
     9 9 9      M M M@ @ @     \  r(   r0   c                       e Zd ZddZed             Zd Zd Zed             Z	ed             Z
d Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )FontConfigPatternNc                 "    || _         || _        d S rA   r4   _pattern)r8   r`   patterns      r)   r9   zFontConfigPattern.__init__   s    %r(   c                     | j         o| j        S rA   rw   r7   s    r)   r^   zFontConfigPattern.is_valid   s    1DM1r(   c                 f    | j         rJ | j        sJ | j                                        | _         d S rA   )rx   r4   rg   r7   s    r)   _createzFontConfigPattern._create   s9    =   (88::r(   c                 v    | j         sJ | j        sJ | j                            | j                    d | _         d S rA   )rx   r4   rp   r7   s    r)   _destroyzFontConfigPattern._destroy   sB    }}))$-888r(   c                 "    | rt           nt          S rA   )FC_WEIGHT_BOLDFC_WEIGHT_REGULAR)rH   s    r)   _bold_to_weightz!FontConfigPattern._bold_to_weight   s    !%<~~+<<r(   c                 "    | rt           nt          S rA   )FC_SLANT_ITALICFC_SLANT_ROMAN)rI   s    r)   _italic_to_slantz"FontConfigPattern._italic_to_slant   s    "(<n<r(   c                     | j         sJ |sJ | j        sJ |sd S |                    d          }| j                            | j         |t	          |                     d S )Nutf8)rx   r4   encoderm   r   r8   rG   values      r)   _set_stringzFontConfigPattern._set_string   sn    }}t 	FV$$++DM4PPPPPr(   c                     | j         sJ |sJ | j        sJ |sd S | j                            | j         |t          |                     d S rA   )rx   r4   rj   r$   r   s      r)   _set_doublezFontConfigPattern._set_double   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 rA   )rx   r4   rl   r#   r   s      r)   _set_integerzFontConfigPattern._set_integer   s]    }}t 	F,,T]D%,,OOOOOr(   c                     | j         sJ |sJ | j        sJ t                      }| j                            | j         |dt	          |                    }t          |          r|S d S r;   )rx   r4   r+   rr   byref_handle_fcresult)r8   rG   r   rL   s       r)   
_get_valuezFontConfigPattern._get_value   sn    }}t		!..t}dAuU||TTF## 	L4r(   c                     |                      |          }|r)|j        t          k    rt          |j        j                  S d S rA   )r   r,   FcTypeStringr   r-   r   r   s      r)   _get_stringzFontConfigPattern._get_string	  s>    %% 	UZ<//###4r(   c                 l    |                      |          }|r|j        t          k    r|j        j        S d S rA   )r   r,   FcTypeFTFacer-   r   r   s      r)   	_get_facezFontConfigPattern._get_face  6    %% 	UZ<//794r(   c                 l    |                      |          }|r|j        t          k    r|j        j        S d S rA   )r   r,   FcTypeIntegerr-   r   r   s      r)   _get_integerzFontConfigPattern._get_integer  s6    %% 	UZ=00794r(   c                 l    |                      |          }|r|j        t          k    r|j        j        S d S rA   )r   r,   FcTypeDoubler-   r   r   s      r)   _get_doublezFontConfigPattern._get_double!  r   r(   rA   )r   r    r!   r9   propertyr^   r|   r~   rs   r   r   r   r   r   r   r   r   r   r   r'   r(   r)   ru   ru      s               2 2 X2; ; ;
   = = \= = = \=
Q 
Q 
QR R RP P P
 
 
          r(   ru   c                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )rB   c                     t          t          |                               |           d | _        d| _        d| _        d | _        d S )NF)superrB   r9   rG   rH   rI   r
   )r8   r`   	__class__s     r)   r9   z FontConfigSearchPattern.__init__+  sB    %t,,55jAAA					r(   c                     |                                   |                                 }|rt          | j        |          S d S rA   )_prepare_search_pattern
_get_matchFontConfigSearchResultr4   )r8   r[   s     r)   rJ   zFontConfigSearchPattern.match3  sC    $$&&&** 	)$*:NKKK4r(   c                    |                                   |                     t          | j                   |                     t
          | j                   |                     t          | 	                    | j
                             |                     t          |                     | j                             |                                  d S rA   )r|   r   	FC_FAMILYrG   r   FC_SIZEr
   r   	FC_WEIGHTr   rH   FC_SLANTr   rI   _substitute_defaultsr7   s    r)   r   z/FontConfigSearchPattern._prepare_search_pattern<  s    DI...$),,,)T%9%9$)%D%DEEE(D$9$9$+$F$FGGG!!#####r(   c                     | j         sJ | j        sJ | j                            d | j         t                     | j                            | j                    d S rA   )rx   r4   rn   FcMatchPatternro   r7   s    r)   r   z,FontConfigSearchPattern._substitute_defaultsE  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 r;   )rx   r4   FcResultrh   r   r   r   )r8   match_resultmatch_patterns      r)   r   z"FontConfigSearchPattern._get_matchL  si    }}zz(44Qu\GZGZ[[L.// 	  4r(   c                 .    |                                   d S rA   r~   r7   s    r)   r>   zFontConfigSearchPattern.disposeX      r(   )
r   r    r!   r9   rJ   r   r   r   r>   __classcell__r   s   @r)   rB   rB   *  s              $ $ $< < <
 
 
      r(   rB   c                        e Zd Z fdZed             Zed             Zed             Zed             Zed             Z	ed             Z
d Z xZS )	r   c                 Z    t          t          |                               ||           d S rA   )r   r   r9   )r8   r`   r[   r   s      r)   r9   zFontConfigSearchResult.__init__]  s*    $d++44ZPPPPPr(   c                 6    |                      t                    S rA   )r   r   r7   s    r)   rG   zFontConfigSearchResult.name`  s    	***r(   c                 6    |                      t                    S rA   )r   r   r7   s    r)   r
   zFontConfigSearchResult.sized      (((r(   c                 H    |                      t                    t          k    S rA   )r   r   r   r7   s    r)   rH   zFontConfigSearchResult.boldh  s      ++~==r(   c                 H    |                      t                    t          k    S rA   )r   r   r   r7   s    r)   rI   zFontConfigSearchResult.italicl  s      **o==r(   c                 6    |                      t                    S rA   )r   
FC_FT_FACEr7   s    r)   facezFontConfigSearchResult.facep  s    ~~j)))r(   c                 6    |                      t                    S rA   )r   FC_FILEr7   s    r)   r   zFontConfigSearchResult.filet  r   r(   c                 .    |                                   d S rA   r   r7   s    r)   r>   zFontConfigSearchResult.disposex  r   r(   )r   r    r!   r9   r   rG   r
   rH   rI   r   r   r>   r   r   s   @r)   r   r   \  s        Q Q Q Q Q + + X+ ) ) X) > > X> > > X> * * X* ) ) X)      r(   r   c                     | t           k    rdS | t          t          t          fv rdS | t          k    rt          d          d S )NTFzFontConfig ran out of memory.)FcResultMatchFcResultNoMatchFcResultTypeMismatchFcResultNoIdFcResultOutOfMemoryr   )rL   s    r)   r   r   |  sM    t	O%9<H	H	Hu	&	&	&;<<< 
'	&r(   c                  :    t           st                      a t           S rA   )_fontconfig_instancer0   r'   r(   r)   get_fontconfigr     s     ,)||r(   )5__doc__collectionsr   ctypes
pyglet.libra   pyglet.utilr   r   pyglet.font.baser   ranger   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   
FcTypeVoidr   r   r   
FcTypeBoolFcTypeMatrixFcTypeCharSetr   FcTypeLangSetr.   r   FcMatchFontFcMatchKindUnionr   	Structurer+   r0   ru   rB   r   r   r   r   r'   r(   r)   <module>r      s  F  $ # # # # #         & & & & & & & & * * * * * * a	GH	
'&//77GH	WX

'&//  %((	 a    E       i   R R R R R R R Rjf f f f f f f fR/ / / / // / / /d    .   @= = =           r(   