o
    ï½PÎ2  ã                   @   sv   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„ ZG dd„ dƒZdS )	z5
Base Class for DesktopEntry, IconTheme and IconData
é    N)ÚParsingErrorÚDuplicateGroupErrorÚNoGroupErrorÚ
NoKeyErrorÚDuplicateKeyErrorÚValidationErrorÚdebug)Úuc                 C   s(   z	|   dd¡ W dS  ty   Y dS w )z>Return True if a string consists entirely of ASCII characters.ÚasciiÚstrictTF)ÚencodeÚUnicodeError)Ús© r   ú=/var/www/html/env/lib/python3.10/site-packages/xdg/IniFile.pyÚis_ascii   s   ÿr   c                   @   s  e Zd ZdZdZdZdZd=dd„Zdd„ Zd=dd	„Z	d>dd„Z
dd„ Zdd„ Zd=dd„Zd?dd„Zdd„ Zdd„ Zd@dd„Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdAd*d+„ZdAd,d-„Zd.d/„ Zd0d1„ ZdBd3d4„Zd5d6„ Zd7d8„ Zd=d9d:„Z d;d<„ Z!dS )CÚIniFileÚ FNc                 C   s   t ƒ | _|r|  |¡ d S d S ©N)ÚdictÚcontentÚparse)ÚselfÚfilenamer   r   r   Ú__init__   s   ÿzIniFile.__init__c                 C   s   t | j|jƒS r   )Úcmpr   )r   Úotherr   r   r   Ú__cmp__!   s   zIniFile.__cmp__c              
   C   s˜  | j }tj |¡std|ƒ‚ztj|dddd�}W n ty0 } ztr%|‚W Y d}~dS d}~ww |D ]r}| 	¡ }|s<q3|d dkrCq3|d d	krb| 
d	¡ d
¡}tr]|  |¡r]t||ƒ‚i ||< q3z
| dd¡\}}	W n tyz   td| |ƒ‚w | 	¡ }ztrŽ|  ||¡rŽt|||ƒ‚|	 	¡ || |< W q3 ttfy¥   td|ƒ‚w | ¡  || _d| _|rÊ|D ]}
|
|v rÀ|
| _ dS q´t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 missing)r   ÚosÚpathÚisfiler   ÚioÚopenÚIOErrorr   ÚstripÚlstripÚrstripÚhasGroupr   ÚsplitÚ
ValueErrorÚhasKeyr   Ú
IndexErrorÚUnboundLocalErrorÚcloser   ÚtaintedÚdefaultGroup)r   r   Úheadersr   ÚfdÚeÚlineÚcurrentGroupÚkeyÚvalueÚheaderr   r   r   r   $   s\   
€ü

ÿ
ÿþúzIniFile.parseÚstringc              	   C   st  |s| j }|| jv r'|| j| v r'|r| j| |  ||¡ }n&| j| | }ntrC|| jvr4t|| jƒ‚|| j| vrBt||| jƒ‚nd}|dkrQ|  |¡}g }n|g}|D ]a}|dkrb|  |¡}nI|dkrxzt	|ƒ}W n> t
yw   d}Y n4w |dkrŽzt|ƒ}W n( t
y�   d}Y nw |dkr˜t |¡}n|d	kr«| d
¡\}	}
t	|	ƒt	|
ƒf}|dkrµ| |¡ qV|}qV|S )Nr   TÚbooleanÚintegerr   Únumericg        ÚregexÚpointú,)r:   r   Ú_IniFile__addLocaler   r   r   r   ÚgetListÚ_IniFile__getBooleanÚintr4   ÚfloatÚreÚcompiler3   Úappend)r   r@   ÚgroupÚlocaleÚtypeÚlistrA   ÚvaluesÚresultÚxÚyr   r   r   Úgeti   sR   
ÿ
ÿÿzIniFile.getc                 C   sl   t  d|¡rt  d|¡}nt  d|¡rt  d|¡}nt  d|¡r't  d|¡}n|g}|d dkr4| ¡  |S )Nz	(?<!\\)\;z(?<!\\);z	(?<!\\)\|z(?<!\\),éÿÿÿÿr   )rO   Úsearchr3   Úpop)r   rC   rU   r   r   r   rK   Ÿ   s   zIniFile.getListc                 C   s<   |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ÚFalseFr   )r   rD   r   r   r   Ú__getBoolean¬   s
   zIniFile.__getBooleanc                 C   s>   |s| j }tjjD ]}d||f }|| j| v r|  S q	|S )z3add locale to key according the current lc_messagesz%s[%s])r:   ÚxdgÚLocaleÚlangsr   )r   r@   rR   ÚlangÚlangkeyr   r   r   Ú__addLocale´   s   ÿzIniFile.__addLocaleÚAllc                 C   sð   g | _ g | _tj | j¡d | _|  ¡  | jD ],}|  	|¡ | j| D ]}|  
