
    b_\3                         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 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    +lib/python3.11/site-packages/xdg/IniFile.pyis_asciir      sB    	(###t   uus    
((c                       e 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 FNc                 ^    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
|
| _         dS t	          d|d         z  |          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 missing)r   ospathisfiler   ioopenIOErrorr	   striplstriprstriphasGroupr   split
ValueErrorhasKeyr   
IndexErrorUnboundLocalErrorr   tainteddefaultGroup)r   r   headersr   fdelinecurrentGroupkeyvalueheaders              r   r   zIniFile.parse$   s    ,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%EE % ##871:#ExPPP	Q 	Qs[   A 
A/	A**A/4BGDGD==GAF" G""GGGGstringc                 t   |s| j         }|| j        v rM|| j        |         v r>|r(| 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   Tbooleanintegerr   numericg        regexpoint,)r?   r   _IniFile__addLocaler	   r   r   r   getList_IniFile__getBooleanintr:   floatrecompiler9   append)r   rE   grouplocaletypelistr   rF   valuesresultxys               r   getzIniFile.geth   s     	&%E T\!!t|E/B(B(B 1U+D,<,<S%,H,HI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$   7DDD D00D?>D?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   )rU   searchr9   pop)r   rH   r[   s      r   rQ   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   rJ   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   rE   rX   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 emptyrs   Warningsz
- ErrorsN)warningsr)   r/   r0   splitextr   fileExtensioncheckExtrasr   
checkGroupcheckKeyrW   r   )r   reportrX   rE   msgrC   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   rj   r   rX   s     r   r{   zIniFile.checkGroup       r   c                     d S r   rj   )r   rE   rF   rX   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 )NTrH   localestringrJ   rL   rK   rM   rN   r.   'z' is not a valid    zValue of key '%s' is deprecated)
rQ   checkStringcheckBooleancheckNumbercheckInteger
checkRegex
checkPointr)   rW   rw   )r   rE   rF   rZ   r[   r\   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   rj   r   s    r   rz   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   rf   rh   r.   rj   r   rF   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.   )rT   r   s     r   r   zIniFile.checkNumber  s&    	%LLLLL	11    c                 6    	 t          |           d S #  Y dS xY wr   )rS   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.   )rU   matchr   s     r   r   zIniFile.checkPoint$  s&    x)511 	1	 	r   c                 (    t          |          rdndS )Nr   r.   )r   r   s     r   r   zIniFile.checkString(  s    UOO*qq*r   c                 @    	 t          j        |           d S #  Y dS xY wr   )rU   rV   r   s     r   r   zIniFile.checkRegex+  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fprE   rF   namerX   oldmodemodes
             r   r   zIniFile.write2  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?   lenrm   rn   ro   r   KeyErrorr   r   r`   r>   )r   rE   rF   rX   rY   s        r   setzIniFile.set[  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.addGroupj  sV    == 	  @)%???@ @ #%DLDLLLr   c                 t    || j         v }|r| j         |= d| _        nt          rt          || j                  |S r   )r   r>   r	   r   r   )r   rX   existeds      r   removeGroupzIniFile.removeGroupr  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   rU   r   rm   rn   rM   rd   r>   r   r	   r   r   r   )r   rE   rX   localesr   rF   rB   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   rE   rX   s      r   r;   zIniFile.hasKey  s$     	&%Edl5)))r   c                     | j         S r   )r   r   s    r   getFileNamezIniFile.getFileName  s
    }r   r   )NFrH   FF)rs   )rH   F)NFr   )"__name__
__module____qualname__r?   ry   r   r>   r   r"   r   r`   rQ   rR   rP   r   r{   r|   r   rz   r   r   r   r   r   r   r   r   r   r   r   r   r8   r;   r   rj   r   r   r   r      s       LMHG! ! ! !
0 0 0AQ AQ AQ AQH2 2 2 2l       %6 %6 %6 %6P    N N N N4          + + +  ' ' ' 'R7 7 7 7          .# # #% % %* * * *    r   r   )__doc__rU   r/   r   r2   xdg.Exceptionsr   r   r   r   r   r   r	   
xdg.Localerm   xdg.utilr
   r   r   rj   r   r   <module>r      s                   # # # # # # # # # # # # # # # # # #            M M M M M M M M M Mr   