U e5d')� @s�dddddddddd d d g Zd d lZdZdZdZeeZdZeddZdZdZ eee eZ ddd�Z d d l Z d dlmZiZGdd�de�ZGdd �d ed�ZGdd �d �Zd S)� ascii_letters�ascii_lowercase�ascii_uppercase�capwords�digits� hexdigits� octdigits� printable� punctuation� whitespace� Formatter�Template�Nz ZabcdefghijklmnopqrstuvwxyzZABCDEFGHIJKLMNOPQRSTUVWXYZ� 0123456789ZabcdefZABCDEFZ01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~cCs|pd�dd�|�|�D��S)N� css|]}|��VqdS�N)� capitalize)�.0�x�r�/usr/lib64/python3.8/string.py� 0szcapwords..)�join�split)�s�seprrrr%s )�ChainMapcs eZdZdZ�fdd�Z�ZS)�_TemplateMetaclassa/ %(delim)s(?: (?P%(delim)s) | # Escape sequence of two delimiters (?P%(id)s) | # delimiter and a Python identifier {(?P%(bid)s)} | # delimiter and a braced identifier (?P) # Other ill-formed delimiter exprs ) csbtt|��|||�d|kr$|j}n$tjt�|j�|j|jp@|jd�}t� ||j tj B�|_dS)N�pattern)Zdelim�idZbid) �superr�__init__r�_re�escape� delimiter� idpattern�braceidpattern�compile�flags�VERBOSE)�cls�name�basesZdctr�� __class__rrr Cs  �z_TemplateMetaclass.__init__)�__name__� __module__� __qualname__rr � __classcell__rrr,rr9s rc@sFeZdZdZdZdZejZdd�Z dd�Z e fdd �Z e fd d �Z dS) r �$z(?a:[_a-z][_a-z0-9]*)NcCs ||_dSr)�template)�selfr3rrrr \szTemplate.__init__cCsd|�d�}|jd|�jdd�}|s.d}d}n"|td�|dd���}t|�}td||f��dS)N�invalidT)�keepends�������z.Invalid placeholder in string: line %d, col %d)�startr3� splitlines�lenr� ValueError)r4�mo�i�lines�colno�linenorrr�_invalidas �zTemplate._invalidc s:�tkr|�n|rt|�����fdd�}�j�|�j�S)Ncsd|�d�p|�d�}|dk r(t�|�S|�d�dk r<�jS|�d�dk rT��|�td�j��dS�N�namedZbracedZescapedr5z#Unrecognized named group in pattern)�group�strr#rCr=r�r>rE��mappingr4rr�convertss  �z$Template.substitute..convert��_sentinel_dict� _ChainMapr�subr3�r4rJZkwsrKrrIr� substitutems   zTemplate.substitutec s:�tkr|�n|rt|�����fdd�}�j�|�j�S)Ncs�|�d�p|�d�}|dk rHzt�|�WStk rF|��YSX|�d�dk r\�jS|�d�dk rr|��Std�j��dSrD)rFrG�KeyErrorr#r=rrHrIrrrK�s�z)Template.safe_substitute..convertrLrPrrIr�safe_substitute�s   zTemplate.safe_substitute)r.r/r0r#r$r%r!� IGNORECASEr'r rCrMrQrSrrrrr Ps )� metaclassc@sVeZdZdd�Zdd�Zddd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dS)r cOs|�|||�Sr)�vformat)r4� format_string�args�kwargsrrr�format�szFormatter.formatcCs.t�}|�||||d�\}}|�|||�|S)N�)�set�_vformat�check_unused_args)r4rWrXrY� used_args�result�_rrrrV�szFormatter.vformatr c Cs�|dkrtd��g}|�|�D]�\}} } } |r8|�|�| dk r| dkrj|dkrXtd��t|�} |d7}n| ��r�|r~td��d}|�| ||�\} } |�| �|�| | �} |j| ||||d|d�\} }|�|� | | ��qd� |�|fS)Nr zMax string recursion exceededr8FzJcannot switch from manual field specification to automatic field numberingr7)�auto_arg_index) r=�parse�appendrG�isdigit� get_field�add� convert_fieldr]� format_fieldr)r4rWrXrYr_Zrecursion_depthrbr`Z literal_text� field_name� format_spec� conversion�objZarg_usedrrrr]�s<�    � zFormatter._vformatcCst|t�r||S||SdSr)� isinstance�int)r4�keyrXrYrrr� get_value�s zFormatter.get_valuecCsdSrr)r4r_rXrYrrrr^�szFormatter.check_unused_argscCs t||�Sr)rZ)r4�valuerkrrrri�szFormatter.format_fieldcCsN|dkr |S|dkrt|�S|dkr,t|�S|dkrs4�   Q