
    (?e~              	          d Z ddlmZmZ ddlZddlmZmZmZm	Z	m
Z
mZmZ ddlmZ dZ e ej        dez            j        d          Z e ej        d	ez            j        d
          ZdZ e ej        dez            j        d          Z e ej        d	ez            j        d
          Zi dddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2Zed3             Zed4             Zd5 ZdS )6z
A module for parsing and generating `fontconfig patterns`_.

.. _fontconfig patterns:
   https://www.freedesktop.org/software/fontconfig/fontconfig-user.html
    )	lru_cachepartialN)GroupOptionalParseExceptionRegex	StringEndSuppress
ZeroOrMore)_apiz\\\-:,z
\\(?=[%s]) z(?=[%s])z\\z\\=_:,thin)weightlight
extralight
ultralightr   book)r   r   regular)r   r   normal)r   r   medium)r   r   demibold)r   r   semibold)r   r   bold)r   r   	extrabold)r   z
extra boldblack)r   r   heavy)r   r   roman)slantr   italic)r   r   oblique)r   r    )widthzultra-condensed)r!   zextra-condensed)r!   	condensed)r!   zsemi-condensed)r!   expanded)r!   zextra-expanded)r!   zultra-expanded)ultracondensedextracondensedr"   semicondensedr#   extraexpandedultraexpandedc                     d } t          dt           dt           d          }t          d          }t          d          }t          dt           dt           d          }t          |t	          d          z    | |          z   |z            }t            | |          d                    t          d	  | |          d
          z             z   t          d |d          z             z   t                      z   S )Nc                 F    | t          t          d          | z             z   S )N,)r   r
   )elems    >lib/python3.11/site-packages/matplotlib/_fontconfig_pattern.pycomma_separatedz0_make_fontconfig_parser.<locals>.comma_separated;   s     j#!56666    z([^z]|(\\[z]))*z([0-9]+\.?[0-9]*|\.[0-9]+)z[a-z]+=families-sizes:zproperties*)r   _family_punc_value_puncr   r
   r   r   r	   )r.   familysizenamevalueprops         r-   _make_fontconfig_parserr<   9   s   7 7 7 @,@@l@@@AAF.//DD===K===>>E$#&)?)??4GHHD(((4455
3...w777
8
8	9
S44...
/
/	0 ++	r/   c                    t                      }	 |                    |           }n8# t          $ r+}t          dt          j        |d          z             dd}~ww xY w|                                 i }d|v r g t          t          |d                   |d<   d|v rg |d         |d<   |                    dg           D ]}t          |          d	k    rC|d         t          vr!t          j        d
d|d         d           Et          |d                  }|^}}|                    |g                               t          t          |                     |S )zs
    Parse a fontconfig *pattern* into a dict that can initialize a
    `.font_manager.FontProperties` object.
    
r   Nr1   r7   r3   r8   
properties   z3.7zSupport for unknown constants (z@) is deprecated since %(since)s and will be removed %(removal)s.)message)r<   parseStringr   
ValueErrorexplain
resetCachemap_family_unescapegetlen
_CONSTANTSr   warn_deprecated
setdefaultextend_value_unescape)patternparserparseerrpropsr;   kvs           r-   parse_fontconfig_patternrV   P   s    %&&FJ""7++ J J J 6sA > >>??TIJ EUEC 0%
2CDDEh%)%.)f		,++ 
@ 
@t99>>Awj(($ $4Q$4 $4 $45 5 5 5 d1g&DAB&&s?A'>'>????Ls   & 
A&AAc                       fddD             }d                     d                                  D                       d                     d |D                       z   S )z;Convert a `.FontProperties` to a fontconfig pattern string.c           	      J    g | ]}| t          d |                       f S )get_)getattr).0rT   ds     r-   
<listcomp>z/generate_fontconfig_pattern.<locals>.<listcomp>r   sM     O O O %wq***%%''( O O Or/   )stylevariantr   stretchfiler8   r+   c              3   4   K   | ]}t          |          V  d S )N)_family_escape)r[   fs     r-   	<genexpr>z.generate_fontconfig_pattern.<locals>.<genexpr>v   s*      ??1^A&&??????r/   r   c           	   3   d   K   | ]+\  }}|d| dt          t          |                     V  ,d S )Nr4   r0   )_value_escapestr)r[   rT   rU   s      r-   re   z.generate_fontconfig_pattern.<locals>.<genexpr>w   sQ       8 8!Q 6!55mCFF3355)68 8r/   )join
get_family)r\   kvss   ` r-   generate_fontconfig_patternrl   p   s    O O O OMO O OC HH???????gg 8 8"%8 8 8 8 88 9r/   )__doc__	functoolsr   r   re	pyparsingr   r   r   r   r	   r
   r   
matplotlibr   r5   compilesubrG   rc   r6   rN   rg   rJ   r<   rV   rl    r/   r-   <module>ru      s    ) ( ( ( ( ( ( ( 				M M M M M M M M M M M M M M M M M M       7:2:ml&BCCGLL K,$>??CUKK'*"*][%@AAErJJ

;#<==A5II
)) ) )	
 ( + * * , , ( . ) ) )  )!" *#$ 32,1+111  
8   ,   >9 9 9 9 9r/   