
    G8c                        d Z ddlmZ ddlZddlZddlmZmZm	Z	m
Z
mZmZmZ dZ ej                  dez        j                   Z ej                  dez        j                   ZdZ ej                  dez        j                   Z ej                  dez        j                   Z G d	 d
      Z  e        e       j.                        Zd Zd Zy)z
A module for parsing and generating `fontconfig patterns`_.

.. _fontconfig patterns:
   https://www.freedesktop.org/software/fontconfig/fontconfig-user.html
    )	lru_cacheN)Literal
ZeroOrMoreOptionalRegex	StringEndParseExceptionSuppressz\\\-:,z\\([%s])z([%s])z\\=_:,c            	           e Zd Z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&d'd(Zd) Zd* Zd+ Zd, Zd- Z	d. Z
d/ Zd0 Zd1 Zy2)3FontconfigPatternParserz
    A simple pyparsing-based parser for `fontconfig patterns`_.

    .. _fontconfig patterns:
       https://www.freedesktop.org/software/fontconfig/fontconfig-user.html
    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                    t        dt        dt        d      j                  | j                        }t        d      j                  | j                        }t        d      j                  | j
                        }t        dt        dt        d      j                  | j                        }|t        t        d      |z         z   j                  | j                        }|t        t        d      |z         z   j                  | j                        }|t        t        d            z   |z   t        t        t        d            |z         z   |z  j                  | j                        }t        |      t        t        d      |z         z   t        t        d	      |z         z   t               z   }|| _        t"        | _        y )
Nz([^z]|(\\[z]))*z([0-9]+\.?[0-9]*|\.[0-9]+)z[a-z]+,=-:)r   family_puncsetParseAction_family_size_name
value_punc_valuer   r   	_families_point_sizesr
   	_propertyr   r   _parserr	   )	selffamilysizenamevaluefamiliespoint_sizespropertypatterns	            @/usr/lib/python3/dist-packages/matplotlib/_fontconfig_pattern.py__init__z FontconfigPatternParser.__init__>   s   $/=

.
& 	 )

.
$ 	 

.
$ 	 $.
;

.
% 	
  .
( 	  .**
+ 	 %& '#,'  .
( 	 
  k 	 ,    c                     i x}| _         	 | j                  j                  |       d| _         | j                  j                          |S # | j                  $ r}t	        d|d|      |d}~ww xY w)z
        Parse the given fontconfig *pattern* and return a dictionary
        of key/value pairs useful for initializing a
        `.font_manager.FontProperties` object.
        zCould not parse font string: 'z'
N)_propertiesr7   parseStringr	   
ValueError
resetCache)r8   r@   propses       rA   parsezFontconfigPatternParser.parsew   s|     $&% 	OLL$$W-
  ! "" 	O;BAFHMNO	Os   A	 	A/A**A/c                 4    t        dt        |d               gS Nz\1r   )family_unescapestrr8   sloctokenss       rA   r/   zFontconfigPatternParser._family   s    s6!9~677rC   c                      t        |d         gS Nr   )floatrP   s       rA   r0   zFontconfigPatternParser._size   s    fQi !!rC   c                      t        |d         gS rU   rO   rP   s       rA   r1   zFontconfigPatternParser._name   s    F1IrC   c                 4    t        dt        |d               gS rM   )value_unescaperO   rP   s       rA   r3   zFontconfigPatternParser._value   s    uc&)n566rC   c                 \    |D cg c]  }t        |       c}| j                  d<   g S c c}w )Nr9   rO   rE   r8   rQ   rR   rS   xs        rA   r4   z!FontconfigPatternParser._families   s+    6<%=c!f%="	 &>   )c                 \    |D cg c]  }t        |       c}| j                  d<   g S c c}w )Nr:   r\   r]   s        rA   r5   z$FontconfigPatternParser._point_sizes   s+    4:#;qCF#; 	 $<r_   c                 2   t        |      dk(  rS|d   | j                  v r@| j                  |d      \  }}| j                  j                  |g       j	                  |       g S |d   }|dd  }| j                  j                  |g       j                  |       g S )N   r   )len
_constantsrE   
setdefaultappendextend)r8   rQ   rR   rS   keyvals         rA   r6   z!FontconfigPatternParser._property   s    v;!ayDOO+??6!95S  ++C4;;C@
 	 )C*C''R077<	rC   N)__name__
__module____qualname____doc__rd   rB   rK   r/   r0   r1   r3   r4   r5   r6    rC   rA   r   r      s1   
-
-
 	-
 	-	

 	,
 	/
 	.
 	.
 	0
 	0
 	,
 	2
 	-
 	-
 	-
  	-!
" 	.#
$ 7605/551
J67-r&8" 7	rC   r   c                     t        j                  |       rt        | t              r| g} dj	                  fd| D              S )z
    Given a string value or a list of string values, run each value through
    the input escape function to make the values into legal font config
    strings.  The result is returned as a string.
    r)   c              3   F   K   | ]  }| dt        |              y w)Nz\\\1rX   ).0r^   escape_funcs     rA   	<genexpr>z_escape_val.<locals>.<genexpr>   s(      &Q}  Q0 &s   !)npiterable
isinstancerO   join)ri   rr   s    `rA   _escape_valrx      s>     ;;sz#s3e88 &# & & &rC   c           
      &   g }| j                         }|$|g k7  r|j                  t        |t                     dD ]D  } t	        | d|z                }||g k7  s |j                  d|dt        |t
                     F dj                  |      S )z[
    Given a dictionary of key/value pairs, generates a fontconfig
    pattern string.
    )stylevariantr   stretchfiler:   get_r,   r*    )
get_familyrf   rx   family_escapegetattrvalue_escaperw   )drI   r9   rh   ri   s        rA   generate_fontconfig_patternr      s    
 E \\^Ffl[78 I K&ga#&(?sbyLLS+c<*HIJ	K 775>rC   )rm   	functoolsr   renumpyrt   	pyparsingr   r   r   r   r   r	   r
   r-   compilesubrN   r   r2   rZ   r   r   rK   parse_fontconfig_patternrx   r   rn   rC   rA   <module>r      s      	 1 1 1 "**[;67;;

9{2377
K*4599rzz)j0155L Lf '9;'>'@'F'FG 
&rC   