��
���Lc@s�dZddkZddgZd�Zd�Zd�Zd�Zd �Zd
dgd�Zdd
�Z
gd�Zd�Zd�Z
d�Zedjoe
�ndS(s%Mailcap file handling. See RFC 1524.i����Ntgetcapst findmatchcCs�h}x�t�D]�}yt|d�}Wntj
o
qnXt|�}|i�xG|i�D]9\}}||jo|||<qe|||||<qeWqW|S(s�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".
tr(tlistmailcapfilestopentIOErrortreadmailcapfiletcloset iteritems(tcapstmailcaptfptmorecapstkeytvalue((s/usr/lib/python2.6/mailcap.pyR s
cCsqdtijo tid}|id�}n>dtijotid}nd}|ddddg}|S( s7Return a list of all mailcap files found on the system.tMAILCAPSt:tHOMEt.s /.mailcaps/etc/mailcaps/usr/etc/mailcaps/usr/local/etc/mailcap(tostenvirontsplit(tstrtmailcapsthome((s/usr/lib/python2.6/mailcap.pyR"s
cCsHh}x;|i�}|pPn|ddjp|i�djoq n|}xA|ddjo/|i�}|p
d}n|d |}qUWt|�\}}|o|pq n|id�}x.tt|��D]}||i�||<q�Wdi|�i�}||jo||i|�q |g||<q |S(s�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".
it#ti����s\
s
t/( treadlinetstript parselineRtrangetlentjointlowertappend(RR tlinetnextlineR
tfieldsttypestj((s/usr/lib/python2.6/mailcap.pyR5s4 $
c
Cs(g}dt|�}}xA||jo3t|||�\}}|i|�|d}qWt|�djodS|d|d|d}}}h|d6}xy|D]q}|id�}|djo|}d} n%|| i�}||di�} ||joq�| ||<q�W||fS( s�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.
iiitviewt=RN(NN(R t
parsefieldR#tNonetfindR(
R$R&titntfieldR
R)tresttfkeytfvalue((s/usr/lib/python2.6/mailcap.pyR[s.
cCss|}xS||joE||}|djoPq |djo|d}q |d}q W|||!i�|fS(s/Separate one key-value pair in a mailcap entry.t;s\ii(R(R$R.R/tstarttc((s/usr/lib/python2.6/mailcap.pyR+zs
R)s /dev/nullc Cs�t|||�}xy|D]q}d|jo>t|d||�}|oti|�djoqqjnt|||||�}||fSWdS(sFind a match for a mailcap entry.
Return a tuple containing the command line, and the mailcap entry
used; (None, None) if no match is found. This may invoke the
'test' command of several matching entries before deciding which
entry to use.
ttestiN(NN(tlookuptsubstRtsystemR,( R tMIMEtypeR
tfilenametplisttentriesteR7tcommand((s/usr/lib/python2.6/mailcap.pyR�s
cCs�g}||jo|||}n|id�}|dd}||jo|||}n|dj ot|d�|�}n|S(NRis/*cSs
||jS(((R?R
((s/usr/lib/python2.6/mailcap.pyt<lambda>�s(RR,tfilter(R R;R
R>t MIMEtypes((s/usr/lib/python2.6/mailcap.pyR8�s
c
Csqd}dt|�}}xQ||joC||}|d}|djo:|djo|||d!}|d}n||}q||}|d}|djo||}q|djo||}q|djo||}q|djod|}x-||jo||d jo|d}q�W|||!} |d}|t| |�}q|d|}qW|S(
NRiit%s\tsttt{t}(R t findparam(
R0R;R<R=tresR.R/R6R5tname((s/usr/lib/python2.6/mailcap.pyR9�s:
cCsQ|i�d}t|�}x.|D]&}|| i�|jo ||Sq#WdS(NR*R(R"R (RKR=R/tp((s/usr/lib/python2.6/mailcap.pyRI�s
c Cs�ddk}t�}|idpt|�dSx�tdt|i�d�D]�}|i||d!}t|�djo
dGHdS|d}|d}t||d|�\}}|p
dGtGHqNdG|GHti |�}|o
d G|GHqNqNWdS(
Ni����iis"usage: mailcap [MIMEtype file] ...iR)sNo viewer found fors
Executing:sExit status:(
tsysRtargvtshowRR RttypeRR:( RMR R.targsR;tfileR@R?tsts((s/usr/lib/python2.6/mailcap.pyR7�s(
cCs�dGHxt�D]}d|GHqWH|p
t�}ndGHH|i�}|i�xg|D]_}|GH||}xG|D]?}|i�}|i�x|D]}d|G||GHq�WHqvWqZWdS(NsMailcap files:s sMailcap entries:s %-15s(RRtkeystsort(R tfntckeysRPR>R?RTtk((s/usr/lib/python2.6/mailcap.pyRO�s.
t__main__(t__doc__Rt__all__RRRRR+RR,R8R9RIR7ROt__name__(((s/usr/lib/python2.6/mailcap.pyt<module>s &