
    P/Ph	              	          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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.d/d0d1Zed2             Zed3             Zd4 ZdS )5z
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oneOfz\\\-:,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   t          t                    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    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/_fontconfig_pattern.pycomma_separatedz0_make_fontconfig_parser.<locals>.comma_separated9   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   
_CONSTANTSr   r   r	   )r.   familysizenamevalueprops         r-   _make_fontconfig_parserr=   7   s    7 7 7 @,@@l@@@AAF.//DD===K===>>E$#&)?)??5CTCTTUUD(((4455
3...w777
8
8	9
S44...
/
/	0 ++	r/   c                 T   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 ]h}t          |          d	k    rt          |d                  }|^}}|                    |g                               t          t          |                     i|S )
zs
    Parse a fontconfig *pattern* into a dict that can initialize a
    `.font_manager.FontProperties` object.
    
r   Nr1   r8   r3   r9   
properties   )r=   parseStringr   
ValueErrorexplain
resetCachemap_family_unescapegetlenr7   
setdefaultextend_value_unescape)patternparserparseerrpropsr<   kvs           r-   parse_fontconfig_patternrT   M   sI    %&&FJ""7++ J J J 6sA > >>??TIJ EUEC 0%
2CDDEh%)%.)f		,++ @ @t99>>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).0rR   ds     r-   
<listcomp>z/generate_fontconfig_pattern.<locals>.<listcomp>i   sM     O O O %wq***%%''( O O Or/   )stylevariantr   stretchfiler9   r+   c              3   4   K   | ]}t          |          V  d S )N)_family_escape)rY   fs     r-   	<genexpr>z.generate_fontconfig_pattern.<locals>.<genexpr>m   s*      ??1^A&&??????r/   r   c           	   3   d   K   | ]+\  }}|d| dt          t          |                     V  ,d S )Nr4   r0   )_value_escapestr)rY   rR   rS   s      r-   rc   z.generate_fontconfig_pattern.<locals>.<genexpr>n   sQ       8 8!Q 6!55mCFF3355)68 8r/   )join
get_family)rZ   kvss   ` r-   generate_fontconfig_patternrj   g   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   r   r5   compilesubrG   ra   r6   rL   re   r7   r=   rT   rj    r/   r-   <module>rr      s    ) ( ( ( ( ( ( ( 				T T T T T T T T T T T T T T T T T T T T 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   *   29 9 9 9 9r/   