o
     JAf#                     @   s   	 d dl Z d dlZd dlZddgZdd ZedjZG dd deZ	d	d Z
d
d Zdd Zdd Zdd Zdd Zddg fddZd"ddZg fddZdd Zdd Zdd  Zed!krce  dS dS )#    Ngetcaps	findmatchc                 C   s   d| v r
d| d fS dS )Nlinenor   )   r    )entryr   r   /usr/lib/python3.10/mailcap.pylineno_sort_key
   s   r	   z[^\xa1-\U0010FFFF\w@+=:,./-]c                   @   s   e Zd ZdS )UnsafeMailcapInputN)__name__
__module____qualname__r   r   r   r   r
      s    r
   c               	   C   s   	 i } d}t  D ]F}zt|d}W n	 ty   Y qw | t||\}}W d    n1 s/w   Y  | D ]\}}|| vrE|| |< q8| | | | |< q8q| S )Nr   r)listmailcapfilesopenOSError_readmailcapfileitems)capsr   ZmailcapfpZmorecapskeyvaluer   r   r   r      s$   	

c                  C   sT   	 dt jv rt jd } | t j}|S dt jv rt jd }nd}|d dddg}|S )NZMAILCAPSHOME.z	/.mailcapz/etc/mailcapz/usr/etc/mailcapz/usr/local/etc/mailcap)osenvironsplitpathsep)ZpathstrZmailcapshomer   r   r   r   3   s   

	
r   c                 C   s"   	 t dtd t| d \}}|S )Nz2readmailcapfile is deprecated, use getcaps instead   )warningswarnDeprecationWarningr   )r   r   _r   r   r   readmailcapfileE   s   r$   c           	      C   s  	 i }	 |   }|s||fS |d dks| dkrq|}|dd  dkr=|   }|s-d}|d d | }|dd  dks%t|\}}|rG|sHq|d urT||d< |d7 }|d	}tt|D ]
}||  ||< q_d	| }||v r}|| | n|g||< q)
Nr   r   # z\

r   /)	readlinestrip	parseliner   rangelenjoinlowerappend)	r   r   r   lineZnextliner   fieldstypesjr   r   r   r   M   s8   

r   c           
      C   s   	 g }dt | }}||k r#t| ||\}}|| |d }||k st |dk r+dS |d |d |dd  }}}d|i}|D ]+}|d}|dk rQ|}d}	n|d |  }||d d   }	||v rhqA|	||< qA||fS )Nr   r   r   NNview=r&   )r.   
parsefieldr1   findr+   )
r2   r3   infieldr   r7   restZfkeyZfvaluer   r   r   r,   v   s.   
 

r,   c                 C   sV   	 |}||k r!| | }|dkrn|dkr|d }n|d }||k s| ||   |fS )N;\r   r   )r+   )r2   r;   r<   startcr   r   r   r9      s   
r9   r7   z	/dev/nullc           
      C   s   	 t |rd|f }t|t dS t| ||}|D ]0}d|v r7t|d ||}|d u r-q|r7t|dkr7qt|| |||}	|	d urJ|	|f  S qdS )NzHRefusing to use mailcap with filename %r. Use a safe temporary filename.r6   testr   )_find_unsafer    r!   r
   lookupsubstr   system)
r   MIMEtyper   filenameplistmsgentrieserC   commandr   r   r   r      s$   
c                    sl   g }|| v r|| |  }| d}|d d }|| v r!|| |  } d ur. fdd|D }t|td}|S )Nr)   r   z/*c                    s   g | ]} |v r|qS r   r   ).0rM   r   r   r   
<listcomp>   s    zlookup.<locals>.<listcomp>rP   )r   sortedr	   )r   rH   r   rL   Z	MIMEtypesr   rP   r   rE      s   
rE   c                 C   sd  d}dt | }}||k r| | }|d }|dkr.|dkr)| ||d  }|d }|| }n~| | }|d }|dkr?|| }nm|dkrH|| }nd|dkrbt|r]d|f }t|t d S || }nJ|d	kr|}	||k r| | d
kr|d }||k r| | d
ksr| |	| }
|d }t|
|}t|rd||
f }t|t d S || }n|d | }||k s|S )Nr&   r   r   %r@   stz9Refusing to substitute MIME type %r into a shell command.{}z=Refusing to substitute parameter %r (%s) into a shell command)r.   rD   r    r!   r
   	findparam)r=   rH   rI   rJ   resr;   r<   rB   rK   rA   nameZparamr   r   r   rF      sF   






#rF   c                 C   sF   |   d } t| }|D ]}|d |   | kr ||d    S qdS )Nr8   r&   )r0   r.   )rZ   rJ   r<   pr   r   r   rX      s   rX   c            	      C   s   dd l } t }| jdd  st| d S tdt| jdD ]G}| j||d  }t|dk r5td  d S |d }|d }t||d|\}}|sNtdt qtd| t	
|}t	|}|rdtd| qd S )	Nr   r   r   z"usage: mailcap [MIMEtype file] ...r7   zNo viewer found forz
Executing:zExit status:)sysr   argvshowr-   r.   printr   typer   rG   waitstatus_to_exitcode)	r\   r   r;   argsrH   filerN   rM   stsr   r   r   rC     s,   



rC   c                 C   s   t d t D ]}t d|  qt   | st } t d t   t| }|D ]$}t | | | }|D ]}t|}|D ]}t d| ||  q9t   q1q%d S )NzMailcap files:	zMailcap entries:z  %-15s)r_   r   r   rR   )r   fnZckeysr`   rL   rM   keyskr   r   r   r^     s"   
r^   __main__)N)r   r    re__all__r	   compilesearchrD   Warningr
   r   r   r$   r   r,   r9   r   rE   rF   rX   rC   r^   r   r   r   r   r   <module>   s.    )
)
