
    b_\3                     z    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y)z5
Base Class for DesktopEntry, IconTheme and IconData
    N)ParsingErrorDuplicateGroupErrorNoGroupError
NoKeyErrorDuplicateKeyErrorValidationErrordebug)uc                 H    	 | j                  dd       y# t        $ r Y yw xY w)z>Return True if a string consists entirely of ASCII characters.asciistrictTF)encodeUnicodeError)ss    +lib/python3.12/site-packages/xdg/IniFile.pyis_asciir      s*    	(# 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!y)%IniFile FNc                 J    t               | _        |r| j                  |       y y N)dictcontentparse)selffilenames     r   __init__zIniFile.__init__   s    vJJx      c                 B    t        | j                  |j                        S r   )cmpr   )r   others     r   __cmp__zIniFile.__cmp__!   s    4<<//r   c                    | j                   }t        j                  j                  |      st	        d|      	 t        j                  |ddd      }|5  |D ]  }|j                         }|s|d   dk(  r|d   d	k(  rI|j                  d	      j                  d
      }t        r| j                  |      rt        ||      i ||<   p	 |j                  dd      \  }}	|j                         }	 t        r| j!                  |      rt#        |||      |	j                         |   |<    	 ddd       || _        d| _        |r&|D ]  }
|
|v s|
| _         y t	        d|d   z  |      y# t        $ r}t        r|Y d}~yd}~ww xY w# t        $ r t	        d|z   |      w xY w# t$        t&        f$ r t	        d|      w xY w# 1 sw Y   xY w)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    ,,ww~~h'/::		 3KB zz|!W^!W^#';;s#3#:#:3#?L|!<1,II02-N%)ZZQ%7
U ))+C\ T[[l%C"3Cx"PP9>GL1#67  @ ! !W$(.D% "
 ##871:#ExPP W  			6 & N*+;d+BHMMN '(9: \*+PRZ[[\; RsT   E+ A3GF	G.;F%)G+	F4FF	F""G%GGGc                 B   |s| j                   }|| j                  v rI|| j                  |   v r8|r#| j                  |   | j                  ||         }ni| j                  |   |   }nV|st        rL|| j                  vrt	        || j
                        || j                  |   vrt        ||| j
                        d}|dk(  r| j                        }g }	ng}|D ]  }|dk(  r| j                  |      }nn|dk(  r	 t        |      }n\|dk(  r	 t        |      }nJ|dk(  rt        j                  |      }n/|d	k(  r*|j                  d
      \  }
}t        |
      t        |      f}|dk(  r	j                  |       |}	 	S # t        $ r d}Y *w xY w# t        $ r d}Y ;w xY w)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U+D,<,<S%,HIU+C0,&udmm<<U 33$S%??4<\\%(FFWFEy ))%0"JE " !%LE 

5){{3'1AAt|e$- 0 % " E
 "  E s$   :E?F?FFFFc                 J   t        j                  d|      rt        j                  d|      }n]t        j                  d|      rt        j                  d|      }n0t        j                  d|      rt        j                  d|      }n|g}|d   dk(  r|j                          |S )Nz	(?<!\\)\;z(?<!\\);z	(?<!\\)\|z(?<!\\),r   )rT   searchr9   pop)r   stringrZ   s      r   rP   zIniFile.getList   s|    99\6*88K0DYY|V,88L&1DYY{F+88K0D8D8r>HHJr   c                 D    |dk(  s
|dk(  s|dk(  ry|dk(  s
|dk(  s|dk(  ryy)	Nr.   trueTrueTr   falseFalseF )r   rI   s     r   __getBooleanzIniFile.__getBoolean   s5    a<7f,60A\W/7g3Er   c                     |s| j                   }t        j                  j                  D ]  }|d|d}|| j                  |   v s|c S  |S )z3add locale to key according the current lc_messagesr+   r,   )r?   xdgLocalelangsr   )r   rE   rW   langlangkeys        r   __addLocalezIniFile.__addLocale   sM     %%EJJ$$D"%t,G$,,u-- %
 
r   c                 |   g | _         g | _        t        j                  j	                  | j
                        d   | _        | j                          | j                  D ]~  }| j                  |       | j                  |   D ]Y  }| j                  || j                  |   |   |       | j                  |   |   dk(  s<| j                   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
                        y)	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 emptyAllWarningsz
