Ë Éœ¹#ŠáãóÒ—dZddlZddlZddlZddlmZmZddlmZddl m Z m Z ddl Z Gd„de«ZGd„d e«ZgZeD]XZej%ej&j)ed ««ej%ej&j)ed ««ŒZej%ej&j+d ««gaiZiZiZddgd ¢fd„Zd„Zd„Zd„Zd„Zd„Zy)z` Complete implementation of the XDG Icon Spec http://standards.freedesktop.org/icon-theme-spec/ éN)ÚIniFileÚis_ascii)Ú xdg_data_dirs)Ú NoThemeErrorÚdebugcóŽ—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)Ú IconThemez&Class to parse and validate IconThemescó.—tj|«y©N©rÚ__init__©Úselfs ú2/usr/lib/python3.12/site-packages/xdg/IconTheme.pyr zIconTheme.__init__ó€Ü×јÕócó—|jSr )Únamers rÚ__repr__zIconTheme.__repr__s €Ø�y‰yÐrcóà—tj||ddg«tjj |«|_tjj |j «\}|_y)Nz Icon ThemeúKDE Icon Theme)rÚparseÚosÚpathÚdirnameÚdirÚsplitr)rÚfileÚnils rrzIconTheme.parsesI€Ü� ‰ �d˜D <Ð1AÐ"BÔCÜ—7‘7—?‘? 4Ó(ˆŒÜŸ7™7Ÿ=™=¨¯©Ó2шˆd�ircó—|jSr )rrs rÚgetDirzIconTheme.getDirs €Ø�x‰xˆrcó(—|jdd¬«S)NÚNameT©Úlocale©Úgetrs rÚgetNamezIconTheme.getName s€Ø�x‰x˜ tˆxÓ,Ð,rcó(—|jdd¬«S)NÚCommentTr$r&rs rÚ getCommentzIconTheme.getComment"s€Ø�x‰x˜ ¨$ˆxÓ/Ð/rcó(—|jdd¬«S)NÚInheritsT©Úlistr&rs rÚ getInheritszIconTheme.getInherits$s€Ø�x‰x˜ ¨ˆxÓ.Ð.rcó(—|jdd¬«S)NÚ DirectoriesTr.r&rs rÚgetDirectorieszIconTheme.getDirectories&s€Ø�x‰x˜ ¨DˆxÓ1Ð1rcó(—|jdd¬«S)NÚScaledDirectoriesTr.r&rs rÚgetScaledDirectorieszIconTheme.getScaledDirectories(s€Ø�x‰xÐ+°$ˆxÓ7Ð7rcó(—|jdd¬«S)NÚHiddenÚboolean©Útyper&rs rÚ getHiddenzIconTheme.getHidden*s€Ø�x‰x˜ yˆxÓ1Ð1rcó$—|jd«S)NÚExampler&rs rÚ getExamplezIconTheme.getExample,s€Ø�x‰x˜ Ó"Ð"rcó*—|jdd|¬«S)NÚSizeÚinteger©r;Úgroupr&©rÚ directorys rÚgetSizezIconTheme.getSize0s€Ø�x‰x˜ Y°iˆxÓ@Ð@rcó(—|jd|¬«S)NÚContext©rDr&rEs rÚ getContextzIconTheme.getContext2s€Ø�x‰x˜ ¨ˆxÓ3Ð3rcó2—|jd|¬«}|r|Sy)NÚTyperJÚ Thresholdr&©rrFÚvalues rÚgetTypezIconTheme.getType4s€Ø—‘˜ y�Ó1ˆÙ ؈Làrcó^—|jdd|¬«}|s|dk(r|S|j|«S)NÚMaxSizerBrCr©r'rGrOs rÚ getMaxSizezIconTheme.getMaxSize:ó3€Ø—‘˜¨¸)�ÓDˆÙ �E˜Q’J؈Là—<‘<  Ó*Ð *rcó^—|jdd|¬«}|s|dk(r|S|j|«S)NÚMinSizerBrCrrTrOs rÚ getMinSizezIconTheme.getMinSize@rVrcó>—|jdd|¬«}|s|dk(r|Sy)NrNrBrCrér&rOs rÚ getThresholdzIconTheme.getThresholdFs'€Ø—‘˜¨9¸I�ÓFˆÙ �E˜Q’J؈Làrcó6—|jdd|¬«}|xsdS)NÚScalerBrCér&rOs rÚgetScalezIconTheme.getScaleMs €Ø—‘˜ y¸ �ÓBˆØŠz˜ÐrcóÌ—|jdk(r|jjd«|jdk(rnF|jdk(r|jjd«n|jjd« |j|jd|_ |j|jd |_ |j|jd |_ y#t $r|jjd«YŒkwxYw#t $r|jjd «YŒswxYw#t $r|jjd «YywxYw) Nrz%[KDE Icon Theme]-Header is deprecatedz.themez.desktopz$.desktop fileExtension is deprecatedúUnknown File extensionr#zKey 'Name' is missingr*zKey 'Comment' is missingr2zKey 'Directories' is missing) Ú defaultGroupÚwarningsÚappendÚ fileExtensionÚcontentrÚKeyErrorÚerrorsÚcommentÚ directoriesrs rÚ checkExtraszIconTheme.checkExtrasRs6€à × Ñ Ð 0Ò 0Ø �M‰M× Ñ Ð!HÔ Ið × Ñ  Ò )Ø Ø × Ñ  :Ò -Ø �M‰M× Ñ Ð!GÕ Hà �M‰M× Ñ Ð!9Ô :ð 8ØŸ ™  T×%6Ñ%6Ñ7¸Ñ?ˆDŒIð  ;ØŸ<™<¨×(9Ñ(9Ñ:¸9ÑEˆDŒLð  ?Ø#Ÿ|™|¨D×,=Ñ,=Ñ>¸}ÑMˆDÕ øôò 8Ø �K‰K× Ñ Ð6Ö 7ð 8ûô ò ;Ø �K‰K× Ñ Ð9Ö :ð ;ûô ò ?Ø �K‰K× Ñ Ð=Ö >ð ?ús6Â!C(Â$!DÃ!D<Ã($DÄDÄ$D9Ä8D9Ä<$E#Å"E#cóÄ—||jk(r1 |j|d|_ |j|d|_y||j «vr1 |j|d|_ |j|d|_ytjd |«r t|«s|jj d |z«yy#t$r!|jj d|z«YŒÆwxYw#t$r!|jj d|z«YywxYw#t$r d|_YŒÆwxYw#t$r!|jj d|z«YywxYw) Nr#z#Key 'Name' in Group '%s' is missingr*z&Key 'Comment' in Group '%s' is missingrMrNrAz#Key 'Size' in Group '%s' is missingú^\[X-úInvalid Group name: %s) rcrgrrhrirer3r;ÚreÚmatchr©rrDs rÚ checkGroupzIconTheme.checkGrouprsX€à �D×%Ñ%Ò %ð RØ ŸL™L¨Ñ/°Ñ7�” ð UØ ŸL™L¨Ñ/° Ñ:�• ð�d×)Ñ)Ó+Ñ +ð (Ø ŸL™L¨Ñ/°Ñ7�” ð RØ ŸL™L¨Ñ/°Ñ7�• ô—(‘(˜8 UÔ+´¸´Ø �K‰K× Ñ Ð7¸%Ñ?Õ @ð1@øôò RØ— ‘ ×"Ñ"Ð#HÈ5Ñ#PÖQð Rûôò UØ— ‘ ×"Ñ"Ð#KÈeÑ#SÖTð Uûô ò (Ø'�– ð (ûôò RØ— ‘ ×"Ñ"Ð#HÈ5Ñ#PÖQð RúsF‘C©C2ÁDÁ,D5Ã'C/Ã.C/Ã2'DÄDÄD2Ä1D2Ä5'EÅEcóð—||jk(�r tjdtjj zdz|«rytjdtjj zdz|«ry|dk(r|j ||d¬«y|dk(r|j ||d¬«y|dk(r|j ||d¬«y|d k(r|j ||d ¬ «y|d k(r|j ||«ytjd |«ry|jjd|z«y||j«v�r³|dk(r|j ||d¬ «y|dk(r|j ||«y|dk(r6|j ||«|dvr|jjd|z«yy|dk(rM|j ||d¬ «|jdk7r)|jjd|jz«yy|dk(rM|j ||d¬ «|jdk7r)|jjd|jz«yy|dk(rM|j ||d¬ «|jdk7r)|jjd|jz«yy|dk(r|j ||d¬ «ytjd |«ry|jjd|z«yy)Nz^NameÚ$z^Commentr-Tr.r2r5r8r9r:r>ú^X-[a-zA-Z0-9-]+úInvalid key: %srArBrIrM)ÚFixedÚScalablerNzGKey 'Type' must be one out of 'Fixed','Scalable','Threshold', but is %srSryz"Key 'MaxSize' give, but Type is %srXz"Key 'MinSize' give, but Type is %srNz$Key 'Threshold' give, but Type is %sr^) rcrprqÚxdgÚLocaleÚregexÚ checkValuerirer3r;©rÚkeyrPrDs rÚcheckKeyzIconTheme.checkKey‰sŸ€à �D×%Ñ%Ó %Ü�x‰x˜¤§ ¡ × 0Ñ 0Ñ0°Ñ4°cÔ:ØÜ—‘˜*¤S§Z¡Z×%5Ñ%5Ñ5°cÑ9¸3Ô?ØØ˜ Ò"Ø—‘  U°�Õ6ؘ Ò%Ø—‘  U°�Õ6ØÐ+Ò+Ø—‘  U°�Õ6ؘ’Ø—‘  U°�Õ;ؘ Ò!Ø—‘  UÕ+Ü—‘Ð,¨cÔ2Øà— ‘ ×"Ñ"Ð#4°sÑ#:Õ;Ø �d×)Ñ)Ó+Ò +Ø�fŠ}Ø—‘  U°�Õ;ؘ Ò!Ø—‘  UÕ+ؘ’Ø—‘  UÔ+ØÐ BÑBØ—K‘K×&Ñ&Ð'pÐsxÑ'xÕyðCà˜ Ò!Ø—‘  U°�Ô;Ø—9‘9  Ò*Ø—K‘K×&Ñ&Ð'KÈdÏiÉiÑ'WÕXð+à˜ Ò!Ø—‘  U°�Ô;Ø—9‘9  Ò*Ø—K‘K×&Ñ&Ð'KÈdÏiÉiÑ'WÕXð+à˜ Ò#Ø—‘  U°�Ô;Ø—9‘9  Ò+Ø—K‘K×&Ñ&Ð'MÐPT×PYÑPYÑ'YÕZð,à˜’Ø—‘  U°�Õ;Ü—‘Ð,¨cÔ2Øà— ‘ ×"Ñ"Ð#4°sÑ#:Õ;ð5,rN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r rrr!r(r+r0r3r6r<r?rGrKrQrUrYr\r`rlrsr€©rrr r sq„Ù,òòò3ò ò-ò0ò/ò2ò8ò2ò#òAò4òò +ò +ò òò ?ò@Aó./z )ÚgetDisplayName)rÚ displaynames rrzIconData.__repr__Às!€Ø×)Ñ)Ó+ˆ Ù Ø# kÑ1Ð 1àrcó4—tj||dg«y)Nz Icon Data)rr)rrs rrzIconData.parseÇs€Ü� ‰ �d˜D ; -Õ0rcó(—|jdd¬«S)zBRetrieve the display name from the icon data, if one is specified.Ú DisplayNameTr$r&rs rrŠzIconData.getDisplayNameËs€à�x‰x˜ ¨dˆxÓ3Ð3rcó*—|jddd¬«S)zzRetrieve the embedded text rectangle from the icon data as a list of numbers (x0, y0, x1, y1), if it is specified.ÚEmbeddedTextRectanglerBT©r;r/r&rs rÚgetEmbeddedTextRectanglez!IconData.getEmbeddedTextRectangleÎs€ð�x‰xÐ/°iÀdˆxÓKÐKrcó*—|jddd¬«S)z„Retrieve the anchor points for overlays & emblems from the icon data, as a list of co-ordinate pairs, if they are specified.Ú AttachPointsÚpointTr‘r&rs rÚgetAttachPointszIconData.getAttachPointsÒs€ð�x‰x˜¨W¸4ˆxÓ@Ð@rcóZ—|jdk7r|jjd«yy)Nú.iconrb)rfrdrers rrlzIconData.checkExtrasØs(€à × Ñ  Ò (Ø �M‰M× Ñ Ð!9Õ :ð )rcóÄ—||jk(sQtjd|«r t|«s/|jj d|j dd«z«yyy)NrnroÚasciiÚreplace)rcrprqrrireÚencoderrs rrszIconData.checkGroupÝsR€à˜×*Ñ*Ò*Ü �H‰H�X˜uÔ %¬(°5¬/Ø �K‰K× Ñ Ð7¸%¿,¹,ÀwÐPYÓ:ZÑZÕ [ð+:ð+rcóD—tjdtjjzdz|«ry|dk(r|j ||dd¬«y|dk(r|j ||dd¬«ytjd |«ry|j jd |z«y) Nz ^DisplayNamerur�rBTr‘r”r•rvrw)rprqrzr{r|r}rirer~s rr€zIconData.checkKeyãsŠ€ä �8‰8�N¤3§:¡:×#3Ñ#3Ñ3°CÑ7¸Ô =Ø Ø Ð+Ò +Ø �O‰O˜C ¨Y¸TˆOÕ BØ �NÒ "Ø �O‰O˜C ¨W¸4ˆOÕ @Ü �X‰XÐ(¨#Ô .Ø à �K‰K× Ñ Ð0°3Ñ6Õ 7rN) r�r‚rƒr„r rrrŠr’r–rlrsr€r…rrr‡r‡»s5„Ù0òò ò1ò4òLòAò ;ò \ó 8rr‡ÚiconsÚpixmapsz~/.icons)ÚpngÚsvgÚxpmcó|—|dk(rtjj}|dk(rtjj}tj j |«r|Stj j|«ddd|vr"tj j|«d}tgk(stdj|k7rtt|««a|||t|«f} t|\}}tj«|z tjjk\rt|=n|StD]3}t#||||«}|sŒtj«|ft|<|cSt$D]ë}|t&vsst)tj«t&|dz «tjjk\sŒQt&|dtj j+|«ksŒ~tj j-|«sŒžt j.|«tj«tj j+|«ft&|<Œít&j1«D]c\} } |D]Y} |dz| z| dvrItj j3| |dz| z«}tj«|gt|<|ccSŒ[Œe|dk7r,t9||d«}tj«|gt|<|Sy#t $rY�ŒèwxYw#t4$r} t6r| ‚Yd} ~ Œ¶d} ~ wwxYw)aåGet the path to a specified icon. size : Icon size in pixels. Defaults to ``xdg.Config.icon_size``. theme : Icon theme name. Defaults to ``xdg.Config.icon_theme``. If the icon isn't found in the specified theme, it will be looked up in the basic 'hicolor' theme. extensions : List of preferred file extensions. Example:: >>> getIconPath("inkscape", 32) '/usr/share/icons/hicolor/32x32/apps/inkscape.png' Nr_rr[Ú.Úhicolor)rzÚConfigÚ icon_sizeÚ icon_themerrÚisabsÚsplitextÚthemesrr/Ú __get_themesÚtupleÚ icon_cacheÚtimeÚ cache_timerhÚ LookupIconÚicondirsÚ dir_cacheÚintÚgetmtimeÚisdirÚlistdirÚitemsÚjoinÚUnicodeDecodeErrorrÚ getIconPath) ÚiconnameÚsizeÚthemeÚ extensionsÚtmpÚ timestampÚiconÚthmerFrÚvaluesÚ extensionÚes rr»r»þs²€ð( ˆt‚|Ü�z‰z×#Ñ#ˆØ �‚}Ü— ‘ ×%Ñ%ˆô ‡w�w‡}�}�XÔØˆô ‡w�w×јÓ! !Ñ$ Q RÐ(¨JÑ6Ü—7‘7×#Ñ# HÓ-¨aÑ0ˆô �"Š œ& ™)Ÿ.™.¨EÒ1Ü”l 5Ó)Ó*ˆð �T˜5¤%¨ Ó"3Ð 4€CðÜ$ S™/‰ˆ �4ô �I‰I‹K˜)Ñ #¬¯ © ×(=Ñ(=Ò =ܘ3‘àˆKçˆÜ˜( D¨$° Ó;ˆÚ Ü#Ÿy™y›{¨DÐ1ŒJ�s‰OØŠKð ÷ˆ Ø œYÑ &Ü”D—I‘I“K¤)¨IÑ"6°qÑ"9Ñ9Ó:¼c¿j¹j×>SÑ>SÓSܘ)Ñ$ QÑ'¬"¯'©'×*:Ñ*:¸9Ó*EÓEÜ—‘— ‘ ˜iÕ(Ü$&§J¡J¨yÓ$9¼4¿9¹9»;ÌÏÉ×HXÑHXÐYbÓHcÐ#dŒI�iÒ ð ô!—‘Ö(‰ ˆˆVÛ#ˆIð Ø˜c‘> IÑ-°¸±Ñ:ÜŸ7™7Ÿ<™<¨¨X¸©^¸iÑ-GÓH�DÜ'+§y¡y£{°DÐ&9”J˜s‘OØ”Kð;ñ$ð)ð � Òܘ8 T¨9Ó5ˆÜŸ9™9›;¨Ð-Œ �3‰Øˆ ðøôI ò Ú ð ûô:&ò ÝØ�Gäûð  ús+Ã, LÊAL Ì LÌLÌ L;Ì)L6Ì6L;có—tjj|«rbtjj|«ddz}tjj|«rt «}|j |«|Syy)zÜRetrieve the data from the .icon file corresponding to the given file. If there is no .icon file, it returns None. Example:: getIconData("/usr/share/icons/Tango/scalable/places/folder.svg") rr˜N)rrÚisfilerªr‡r)rÚ icon_fileÚdatas rÚ getIconDatarËPsd€ô ‡w�w‡~�~�dÔÜ—G‘G×$Ñ$ TÓ*¨1Ñ-°Ñ7ˆ Ü �7‰7�>‰>˜)Ô $Ü“:ˆDØ �J‰J�yÔ !؈Kð %ðrc#óÞK—tD]†}tjj||d«}tjj |«rnVtjj||d«}tjj |«sŒ†nt r t |«‚yt«}|j|«|–—|j«D]}t|«D]}|–—ŒŒy­w)zjGenerator yielding IconTheme objects for a specified theme and any themes from which it inherits. z index.themez index.desktopN) r²rrr¹rÈrrr rr0r¬)Ú themenamerÚ theme_filer¾ÚsubthemeÚts rr¬r¬_s¶èø€÷ˆÜ—W‘W—\‘\ # y°-Ó@ˆ Ü �7‰7�>‰>˜*Ô %Ù Ü—W‘W—\‘\ # y°/ÓBˆ Ü �7‰7�>‰>˜*Õ %Ù ð õ ܘyÓ)Ð )Øä ‹K€EØ ‡K�K� ÔØ ‚KØ×%Ñ%Ö'ˆÜ˜hÖ'ˆAØ‹Gñ(ñ(ùs ‚B C-ÂAC-c ób—|jtvr±gt|j<t|jjtj«tj j dzz «t|jjd«t|jjt««ttj«t|jdz «tj j k\�r�tj«t|jd<|j«D�]a}tD�]T}tjj||j|«}|t|jdvs_t|jdtjjtjj||j««ksŒ¦|dk7sŒ¬tjj|«sŒÌ|tj |«gt|jd|<tjjtjj||j««t|jd<�ŒW�Œdt|jdj#«D]T\}}t%|d||«sŒ|D]9}|dz|z|dvsŒtjj||dz|z«ccSŒVd} d} t|jdj#«D]X\}}t'|d||«} | | ksŒ|D]8}|dz|z|dvsŒtjj||dz|z«} | } Œ:ŒZ| S)Nr_rr[Úr¤l)rÚ theme_cacherer¯rzr¦r°Údictr´r3r²rrr¹rµr¶r·r¸ÚDirectoryMatchesSizeÚDirectorySizeDistance) r¼r½r¾r¿ÚsubdirrFrrÄrÅÚ minimal_sizeÚclosest_filenameÚdistances rr±r±vsÐ€à ‡z�zœÑ$Ø"$Œ �E—J‘JÑÜ�E—J‘JÑ×&Ñ&¤t§y¡y£{´c·j±j×6KÑ6KÈaÑ6OÑ'PÔQÜ�E—J‘JÑ×&Ñ& qÔ)Ü�E—J‘JÑ×&Ñ&¤t£vÔ.ô Œ4�9‰9‹;œ U§Z¡ZÑ0°Ñ3Ñ 3Ó4¼¿ ¹ ×8MÑ8MÓMÜ%)§Y¡Y£[Œ �E—J‘JÑ Ñ"Ø×*Ñ*×,ˆFß%˜X� Ü—g‘g—l‘l 9¨U¯Z©Z¸Ó?�Øœ{¨5¯:©:Ñ6°qÑ9Ñ9ܘuŸz™zÑ*¨1Ñ-´·±×0@Ñ0@ÄÇÁÇÁÈiÐX]×XbÑXbÓAcÓ0dÓdؘb“LÜ—G‘G—M‘M #Õ&Ø7=¼r¿z¹zÈ#»Ð6O”K § ¡ Ñ+¨AÑ.¨sÑ3Ü13·±×1AÑ1AÄ"Ç'Á'Ç,Á,ÈyÐY^×YcÑYcÓBdÓ1e”K § ¡ Ñ+¨AÓ.ò&ð-ô# 5§:¡:Ñ.¨qÑ1×7Ñ7Ö9‰ ˆˆVÜ   q¡ ¨4°Õ 7Û'� ؘc‘> IÑ-°¸±Ò:ÜŸ7™7Ÿ<™<¨¨X¸©^¸iÑ-GÓHÔHñ(ð:ð €LØÐÜ" 5§:¡:Ñ.¨qÑ1×7Ñ7Ö9‰ ˆˆVÜ(¨°©°D¸%Ó@ˆØ �lÓ "Û'� ؘc‘> IÑ-°¸±Ò:Ü')§w¡w§|¡|°C¸ÀC¹È)Ñ9SÓ'TÐ$Ø#+‘Lñ(ð:ð Ðrcó"—|j|«}|j|«}|j|«}|j|«}|j |«}|dk(r||k(S|dk(r||cxkxr|kScS|dk(r||z |cxkxr||zkScSy)NrxÚ ScaleablerN)rQrGr\rYrU©r×Úiconsizer¾rMrArNrXrSs rrÕrÕ�s«€Ø �=‰=˜Ó €DØ �=‰=˜Ó €DØ×"Ñ" 6Ó*€IØ×јvÓ&€GØ×јvÓ&€GØ ˆw‚Ø�xÑÐØ �Ò Ø˜(Ö- gÑ-Ð-Ñ-Ð-Ø �Ò Ø�iÑ 8Ö?¨t°iÑ/?Ñ?Ð?Ñ?Ð?ð rcóH—|j|«}|j|«}|j|«}|j|«}|j |«}|dk(rt ||z «S|dk(r||kr||z S||kDr||z Sy|dk(r|||z kr||z S|||zkDr||z Syy)NrxryrrN)rQrGr\rYrUÚabsrÝs rrÖrÖªsÕ€Ø �=‰=˜Ó €DØ �=‰=˜Ó €DØ×"Ñ" 6Ó*€IØ×јvÓ&€GØ×јvÓ&€GØ ˆw‚Ü�4˜(‘?Ó#Ð#Ø �Ò Ø �gÒ Ø˜XÑ%Ð %Ø ˜Ò ؘXÑ%Ð %ØØ �Ò Ø �d˜YÑ&Ò &ؘXÑ%Ð %Ø ˜˜yÑ(Ò (ؘgÑ%Ð %Øð r) r„rr¯rpÚ xdg.IniFilerrÚxdg.BaseDirectoryrÚxdg.ExceptionsrrÚ xdg.Configrzr r‡r²Úbasedirrerr¹Ú expanduserr«rÓr³r®r»rËr¬r±rÕrÖr…rrÚrçsÞðñ÷ Û ç)Ý+ß.ãôi<�ôi<ôX38ˆwô38ðn €Û€GØ ‡O�O�B—G‘G—L‘L ¨'Ó2Ô3Ø ‡O�O�B—G‘G—L‘L ¨)Ó4Õ5ðð ‡��—‘×"Ñ" :Ó.Ô/ð €Ø€ Ø € Ø € à!%¨tÒBWóPòd òò.%òN @ór