|| j| | |¡ | j| | dkrB| j  d| ¡ q#qd}|dksN|dkrZ| j D ]}|d| 7 }qQ|dksb|dkrn| jD ]}|d| 7 }qe|rvt|| jƒ‚dS )	zœValidate the contents, raising ``ValidationError`` if there
        is anything amiss.
        
        report can be 'All' / 'Warnings' / 'Errors'
        r(   r   zValue of Key '%s' is emptyri   ÚWarningsz
- ÚErrorsN)Úwarningsr#   r)   r*   Úsplitextr   ÚfileExtensionÚcheckExtrasr   Ú
checkGroupÚcheckKeyrQ   r   )r   ÚreportrR   r@   Úmsgr>   r   r   r   ÚvalidateÂ   s,   

€ü

ÿzIniFile.validatec                 C   ó   d S r   r   ©r   rR   r   r   r   rp   ê   ó   zIniFile.checkGroupc                 C   ru   r   r   )r   r@   rA   rR   r   r   r   rq   î   rw   zIniFile.checkKeyc                 C   sÜ   |dkr
|   |¡}n|g}|D ]\}|dkr|  |¡}|dkrq|dkr)|  |¡}n'|dkr3|  |¡}n|dkr=|  |¡}n|dkrG|  |¡}n	|dkrP|  |¡}|d	kr_| j d
||f ¡ q|dkrk| j	 d| ¡ qd S )NTrC   ÚlocalestringrD   rF   rE   rG   rH   r(   z'%s' is not a valid %sé   zValue of key '%s' is deprecated)
rK   ÚcheckStringÚcheckBooleanÚcheckNumberÚcheckIntegerÚ
checkRegexÚ
checkPointr#   rQ   rl   )r   r@   rA   rT   rU   rV   Úcoder   r   r   Ú
checkValueò   s0   