- ErrorsN)warningsr)   r/   r0   splitextr   fileExtensioncheckExtrasr   
checkGroupcheckKeyrV   r   )r   reportrW   rE   msgrC   s         r   validatezIniFile.validate   s5      WW--dmm<Q? 	 \\EOOE"||E*c4<<#6s#;UC<<&s+r1MM(()E)KL	 + " U?f
2v}$ & U?f0v}$ $ !#t}}55 r   c                      y r   rj   r   rW   s     r   r{   zIniFile.checkGroup       r   c                      y r   rj   )r   rE   rF   rW   s       r   r|   zIniFile.checkKey   r   r   c                    |dk(  r| j                  |      }n|g}|D ]  }|dk(  r| j                  |      }|dk(  r|dk(  r| j                  |      }n[|dk(  r| j                  |      }nD|dk(  r| j	                  |      }n-|dk(  r| j                  |      }n|dk(  r| j                  |      }d	k(  r"| j                  j                  d
|d|       |dk(  s| j                  j                  d|z          y )NTrd   localestringrI   rK   rJ   rL   rM   r.   'z' is not a valid    zValue of key '%s' is deprecated)
rP   checkStringcheckBooleancheckNumbercheckInteger
checkRegex
checkPointr)   rV   rw   )r   rE   rF   rY   rZ   r[   codes          r   
checkValuezIniFile.checkValue   s    4<\\%(FWFEx''.~%"((/"''."((/u-u-qy""ud#KL$$%F%LM% r   c                      y r   rj   r   s    r   rz   zIniFile.checkExtras  r   r   c                 2    |dk(  s|dk(  ry|dk(  s|dk(  syy y )N10r   rf   rh   r.   rj   r   rF   s     r   r   zIniFile.checkBoolean  s*    SLESL6/Ug%5 &6/r   c                 *    	 t        |       y #  Y yxY wNr.   )rS   r   s     r   r   zIniFile.checkNumber  s    	%L	    c                 *    	 t        |       y #  Y yxY wr   )rR   r   s     r   r   zIniFile.checkInteger  s    	J	r   c                 2    t        j                  d|      syy )Nz^[0-9]+,[0-9]+$r.   )rT   matchr   s     r   r   zIniFile.checkPoint$  s    xx)51 2r   c                      t        |      rdS dS )Nr   r.   )r   r   s     r   r   zIniFile.checkString(  s    UOq**r   c                 >    	 t        j                  |       y #  Y yxY wr   )rT   rU   r   s     r   r   zIniFile.checkRegex+  s    	JJu	s    c                 n   |s| j                   st        dd      |r|| _         n| j                   }t        j                  j	                  |      rnt        j                  j                  t        j                  j	                  |            s2t        j                  t        j                  j	                  |             t        j                  |dd      5 }|r|j                  t        d             | j                  r|j                  t        d      | j                  z         | j                  | j                     j                         D ]$  \  }}|j                  t        d      ||fz         & |j                  t        d	             | j                  j                         D ]  \  }}|| j                  k7  s|j                  t        d      |z         |j                         D ]$  \  }}|j                  t        d      ||fz         & |j                  t        d	              	 d d d        |rjt        j                  |      j                  }|t        j                   z  t        j"                  z  t        j$                  z  }	t        j&                  ||	       d
| _        y # 1 sw Y   }xY w)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   namerW   oldmodemodes
             r   r   zIniFile.write2  s   /44$DM}}H77??8$RWW]]277??8;T-UKK12WWXsW5 678  8t'8'889$(LL1B1B$C$I$I$KLS%HHQy\S%L89 %L4!!%!3!3!5u4,,,HHQx[4/0(-e9e!<= )6HHQtW% "6 6, ggh'//GT\\)DLL84<<GDHHXt$7 65s   C'J+>A0J++J4c                 b   |s| j                   }|dk(  rLt        t        j                  j                        dkD  r&|dz   t        j                  j                  d   z   dz   }	 || j
                  |   |<   || j                  ||      k(  | _
        y # t        $ r t        || j                        w xY w)NTr   r+   r,   )r?   lenrm   rn   ro   r   KeyErrorr   r   r_   r>   )r   rE   rF   rW   rX   s        r   setzIniFile.set[  s    %%ET>c#**"2"23a7)cjj..q11C7C	5',DLL$ #u!55  	5udmm44	5s   !B  B.c                     | j                  |      rt        rt        || j                        y i | j                  |<   d| _        y NT)r8   r	   r   r   r   r>   r   s     r   addGroupzIniFile.addGroupj  s>    ==)%??  #%DLLDLr   c                     || j                   v }|r| j                   |= d| _        |S t        rt        || j                        |S r   )r   r>   r	   r   r   )r   rW   existeds      r   removeGroupzIniFile.removeGroupr  sH    4<<'U#DL  "5$--88r   c                    |s| j                   }	 |rkt        | j                  |         D ]P  }t        j                  d|z   t
        j                  j                  z   dz   |      s;||k7  sA| j                  |   |= R | j                  |   j                  |      }d| _	        |S # t        $ rB}t        r2||k(  rt        || j                        t        ||| j                        Y d }~yd }~ww xY w)N^$Tr   )r?   rZ   r   rT   r   rm   rn   rL   rc   r>   r   r	   r   r   r   )r   rE   rW   localesr   rF   rB   s          r   	removeKeyzIniFile.removeKey|  s    %%E	 e!45Dxxc	CJJ,<,< <s BDIdVYk LL/5 6 LL'++C0EDLL 	:&udmm<<$S%??	s$   AB$ %B$ +8B$ $	C/-8C**C/c                 6    | j                   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                 @    |s| j                   }|| j                  |   v S r   )r?   r   )r   rE   rW   s      r   r;   zIniFile.hasKey  s$    %%Edll5)))r   c                     | j                   S r   )r   r   s    r   getFileNamezIniFile.getFileName  s    }}r   r   )NFrd   FF)rt   )rd   F)NFr   )"__name__
__module____qualname__r?   ry   r   r>   r   r"   r   r_   rP   rQ   rO   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AQH2l%6PN4+'R7 .#%*r   r   )__doc__rT   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r   