
    ucH5                         d Z ddlZddl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dlZddlmZ ddlZd Z G d d          ZdS )z5
Base Class for DesktopEntry, IconTheme and IconData
    N)ParsingErrorDuplicateGroupErrorNoGroupError
NoKeyErrorDuplicateKeyErrorValidationErrordebug)uc                 V    	 |                      dd           dS # t          $ r Y dS w xY w)z>Return True if a string consists entirely of ASCII characters.asciistrictTF)encodeUnicodeError)ss    -/usr/lib/python3/dist-packages/xdg/IniFile.pyis_asciir      sB    	(###t   uus    
((c                       e Zd ZdZdZdZdZdZd"dZd Z	d"dZ
d#dZd	 Zd
 Zd"dZd$dZd Zd Zd%dZd Zd Zd Zd Zd Zd Zd Zd&dZd&dZd Zd Zd'dZd Zd Z d"d Z!d! Z"dS )(IniFile NFc                 ^    t                      | _        |r|                     |           d S d S N)dictcontentparse)selffilenames     r   __init__zIniFile.__init__   s7    vv 	!JJx     	! 	!    c                 6    t          | j        |j                  S r   )cmpr   )r   others     r   __cmp__zIniFile.__cmp__#   s    4<///r   c                    | j         }t          j                            |          st	          d|          	 t          j        |ddd          }n!# t          $ r}t          r|Y d}~dS d}~ww xY w|5  |D ]N}|	                                }|s|d         dk    r'|d         d	k    rZ|
                    d	                              d
          }t          r%|                     |          rt          ||          i ||<   	 |                    dd          \  }}	n!# t          $ r t	          d|z   |          w xY w|	                                }	 t          r'|                     ||          rt#          |||          |		                                ||         |<   +# t$          t&          f$ r t	          d|          w xY w	 ddd           n# 1 swxY w Y   || _        d| _        |r+|D ]}
|
|v r	|
| _         nt	          d|d         z  |          | j                             di           }|                    d|                    dd                    | _        dS )zyParse an INI file.
        
        headers -- list of headers the parser will try to select as a default header
        File not foundrutf-8replace)encodingerrorsNr   #[]=   zInvalid line: z#Parsing error on key, group missingFz[%s]-Header missingzDesktop EntryzX-GNOME-Gettext-DomainzX-Ubuntu-Gettext-Domain)r   ospathisfiler   ioopenIOErrorr	   striplstriprstriphasGroupr   split