€îzIniFile.checkValuec                 C   ru   r   r   ©r   r   r   r   ro     rw   zIniFile.checkExtrasc                 C   s0   |dks|dkr
dS |dks|dksdS d S d S )NÚ1Ú0ry   r^   r`   r(   r   ©r   rA   r   r   r   r{     s
   ÿzIniFile.checkBooleanc                 C   ó   zt |ƒ W d S    Y dS ©Nr(   )rN   r…   r   r   r   r|     ó   zIniFile.checkNumberc                 C   r†   r‡   )rM   r…   r   r   r   r}     rˆ   zIniFile.checkIntegerc                 C   s   t  d|¡sdS d S )Nz^[0-9]+,[0-9]+$r(   )rO   Úmatchr…   r   r   r   r   %  s   ÿzIniFile.checkPointc                 C   s   t |ƒrdS dS )Nr   r(   )r   r…   r   r   r   rz   )  s   zIniFile.checkStringc                 C   s   zt  |¡ W d S    Y dS r‡   )rO   rP   r…   r   r   r   r~   ,  s   zIniFile.checkRegexc           
      C   s”  |s
| j s
tddƒ‚|r|| _ n| j }tj |¡r,tj tj |¡¡s,t tj |¡¡ tj|ddd��p}|r>| 	t
dƒ¡ | jrj| 	t
dƒ| j ¡ | j| j  ¡ D ]\}}| 	t
dƒ||f ¡ qS| 	t
d	ƒ¡ | j ¡ D ]-\}}|| jkrœ| 	t
dƒ| ¡ | ¡ D ]\}}| 	t
dƒ||f ¡ q…| 	t
d	ƒ¡ qoW d   ƒ n1 s§w   Y  |rÅt |¡j}|tjB tjB tjB }	t ||	¡ d
| _d S )Nr   r   Úwr    )r"   z#!/usr/bin/env xdg-open
z[%s]
z%s=%s
Ú
F)r   r   r)   r*   ÚdirnameÚisdirÚmakedirsr,   r-   Úwriter	   r:   r   ÚitemsÚstatÚst_modeÚS_IXUSRÚS_IXGRPÚS_IXOTHÚchmodr9   )
r   r   ÚtrustedÚfpr@   rA   ÚnamerR   ÚoldmodeÚmoder   r   r   r�   3  s:   

 
€ûò
zIniFile.writec                 C   s~   |s| j }|dkrttjjƒdkr|d tjjd  d }z	|| j| |< W n ty3   t|| jƒ‚w ||  	||¡k| _
d S )NTr   r%   r&   )r:   Úlenrc   rd   re   r   ÚKeyErrorr   r   rZ   r9   )r   r@   rA   rR   rS   r   r   r   Úset\  s   ÿzIniFile.setc                 C   s2   |   |¡rtrt|| jƒ‚d S i | j|< d| _d S ©NT)r2   r   r   r   r   r9   rv   r   r   r   ÚaddGroupk  s   
ÿ

zIniFile.addGroupc                 C   s4   || j v }|r| j |= d| _|S trt|| jƒ‚|S rŸ   )r   r9   r   r   r   )r   rR   Úexistedr   r   r   ÚremoveGroups  s   
þzIniFile.removeGroupTc              
   C   s¼   |s| j }z2|r*t| j| ƒD ]}t d| tjj d |¡r)||kr)| j| |= q| j|  |¡}d| _	|W S  t
y] } ztrR||krKt|| jƒ‚t||| jƒ‚W Y d }~dS d }~ww )Nú^ú$Tr   )r:   rU   r   rO   r‰   rc   rd   rG   r]   r9   r�   r   r   r   r   )r   r@   rR   Úlocalesr™   rA   r=   r   r   r   Ú	removeKey}  s&   $€€ùzIniFile.removeKeyc                 C   s
   | j  ¡ S r   )r   Úkeysr‚   r   r   r   Úgroups”  ó   
zIniFile.groupsc                 C   s
   || j v S r   )r   rv   r   r   r   r2   —  r©   zIniFile.hasGroupc                 C   s   |s| j }|| j| v S r   )r:   r   )r   r@   rR   r   r   r   r5   š  s   zIniFile.hasKeyc                 C   s   | j S r   )r   r‚   r   r   r   ÚgetFileName¡  s   zIniFile.getFileNamer   )NFrC   F)ri   )rC   F)NFrŸ   )"Ú__name__Ú
__module__Ú__qualname__r:   rn   r   r9   r   r   r   rZ   rK   rL   rJ   rt   rp   rq   r�   ro   r{   r|   r}   r   rz   r~   r�   rž   r    r¢   r¦   r¨   r2   r5   rª   r   r   r   r   r      s@    


E6

(


)


r   )Ú__doc__rO   r)   r‘   r,   Úxdg.Exceptionsr   r   r   r   r   r   r   Ú
xdg.Localerc   Úxdg.utilr	   r   r   r   r   r   r   Ú<module>   s     $