o _H5@s~dZddlZddlZddlZddlZddlmZmZmZm Z m Z m Z m Z ddl ZddlmZddlZddZGdddZdS) z5 Base Class for DesktopEntry, IconTheme and IconData N) ParsingErrorDuplicateGroupError NoGroupError NoKeyErrorDuplicateKeyErrorValidationErrordebug)ucCs(z |ddWdStyYdSw)z>Return True if a string consists entirely of ASCII characters.asciistrictTF)encode UnicodeError)sr-/usr/lib/python3/dist-packages/xdg/IniFile.pyis_ascii s   rc@s eZdZdZdZdZdZdZd=ddZddZ d=dd Z d>d d Z d dZ ddZ d=ddZd?ddZddZddZd@ddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)ZdAd*d+ZdAd,d-Zd.d/Zd0d1ZdBd3d4Zd5d6Zd7d8Z d=d9d:Z!d;d<Z"dS)CIniFileNFcCst|_|r ||dSdSN)dictcontentparse)selffilenamerrr__init__szIniFile.__init__cCst|j|jSr)cmpr)rotherrrr__cmp__#szIniFile.__cmp__c Cs|j}tj|std|z tj|dddd}Wnty0}z tr%|WYd}~dSd}~ww|}|D]r}| }|s?q6|ddkrFq6|dd kre| d  d }tr`| |r`t ||i||<q6z |d d \}} Wnty}td ||w| }ztr|||rt|||| |||<Wq6ttfytd|wWdn1swY||_d|_|r|D] } | |vr| |_n qtd|d||jdi}|d|dd|_dS)zyParse an INI file. headers -- list of headers the parser will try to select as a default header File not foundrutf-8replace)encodingerrorsNr#[]=zInvalid line: z#Parsing error on key, group missingFz[%s]-Header missingz Desktop EntryzX-GNOME-Gettext-DomainzX-Ubuntu-Gettext-Domain)rospathisfilerioopenIOErrorrstriplstriprstriphasGrouprsplit ValueErrorhasKeyr IndexErrorUnboundLocalErrorrtainted defaultGroupgetgettext_domain) rrheadersrfdeline currentGroupkeyvalueheaderrrrr&sf            z IniFile.parsestringc Cs|s|j}||jvr>||j|vr>|r6|||}|ds!|js)|j||}n5t|j|j||}n(|j||}n |sBtr\||jvrMt||j ||j|vr[t |||j nd}|dkrj| |}g} n|g}|D]a}|dkr{| |}nI|dkrzt |}Wn>tyd}Yn4w|dkrzt|}Wn(tyd}Ynw|d krt|}n|d kr|d \} } t | t | f}|dkr| |qo|} qo| S) Nr&rTbooleanintegerrnumericgregexpoint,)r9r_IniFile__addLocaleendswithr;gettextdgettextrrrrgetList_IniFile__getBooleanintr4floatrecompiler3append) rrAgrouplocaletypelistr rBvaluesresultxyrrrr:osX           z IniFile.getcCsltd|r td|}ntd|rtd|}ntd|r'td|}n|g}|ddkr4||S)Nz (?|s|j}tjjD]}d||f}||j|vr|Sq |S)z3add locale to key according the current lc_messagesz%s[%s])r9xdgLocalelangsr)rrArVlanglangkeyrrr __addLocales  zIniFile.__addLocaleAllcCsg|_g|_tj|jd|_||jD],}| ||j|D]}| ||j||||j||dkrB|j d|q#qd}|dksN|dkrZ|jD]}|d|7}qQ|dksb|dkrn|jD]}|d|7}qe|rvt ||jdS) zValidate the contents, raising :class:`~xdg.Exceptions.ValidationError` if there is anything amiss. report can be 'All' / 'Warnings' / 'Errors' r(rzValue of Key '%s' is emptyrlWarningsz - ErrorsN) warningsr#r)r*splitextr fileExtension checkExtrasr checkGroupcheckKeyrUr)rreportrVrAmsgr?rrrvalidates,     zIniFile.validatecCdSrrrrVrrrrszIniFile.checkGroupcCrxrr)rrArBrVrrrrtrzzIniFile.checkKeycCs|dkr ||}n|g}|D]\}|dkr||}|dkrq|dkr)||}n'|dkr3||}n|dkr=||}n|dkrG||}n |dkrP||}|d kr_|jd ||fq|d krk|j d |qdS) NTrD localestringrErGrFrHrIr(z'%s' is not a valid %szValue of key '%s' is deprecated) rO checkString checkBoolean checkNumber checkInteger checkRegex checkPointr#rUro)rrArBrXrYrZcoderrr checkValues0       zIniFile.checkValuecCrxrrrrrrrrrzzIniFile.checkExtrascCs0|dks|dkr dS|dks|dksdSdSdS)N10r|rarcr(rrrBrrrr~s zIniFile.checkBooleancCzt|WdSYdSNr()rRrrrrr"zIniFile.checkNumbercCrr)rQrrrrr)rzIniFile.checkIntegercCstd|sdSdS)Nz^[0-9]+,[0-9]+$r()rSmatchrrrrr0s zIniFile.checkPointcCst|rdSdS)Nrr()rrrrrr}4szIniFile.checkStringcCszt|WdSYdSr)rSrTrrrrr7szIniFile.checkRegexc Cs|s |js tdd|r||_n|j}tj|r,tjtj|s,ttj|tj|dddp}|r>| t d|j rj| t d|j |j |j  D]\}}| t d||fqS| t d |j D]-\}}||j kr| t d|| D]\}}| t d||fq| t d qoWdn1swY|rt|j}|tjBtjBtjB} t|| d |_dS) Nrrwr )r"z#!/usr/bin/env xdg-open z[%s] z%s=%s  F)rrr)r*dirnameisdirmakedirsr,r-writer r9ritemsstatst_modeS_IXUSRS_IXGRPS_IXOTHchmodr8) rrtrustedfprArBnamerVoldmodemoderrrr>s:       z IniFile.writecCs~|s|j}|dkrttjjdkr|dtjjdd}z ||j||<Wn ty3t||jw|| ||k|_ dS)NTrr%r&) r9lenrfrgrhrKeyErrorrrr:r8)rrArBrVrWrrrsetgs  z IniFile.setcCs2||rtr t||jdSi|j|<d|_dSNT)r2rrrrr8ryrrraddGroupvs    zIniFile.addGroupcCs4||jv}|r|j|=d|_|Strt||j|Sr)rr8rrr)rrVexistedrrr removeGroup~s  zIniFile.removeGroupTc Cs|s|j}z2|r*t|j|D]}td|tjjd|r)||kr)|j||=q|j||}d|_ |WSt y]}zt rR||krKt ||j t|||j WYd}~dSd}~ww)N^$Tr)r9rYrrSrrfrgrHr`r8rrrrr)rrArVlocalesrrBr>rrr removeKeys&$  zIniFile.removeKeycCs |jSr)rkeysrrrrgroups zIniFile.groupscCs ||jvSr)rryrrrr2rzIniFile.hasGroupcCs|s|j}||j|vSr)r9r)rrArVrrrr5szIniFile.hasKeycCs|jSr)rrrrr getFileNameszIniFile.getFileNamer)NFrDFF)rl)rDF)NFr)#__name__ __module__ __qualname__r9rqrr;r8rrrr:rOrPrKrwrsrtrrrr~rrrr}rrrrrrrr2r5rrrrrrsB   I;  (   )   r)__doc__rSr)rr,xdg.Exceptionsrrrrrrr xdg.Localerfxdg.utilr rMrrrrrrs $