U e5dk#�@s�dZddlZddlZddlZddgZdd�Ze�d�jZGdd �d e �Z d d�Z d d �Z d d�Z dd�Zdd�Zdd�Zddgfdd�Zd#dd�Zgfdd�Zdd�Zdd�Zd d!�Zed"kr�e�dS)$z%Mailcap file handling. See RFC 1524.�N�getcaps� findmatchcCsd|krd|dfSdSdS)N�linenor)�r�)�entryrr�/usr/lib64/python3.8/mailcap.py�lineno_sort_key s r z[^\xa1-\U0010FFFF\w@+=:,./-]c@seZdZdZdS)�UnsafeMailcapInputz)Warning raised when refusing unsafe inputN)�__name__� __module__� __qualname__�__doc__rrrrr sr c Cs�i}d}t�D]~}zt|d�}Wntk r8YqYnX|�t||�\}}W5QRX|��D]*\}}||krz|||<q`|||||<q`q|S)a�Return a dictionary containing the mailcap database. The dictionary maps a MIME type (in all lowercase, e.g. 'text/plain') to a list of dictionaries corresponding to mailcap entries. The list collects all the entries for that MIME type from all available mailcap files. Each dictionary contains key-value pairs for that MIME type, where the viewing command is stored with the key "view". r�r)�listmailcapfiles�open�OSError�_readmailcapfile�items)�capsrZmailcap�fpZmorecaps�key�valuerrrrs    cCsPdtjkr"tjd}|�tj�}n*dtjkr8tjd}nd}|ddddg}|S)z7Return a list of all mailcap files found on the system.ZMAILCAPS�HOME�.z /.mailcapz /etc/mailcapz/usr/etc/mailcapz/usr/local/etc/mailcap)�os�environ�split�pathsep)ZpathstrZmailcaps�homerrrr3s    �rcCs t�dtd�t|d�\}}|S)z?Read a mailcap file and return a dictionary keyed by MIME type.z2readmailcapfile is deprecated, use getcaps instead�N)�warnings�warn�DeprecationWarningr)rr�_rrr�readmailcapfileEs �r%c Cs�i}|��}|sq�|ddks|��dkr,q|}|dd�dkrb|��}|sPd}|dd�|}q0t|�\}}|r|sxq|dk r�||d<|d 7}|�d �}tt|��D]}||��||<q�d �|���}||kr�||�|�q|g||<q||fS) a�Read a mailcap file and return a dictionary keyed by MIME type. Each MIME type is mapped to an entry consisting of a list of dictionaries; the list will contain more than one such dictionary if a given MIME type appears more than once in the mailcap file. Each dictionary contains key-value pairs for that MIME type, where the viewing command is stored with the key "view". r�#������Nz\ � rr�/) �readline�strip� parseliner�range�len�join�lower�append) rrr�lineZnextliner�fields�types�jrrrrMs4    rc Cs�g}dt|�}}||kr>t|||�\}}|�|�|d}qt|�dkrNdS|d|d|dd�}}}d|i}|D]V}|�d�}|dkr�|}d} n$|d|���}||dd���} ||kr�qz| ||<qz||fS) z�Parse one entry in a mailcap file and return a dictionary. The viewing command is stored as the value with the key "view", and the rest of the fields produce key-value pairs in the dict. rrr �NNN�view�=r')r/� parsefieldr2�findr,) r3r4�i�n�fieldrr8�restZfkeyZfvaluerrrr-vs*      r-cCsP|}||kr<||}|dkr q�szlookup..rQ)r�sortedr )rrIrrMZ MIMEtypesrrQrrF�s     rFc CsRd}dt|�}}||k�rN||}|d}|dkr^|dkrT|||d�}|d}||}q||}|d}|dkr�||}q|dkr�||}q|dkr�t|�r�d|f}t�|t�dS||}q|d k�r@|} ||kr�||d kr�|d}q�|| |�} |d}t| |�} t| ��r6d | | f}t�|t�dS|| }q|d|}q|S) Nr'rr�%rA�s�tz9Refusing to substitute MIME type %r into a shell command.�{�}z=Refusing to substitute parameter %r (%s) into a shell command)r/rEr!r"r � findparam) r>rIrJrK�resr<r=rCrLrB�nameZparamrrrrG�sH               rGcCsF|��d}t|�}|D](}|d|���|kr||d�SqdS)Nr9r')r1r/)r[rKr=�prrrrY�s  rYc Cs�ddl}t�}|jdd�s(t|�dStdt|j�d�D]�}|j||d�}t|�dkrjtd�dS|d}|d}t||d|�\}}|s�tdt�q:td|�t � |�}|r:td|�q:dS) Nrrr z"usage: mailcap [MIMEtype file] ...r8zNo viewer found forz Executing:z Exit status:) �sysr�argv�showr.r/�printr�typerrH) r]rr<�argsrI�filerOrN�stsrrrrDs&    rDcCs�td�t�D]}td|�qt�|s0t�}td�t�t|�}|D]H}t|�||}|D].}t|�}|D]}td|||�qrt�qbqJdS)NzMailcap files:� zMailcap entries:z %-15s)r`rrrS)r�fnZckeysrarMrN�keys�krrrr_s" r_�__main__)N)rrr!�re�__all__r �compile�searchrE�Warningr rrr%rr-r:rrFrGrYrDr_r rrrr�s* ) )