ValueErrorhasKeyr   
IndexErrorUnboundLocalErrorr   tainteddefaultGroupgetgettext_domain)r   r   headersr   fdelinecurrentGroupkeyvalueheaders              r   r   zIniFile.parse&   s9    ,w~~h'' 	;/:::		 3KKKBB 	 	 	 		  	\ 	\ \ \zz|| \!W^^!W^^#';;s#3#3#:#:3#?#?L 3|!<!< 31,III02--N%)ZZQ%7%7
UU% N N N*+;d+BHMMMN ))++C\  GT[[l%C%C G"3Cx"P"PP9>GL1#66&(9: \ \ \*+PRZ[[[\9\	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\ 	\@ !  	Q! Q QW$$(.D%E % ##871:#ExPPP L_b11ee$<EE+T224 4s[   A 
A/	A**A/4BGDGD==GAF" G""GGGGstringc                    |s| j         }|| j        v r|| j        |         v r|rr|                     ||          }|                    d          s| j        s| j        |         |         }nt          j        | j        | j        |         |                   }nc| j        |         |         }nO|st          rD|| j        vrt          || j	                  || j        |         vrt          ||| j	                  nd}|dk    r|                     |          }g }	n|g}|D ]}|dk    r|                     |          }n|dk    r#	 t          |          }n# t          $ r d}Y nw xY w|dk    r#	 t          |          }ni# t          $ r d}Y n[w xY w|d	k    rt!          j        |          }n<|d
k    r6|                    d          \  }
}t          |
          t          |          f}|dk    r|	                    |           |}	|	S )Nr,   r   Tbooleanintegerr   numericg        regexpoint,)r?   r   _IniFile__addLocaleendswithrA   gettextdgettextr	   r   r   r   getList_IniFile__getBooleanintr:   floatrecompiler9   append)r   rG   grouplocaletypelistr   rH   valuesresultxys               r   r@   zIniFile.geto   si    	&%E T\!!t|E/B(B(B 1&&sE22<<$$ \D,? \ L/4EE#,T-@$,uBUVYBZ[[EEU+C0  ,,&udm<<<U 333$S%??? 4 4<<\\%((FFFWF 	 	Ey  ))%00""JJEE!   EEE"" !%LLEE!      EEE 
5)){{3''1AAt||e$$$$s$   EE E *E::F	F	c                 N   t          j        d|          rt          j        d|          }nYt          j        d|          rt          j        d|          }n.t          j        d|          rt          j        d|          }n|g}|d         dk    r|                                 |S )Nz	(?<!\\)\;z(?<!\\);z	(?<!\\)\|z(?<!\\),r   )rZ   searchr9   pop)r   rJ   r`   s      r   rV   zIniFile.getList   s    9\6** 	8K00DDY|V,, 	8L&11DDY{F++ 	8K00DD8D8r>>HHJJJr   c                 V    |dk    s|dk    s|dk    rdS |dk    s|dk    s|dk    rdS dS )	Nr.   trueTrueTr   falseFalseF )r   rL   s     r   __getBooleanzIniFile.__getBoolean   sK    a<<7f,,60A0A4\\W//7g3E3E5ur   c                 v    |s| j         }t          j        j        D ]}|d|d}|| j        |         v r|c S |S )z3add locale to key according the current lc_messagesr+   r,   )r?   xdgLocalelangsr   )r   rG   r]   langlangkeys        r   __addLocalezIniFile.__addLocale   sa      	&%EJ$ 	 	D"%##ttt,G$,u--- . 
r   Allc                 h   g | _         g | _        t          j                            | j                  d         | _        |                                  | j        D ]}| 	                    |           | j        |         D ]^}| 
                    || j        |         |         |           | j        |         |         dk    r| j                             d|z             _d}|dk    s|dk    r| j         D ]
}|d|z   z  }|dk    s|dk    r| j        D ]
}|d|z   z  }|rt          || j                  dS )	zValidate the contents, raising :class:`~xdg.Exceptions.ValidationError`
        if there is anything amiss.
        
        report can be 'All' / 'Warnings' / 'Errors'
        r.   r   zValue of Key '%s' is emptyrw   Warningsz
- ErrorsN)warningsr)   r/   r0   splitextr   fileExtensioncheckExtrasr   
checkGroupcheckKeyr\   r   )r   reportr]   rG   msgrE   s         r   validatezIniFile.validate   su      W--dm<<Q? 	 \ 	M 	MEOOE"""|E* M Mc4<#6s#;UCCC<&s+r11M(()E)KLLL	M U??f
22 % %v}$U??f00 % %v}$ 	6!#t}555	6 	6r   c                     d S r   rn   r   r]   s     r   r   zIniFile.checkGroup       r   c                     d S r   rn   )r   rG   rH   r]   s       r   r   zIniFile.checkKey   r   r   c                 <   |dk    r|                      |          }n|g}|D ]}|dk    r|                     |          }|dk    r$|dk    r|                     |          }no|dk    r|                     |          }nS|dk    r|                     |          }n7|dk    r|                     |          }n|dk    r|                     |          }|d	k    r!| j                            d
|d|           |dk    r| j	                            d|z             d S )NTrJ   localestringrL   rN   rM   rO   rP   r.   'z' is not a valid    zValue of key '%s' is deprecated)
rV   checkStringcheckBooleancheckNumbercheckInteger
checkRegex
checkPointr)   r\   r{   )r   rG   rH   r_   r`   ra   codes          r   
checkValuezIniFile.checkValue   sZ   4<<\\%((FFWF 	N 	NEx''..~%%""((//""''..""((//u--u--qyy"""uuudd#KLLLL$$%F%LMMM%	N 	Nr   c                     d S r   rn   r   s    r   r~   zIniFile.checkExtras  r   r   c                 B    |dk    s|dk    rdS |dk    s|dk    sdS d S d S )N10r   rj   rl   r.   rn   r   rH   s     r   r   zIniFile.checkBoolean  s=    SLLESLL16//Ug%5%51 "/%5%5r   c                 6    	 t          |           d S #  Y dS xY wNr.   )rY   r   s     r   r   zIniFile.checkNumber"  s&    	%LLLLL	11    c                 6    	 t          |           d S #  Y dS xY wr   )rX   r   s     r   r   zIniFile.checkInteger)  s&    	JJJJJ	11r   c                 4    t          j        d|          sdS d S )Nz^[0-9]+,[0-9]+$r.   )rZ   matchr   s     r   r   zIniFile.checkPoint0  s&    x)511 	1	 	r   c                 (    t          |          rdndS )Nr   r.   )r   r   s     r   r   zIniFile.checkString4  s    UOO*qq*r   c                 @    	 t          j        |           d S #  Y dS xY wr   )rZ   r[   r   s     r   r   zIniFile.checkRegex7  s-    	Ju	11s    c                    |s| j         st          dd          |r|| _         n| j         }t          j                            |          rmt          j                            t          j                            |                    s1t          j        t          j                            |                     t          j        |dd          5 }|r"|	                    t          d                     | j        r|	                    t          d          | j        z             | j        | j                                                 D ],\  }}|	                    t          d          ||fz             -|	                    t          d	                     | j                                        D ]\  }}|| j        k    r|	                    t          d          |z             |                                D ],\  }}|	                    t          d          ||fz             -|	                    t          d	                     	 d d d            n# 1 swxY w Y   |rWt          j        |          j        }|t          j        z  t          j        z  t          j        z  }	t          j        ||	           d
| _        d S )Nr$   r   wr&   )r(   z#!/usr/bin/env xdg-open
z[%s]
z%s=%s

F)r   r   r/   r0   dirnameisdirmakedirsr2   r3   writer
   r?   r   itemsstatst_modeS_IXUSRS_IXGRPS_IXOTHchmodr>   )
r   r   trustedfprG   rH   namer]   oldmodemodes
             r   r   zIniFile.write>  s    	5 	5/444 	%$DMM}H7??8$$ 	3RW]]27??8;T;T-U-U 	3K11222WXsW555 	&  9677888  "8t'88999$(L1B$C$I$I$K$K : :LS%HHQy\\S%L899994!!!!%!3!3!5!5 & &u4,,,HHQx[[4/000(- > >e9e!<====HHQtWW%%%&	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&,  	%gh''/GT\)DL84<GDHXt$$$s   E;IIIc                 P   |s| j         }|dk    rBt          t          j        j                  dk    r |dz   t          j        j        d         z   dz   }	 || j        |         |<   n## t          $ r t          || j                  w xY w|| 	                    ||          k    | _
        d S )NTr   r+   r,   )r?   lenrq   rr   rs   r   KeyErrorr   r   r@   r>   )r   rG   rH   r]   r^   s        r   setzIniFile.setg  s     	&%ET>>c#*"233a77)cj.q11C7C	5',DL$$ 	5 	5 	5udm444	5 #u!5!55s   A$ $ Bc                     |                      |          rt          rt          || j                  d S i | j        |<   d| _        d S NT)r8   r	   r   r   r   r>   r   s     r   addGroupzIniFile.addGroupv  sV    == 	  @)%???@ @ #%DLDLLLr   c                 t    || j         v }|r| j         |= d| _        nt          rt          || j                  |S r   )r   r>   r	   r   r   )r   r]   existeds      r   removeGroupzIniFile.removeGroup~  sH    4<' 	9U#DLL 9"5$-888r   Tc                    |s| j         }	 |r^t          | j        |                   D ]C}t          j        d|z   t
          j        j        z   dz   |          r||k    r| j        |         |= D| j        |                             |          }d| _	        |S # t          $ rC}t          r1||k    rt          || j                  t          ||| j                  Y d }~dS d }~ww xY w)N^$Tr   )r?   r`   r   rZ   r   rq   rr   rO   rh   r>   r   r	   r   r   r   )r   rG   r]   localesr   rH   rD   s          r   	removeKeyzIniFile.removeKey  s    	&%E	 6 e!455 6 6Dxc	CJ,< <s BDII 6dVYkk L/5L'++C00EDLL 	 	 	 ::&udm<<<$S%???rrrrr	s   BB 
C!8CC!c                 4    | j                                         S r   )r   keysr   s    r   groupszIniFile.groups  s    |  """r   c                     || j         v S r   )r   r   s     r   r8   zIniFile.hasGroup  s    $$r   c                 2    |s| j         }|| j        |         v S r   )r?   r   )r   rG   r]   s      r   r;   zIniFile.hasKey  s$     	&%Edl5)))r   c                     | j         S r   )r   r   s    r   getFileNamezIniFile.getFileName  s
    }r   r   )NFrJ   FF)rw   )rJ   F)NFr   )#__name__
__module____qualname__r?   r}   r   rA   r>   r   r"   r   r@   rV   rW   rR   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r8   r;   r   rn   r   r   r   r      s        LMHNG! ! ! !
0 0 0F4 F4 F4 F4R7 7 7 7v       %6 %6 %6 %6P    N N N N4          + + +  ' ' ' 'R7 7 7 7          .# # #% % %* * * *    r   r   )__doc__rZ   r/   r   r2   xdg.Exceptionsr   r   r   r   r   r   r	   
xdg.Localerq   xdg.utilr
   rT   r   r   rn   r   r   <module>r      s                   # # # # # # # # # # # # # # # # # #             X X X X X X X X X Xr   