403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.216.73
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/xdg/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/xdg/__pycache__/Menu.cpython-311.pyc
�

�u�c������dZddlZddlZddlZddlZddlZ	ddlmcmZn#e	$rddl
mcmZYnwxYwddlm
Z
mZddlmZddlmZddlmZddlZddlZd�Zd�Zd	Zd
ZdZdZd
ZdZGd�d��Z Gd�d��Z!Gd�d��Z"Gd�d��Z#Gd�d��Z$Gd�d��Z%Gd�d��Z&d\Z'Z(d�Z)d�Z*d �Z+d!�Z,Gd"�d#e-��Z.Gd$�d%��Z/d(d'�Z0dS))a�
Implementation of the XDG Menu Specification
http://standards.freedesktop.org/menu-spec/

Example code:

from xdg.Menu import parse, Menu, MenuEntry

def print_menu(menu, tab=0):
  for submenu in menu.Entries:
    if isinstance(submenu, Menu):
      print ("	" * tab) + unicode(submenu)
      print_menu(submenu, tab+1)
    elif isinstance(submenu, MenuEntry):
      print ("	" * tab) + unicode(submenu.DesktopEntry)

print_menu(parse())
�N)�
xdg_data_dirs�xdg_config_dirs)�DesktopEntry)�ParsingError)�PY3c��tjdkrLtj|��}tjdkrtj|��Stj|��Stj|tj�����S)N)��)r	���id�ctx)�sys�version_info�ast�literal_eval�Constant�NameConstant�Name�Load)�names �*/usr/lib/python3/dist-packages/xdg/Menu.py�
_ast_constr'sj��
��6�!�!����%�%����v�%�%��<��%�%�%��#�D�)�)�)��x�4�S�X�Z�Z�0�0�0�0�c��ts*t|t��r|�d��}t	j|��S)zgWrapper around locale.strxfrm that accepts unicode strings on Python 2.

    See Python bug #2481.
    zutf-8)r�
isinstance�unicode�encode�locale�strxfrm)�ss r�_strxfrmr"2s>��

��Z��7�+�+��
�H�H�W�����>�!���r�Deleted�	NoDisplay�Hidden�Empty�	NotShowIn�NoExecc��eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
	dd
�Zdd�Zd�Z
dd
�Zd�Zd�Zd�Zd�Zd�Z	d�Zd�ZdS)�Menuz^Menu containing sub menus under menu.Entries

    Contains both Menu and MenuEntry items.
    c�,�d|_d|_g|_d|_d|_d|_d|_d|_d|_d|_	g|_
d|_d|_g|_
g|_d|_g|_g|_d|_g|_g|_dS)N�rFT)r�	Directory�Entries�Doc�Filename�Depth�Parent�NotInXml�Show�Visible�AppDirs�
DefaultLayoutr#�Directories�
DirectoryDirs�Layout�MenuEntries�Moves�OnlyUnallocated�Rules�Submenus��selfs r�__init__z
Menu.__init__Is�����	������������
���
������
���	�������!��������������������
�#�����
���
�
�
rc��|jS�N�rr@s r�__str__zMenu.__str__e�
���y�rc�D�|jD]}|j�|���|jD]}|j�|���|jD]}|j�|���|j�|j|_|j�|j|_|jr|j|_|jr|j|_|jD]}|j�|���|j	D]}|j	�|���|j
D]}|�|���|SrD)r6�appendr9r8r#r=r:r7r>r<r?�
addSubmenu)rA�other�dir�	directory�rule�move�submenus       r�__add__zMenu.__add__hsQ���=�	%�	%�C��L����$�$�$�$��&�	+�	+�C���%�%�c�*�*�*�*��*�	/�	/�I���#�#�I�.�.�.�.��=�$� �=�D�L�� �,�#(�#8�D� ��<�	'��,�D�K���	5�!&�!4�D���K�	$�	$�D��J���d�#�#�#�#��K�	$�	$�D��J���d�#�#�#�#��~�	%�	%�G��O�O�G�$�$�$�$��rc�t�tj|���|�����SrD)r�strcoll�getName�rArKs  r�__cmp__zMenu.__cmp__�s$���~�d�l�l�n�n�e�m�m�o�o�>�>�>rc�D�t|�����S�z&Key function for locale-aware sorting.)r"rTr@s r�_keyz	Menu._key�s��������'�'�'rc�~�	|���}n#t$rYnwxYw|���|kSrD�rY�AttributeErrorrUs  r�__lt__zMenu.__lt__��I��	��J�J�L�L�E�E���	�	�	��D�	�����y�y�{�{�U�"�"���
$�$c��	|jt|��kS#t$r|jt|��kcYSwxYwrD)rr�	NameError�strrUs  r�__eq__zMenu.__eq__�sN��	+��9�����.�.���	+�	+�	+��9��E�
�
�*�*�*�*�	+���s��"?�?Fc#�FK�|jD]}|r|V��	|jdur|V��dS)z4Interator for a list of Entries visible to the user.TN)r.r4)rA�show_hidden�entrys   r�
getEntrieszMenu.getEntries�sK�����\�	�	�E��
��������t�#�#������		�	rc��|jD]}|j|kr|cS�|r |jD]}|�||���dSdS)z4Searches for a MenuEntry with a given DesktopFileID.N)r;�
DesktopFileIDr?�getMenuEntry)rA�
desktopfileid�deep�	menuentryrPs     rrjzMenu.getMenuEntry�sy���)�	!�	!�I��&�-�7�7� � � � �8��	:��=�
:�
:���$�$�]�D�9�9�9�9�	:�	:�
:�
:rc���|�dd��}|jD]G}|j|dkr4t|��dkr|�|d��cS|cS�HdS)z&Searches for a Menu with a given path.�/�rN)�splitr?r�len�getMenu)rA�path�arrayrPs    rrszMenu.getMenu�sz���
�
�3��"�"���}�	#�	#�G��|�u�Q�x�'�'��u�:�:��>�>�"�?�?�5��8�4�4�4�4�4�"�N�N�N�	(�	#�	#rc�f�|}g}	|r|�|j��n'|�|�����|jdkr|j}nn�Y|���d}|s|�d��|D]"}tj�	||��}�#|S)z/Returns this menu's path in the menu structure.rprr,)
rIrrTr1r2�reverse�pop�osrt�join)rA�org�toplevel�parent�namesrtrs       r�getPathzMenu.getPath�s�������	��
/����V�[�)�)�)�)����V�^�^�-�-�.�.�.��|�a��������	�	�
�
�������	��I�I�a�L�L�L��	,�	,�D��7�<�<��d�+�+�D�D��rc�n�	|jj���S#t$r
|jcYSwxYw)z"Returns the menu's localised name.)r-rrTr\rr@s rrTzMenu.getName�sG��	��>�.�6�6�8�8�8���	�	�	��9����	���s� �4�4c�b�	|jj���S#t$rYdSwxYw)z Returns the menu's generic name.r,)r-r�getGenericNamer\r@s rr�zMenu.getGenericName�s@��	��>�.�=�=�?�?�?���	�	�	��2�2�	����� �
.�.c�b�	|jj���S#t$rYdSwxYw)z Returns the menu's comment text.r,)r-r�
getCommentr\r@s rr�zMenu.getComment�s@��	��>�.�9�9�;�;�;���	�	�	��2�2�	���r�c�b�	|jj���S#t$rYdSwxYw)z0Returns the menu's icon, filename or simple namer,)r-r�getIconr\r@s rr�zMenu.getIcon�s@��	��>�.�6�6�8�8�8���	�	�	��2�2�	���r�c��g|_d|_|jD]}|����t	��}t	��}|jjD]Q}|ddkr|�|d���*|ddkr|�|d���R|jjD�]}|ddkrit|��}t|j��dkr't|jdt��rd|_|j�|���x|ddkr8|�
|d��}|r|j�|����|ddkr\|�|d��}|r=|jjr|�|����|j�|����$|ddkr�|dd	ks|dd
krH|j���|jD]%}|j|vr|j�|���&���|ddks|dd
krh|j���|jD]G}|j|vr<|jjr|�|���-|j�|���H��|jD�]~}d|_|xjdz
c_t|t(��r�|jdurt,|_|xjdzc_�Ut|jt0��ru|jj���rt6|_|xjdzc_��|jj���rt:|_|xjdzc_��t|t0���r^|j���rt6|_|xjdzc_��2|j���rt:|_|xjdzc_��i|j���r7|j���st@|_|xjdzc_���tBj"j#r�|j�$��gkr*tBj"j#|j�$��vs*tBj"j#|j�%��vrtL|_|xjdzc_��Yt|t��r|xjdzc_���t|j��dkr2t|jdt��rd|jd_t|j��dkr2t|jdt��rd|jd_|jdd�D]m}t|t(��rV|jj'sJ|jdkr?tP|_|xjdzc_|j)dur|j�*|���ndS)
Nrr0rp�Menuname�	Separator���F�Merge�files�all�menusT)+r.r5r?�sort�setr:�order�addr�rrrr4rIrjrs�inline�merge_inliner;rirr*r#�DELETEDr-�	MenuEntryr�getNoDisplay�
NO_DISPLAY�	getHidden�HIDDEN�
getTryExec�findTryExec�NO_EXEC�xdg�Config�
windowmanager�
getOnlyShowIn�getNotShowIn�NOT_SHOW_IN�
show_empty�EMPTYr3�remove)rArP�	_submenus�_entriesr��	separatorrmrfs        rr�z	Menu.sort�s	���������}�	�	�G��L�L�N�N�N�N��E�E�	��5�5���[�&�	(�	(�E��Q�x�:�%�%����U�1�X�&�&�&�&��q��Z�'�'��
�
�e�A�h�'�'�'���[�&�	=�	=�E��Q�x�;�&�&�%�d�O�O�	��t�|�$�$�q�(�(�Z���R�8H�)�-T�-T�(�%*�I�N���#�#�I�.�.�.�.��q��Z�'�'� �-�-�e�A�h�7�7�	��3��L�'�'�	�2�2�2���q��Z�'�'��,�,�u�Q�x�0�0���5��~�,�5��)�)�'�2�2�2�2���+�+�G�4�4�4���q��W�$�$���8�w�&�&�%��(�e�*;�*;��$�)�)�+�+�+�%)�%5�;�;�	�$�2�(�B�B� �L�/�/�	�:�:�:��;��1�X��(�(�E�!�H��,=�,=��M�&�&�(�(�(�#'�=�=�=��"�<�y�8�8�&�~�4�=� $� 1� 1�'� :� :� :� :� $�� 3� 3�G� <� <� <����\�"	"�"	"�E��E�J��L�L�A��L�L��%��&�&�
"��=�D�(�(�!(�E�J��L�L�A�%�L�L�L�����;�;�*���3�@�@�B�B�*�%/��
�����)������5�?�?�A�A�*�%+��
�����)�����E�9�-�-�
"��%�2�2�4�4�*�!+�E�J��L�L�A�%�L�L�L��'�1�1�3�3�*�!'�E�J��L�L�A�%�L�L�L��'�2�2�4�4�*�U�=O�=[�=[�=]�=]�*�!(�E�J��L�L�A�%�L�L�L��Z�-�*��*�8�8�:�:�b�@�@��J�4�E�<N�<\�<\�<^�<^�^�^��
�0�E�4F�4S�4S�4U�4U�U�U�%0��
�����)�����E�9�-�-�
"�����!�����t�|���q� � ��$�,�q�/�9�5�5�
-�',���Q��$��t�|���q� � ��$�,�r�*�I�6�6�
.�(-���R� �%��\�!�!�!�_�	/�	/�E��%��&�&�
/�u�|�/F�
/�5�=�\]�K]�K]�"��
�����!����>�T�)�)��L�'�'��.�.�.��	/�	/rc��|jD]}||kr||z
}dS�|j�|��||_|jdz|_dS)Nrp)r?rIr2r1)rA�newmenurPs   rrJzMenu.addSubmenuTsd���}�	+�	+�G��'�!�!��7�"�����"�
�M� � ��)�)�)�!�G�N� �J��N�G�M�M�Mrc�x�t|j��dkr�|jjr�|jd}|j�d|���d���|j�d|���d���|j�d|���d���|j�	|��dSt|j��|jj
ks|jj
dkr�|jjrat|���|���|�����}|j�	|��|jD]}|j�	|���dS|j�	|��dS)	z}Appends a submenu's entries to this menu
        See the <Menuname> section of the spec about the "inline" attribute
        rprrT)r�GenericName�CommentN)
rrr.r:�inline_aliasrr�rTr�r�rI�inline_limit�
inline_header�Header)rArPrm�headerrfs     rr�zMenu.merge_inline_s����w����1�$�$���)D�$����*�I��"�&�&�v�w���/@�/@��&�N�N�N��"�&�&�}�g�6L�6L�6N�6N�W[�&�\�\�\��"�&�&�y�'�2D�2D�2F�2F�t�&�T�T�T��L���	�*�*�*�*�*�
���
!�
!�W�^�%@�
@�
@�G�N�D_�cd�Dd�Dd��~�+�
,����� 1� 1�7�3I�3I�3K�3K�W�M_�M_�Ma�Ma�b�b����#�#�F�+�+�+� ��
+�
+����#�#�E�*�*�*�*�
+�
+�
�L����(�(�(�(�(rN�F)FF)�__name__�
__module__�__qualname__�__doc__rBrFrQrVrYr]rcrgrjrsrrTr�r�r�r�rJr��rrr*r*DsJ�����������8������D?�?�?�(�(�(�#�#�#�+�+�+������:�:�:�:�#�#�#�����*������������b/�b/�b/�H�+�+�+�)�)�)�)�)rr*c� �eZdZdZdd�Zd�ZdS)�MovezA move operationr,c�"�||_||_dSrD)�Old�New)rA�old�news   rrBz
Move.__init__us���������rc�6�t|j|j��SrD)�cmpr�rUs  rrVzMove.__cmp__ys���4�8�U�Y�'�'�'rN�r,r,)r�r�r�r�rBrVr�rrr�r�ss=������������(�(�(�(�(rr�c�T�eZdZdZ		d	d�Zed���Zejd���ZdS)
r:zMenu Layout classFr
Tc�t�||_||_||_||_||_g|_ddgddgg|_dS)Nr�r�r�)r�r�r�r�r��_order�_default_order)rAr�r�r�r�r�s      rrBzLayout.__init__sO��$������(���*���(������
�g��
�g��
����rc�,�|jr|jn|jSrD)r�r�r@s rr�zLayout.order�s��"�k�B�t�{�{�t�/B�Brc��||_dSrD)r�)rAr�s  rr�zLayout.order�s
������rN)FFr
TF)r�r�r�r�rB�propertyr��setterr�rrr:r:}so��������DE�27�
�
�
�
��C�C��X�C��\����\���rr:c�D�eZdZdZd\ZZed���Zd�Zd�Z	d�Z
dS)�RulezInclude / Exclude Rules Class�rrpc
��tjtjtj|��tj��gtjtjdtj�����dtj�����g���dd���}tj|��t||��}|S)	Nrmrri��value�attrr��left�ops�comparatorsrpr)�body�lineno�
col_offset)
r�
Expression�Compare�Str�Eq�	Attributerr�fix_missing_locationsr�)�cls�type�filename�treerNs     r�fromFilenamezRule.fromFilename�s����~����W�X�&�&��V�X�X�J� �]��(�k�s�x�z�z�B�B�B�(���
�
����������
�
�
��	�!�$�'�'�'��D�$�����rc�X�||_||_t|jdd��|_dS)Nz<compiled-menu-rule>�eval)�Type�
expression�compile�code)rAr�r�s   rrBz
Rule.__init__�s*����	�$����D�O�-C�V�L�L��	�	�	rc�4�tj|j��SrD)r�dumpr�r@s rrFzRule.__str__�s���x���(�(�(rc��|D]X}|dkr|jdus	|jdur�t|j��r)|jt
jurd|_d|_�Qd|_�Y|S)N�TF)�MatchedInclude�	Allocatedr�r�r�r��TYPE_INCLUDE�Add)rA�menuentries�runrms    r�applyz
Rule.apply�sx��$�		*�		*�I��a�x�x�Y�5��=�=�&�0�D�8�8���D�I���
*��9�� 1�1�1�$(�I�M�/3�I�,�,�$)�I�M���rN)r�r�r�r�r��TYPE_EXCLUDE�classmethodr�rBrFr�r�rrr�r��sm������'�'�!%��L�,�����[��"M�M�M�)�)�)�����rr�c�j�eZdZdZdZdZdZdd�Zd�Zd�Z	d	�Z
dd
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�ZdS)r�z(Wrapper for 'Menu Style' Desktop Entries�User�System�Bothr,c�(�ttj�||����|_|�|||��d|_d|_g|_d|_d|_	d|_
|j���|_dS�NTF)
rryrtrz�
setAttributesr4�Original�Parentsr�r�r��
getCategories�
Categories�rAr�rL�prefixs    rrBzMenuEntry.__init__�s���(�����c�8�)D�)D�E�E������8�S�&�1�1�1���	���
����������#����+�9�9�;�;����rc�T�|jjr|j���dSdS)z&Save any changes to the desktop entry.N)r�tainted�writer@s r�savezMenuEntry.save�s5����$�	&���#�#�%�%�%�%�%�	&�	&rc�L�|jj�|jd��S)z7Return the directory containing the desktop entry file.r,)rr��replacer0r@s r�getDirzMenuEntry.getDir�s ��� �)�1�1�$�-��D�D�Drc��tjjs5|jr|jSt
d|jjvr|jS|j	S|jS)z.Return the type of MenuEntry, System/User/Bothr)
r�r��	root_moder�	TYPE_BOTHrrr��	TYPE_USER�TYPE_SYSTEMr@s r�getTypezMenuEntry.getType�sP���z�#�	"��}�
(��~�%��q�!�T�%6�%?�?�?��~�%��'�'��>�!rc��||_||_tj�||���dd��|_tj�|jj	��s|�
��dSdS)Nro�-)r0�Prefixryrtrzrri�isabsrr��_MenuEntry__setFilenamers    rr�zMenuEntry.setAttributes�sv�� ��
�����W�\�\�&�(�;�;�C�C�C��M�M����w�}�}�T�.�7�8�8�	!���� � � � � �	!�	!rc���|���|jkrHt|j|���|j��|_|���dSdSrD)rrr�r0rrrrr@s r�updateAttributeszMenuEntry.updateAttributes�sW���<�<�>�>�T�-�-�-�%�d�m�T�[�[�]�]�D�K�P�P�D�M���� � � � � �.�-rc�x�tjjstd}n
td}|j���dkr!tj�|d��}n tj�|d��}tj�||j	��|j_
dS)Nrrp�Application�applications�desktop-directories)r�r�rrrrryrtrzr0r�)rArt�dir_s   r�
__setFilenamezMenuEntry.__setFilenames����z�#�	$� ��#�D�D� ��#�D���$�$�&�&�-�7�7��7�<�<��n�5�5�D�D��7�<�<��&;�<�<�D�%'�W�\�\�$��
�%F�%F���"�"�"rc��tj|j���|j�����SrD)rrSrrTrUs  rrVzMenuEntry.__cmp__s2���~�d�/�7�7�9�9�5�;M�;U�;U�;W�;W�X�X�Xrc�N�t|j�����SrX)r"rrTr@s rrYzMenuEntry._keys����)�1�1�3�3�4�4�4rc�~�	|���}n#t$rYnwxYw|���|kSrDr[rUs  rr]zMenuEntry.__lt__r^r_c�:�|jt|��krdSdSr�)rirbrUs  rrczMenuEntry.__eq__s �����U���+�+��4��5rc��|jSrD)rir@s r�__repr__zMenuEntry.__repr__"s���!�!rNr�)r�r�r�r�rrrrBr	rrr�rrrVrYr]rcr%r�rrr�r��s�������.�.��I��K��I�<�<�<�<�(&�&�&�
E�E�E�
"�
"�
"�!�!�!�!�!�!�!�
G�G�G�Y�Y�Y�5�5�5�#�#�#����"�"�"�"�"rr�c��eZdZdZd�ZdS)r�z!Just a dummy class for Separatorsc�"�||_d|_dS)NT)r2r4)rAr}s  rrBzSeparator.__init__(s�������	�	�	rN)r�r�r�r�rBr�rrr�r�&s)������'�'�����rr�c��eZdZdZd�Zd�ZdS)r�zClass for Inline Headersc�0�||_||_||_dSrD)rr�r�)rAr�generic_name�comments    rrBzHeader.__init__/s����	�'�������rc��|jSrDrEr@s rrFzHeader.__str__4rGrN)r�r�r�r�rBrFr�rrr�r�-s8�����������
����rr�r�c���tj�|��}tj�|��s tj�||��}tj�|��}tj�|��sdS|tkr!tj�|��r|S|tkr!tj�
|��r|SdS�NF)ryrt�dirnamerrz�abspath�exists�TYPE_DIR�isdir�	TYPE_FILE�isfile)r�r�r�rts    r�_check_file_pathr6;s���
�7�?�?�8�$�$�D�
�7�=�=����*�����T�5�)�)���G�O�O�E�"�"�E�
�7�>�>�%� � ���u��x���B�G�M�M�%�0�0�����y���R�W�^�^�E�2�2�����5rc��tt��}tjjdur|�d��|D]F}tj�|d|��}tj�	|��r|cS�GdS)NTrr�)
�listrr�r�rrxryrtrzr5)r��dirs�d�menunames    r�_get_menu_file_pathr<Is����� � �D�
�z��t�#�#��������
�����7�<�<��7�H�5�5��
�7�>�>�(�#�#�	��O�O�O�	��rc�`�t|t��r|S|���dkS)N�true)r�bool�lower)r�s r�_to_boolrASs,���%��������;�;�=�=�F�"�"rc�x��i�|����fd�|D��}|���|S)Nc�D��g|]}|�v���||����Sr�)�
setdefault)�.0�e�_sets  �r�
<listcomp>z_dedupe.<locals>.<listcomp>]s,���C�C�C�q�Q�d�]�]�T�_�_�Q��
"�
"�]�]�]r)rw)�_listrGs @r�_deduperJZs@���
�D�	�M�M�O�O�O�C�C�C�C�E�C�C�C�E�	�M�M�O�O�O��Lrc��eZdZdd�Zdd�Zd�Zdd�Zd�Zd�Zd	�Z	d
�Z
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�XMLMenuBuilderFc��||_dSrD)�debug)rArNs  rrBzXMLMenuBuilder.__init__ds
����
�
�
rNc��|r.tj�|��st|��}|sftj�dd��dz}t|��}|s2tj�dd��dz}t|��}|st
dd|z���|�d��st
d|���	tj	|��}n#t
d	|���xYwt��|_t��|_t��|_|�|���|��}||_||_|�|��|�|��|�|��|�|��|���|S)
z�Load an applications.menu file.

        filename : str, optional
          The default is ``$XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu``.
        �XDG_MENU_PREFIXr,�applications.menuzdebian-menu.menu�File not foundz/etc/xdg/menus/%s�.menuzNot a .menu file�Not a valid .menu file)ryrtrr<�environ�getr�endswith�etree�parser��
_merged_files�_directory_dirs�MenuEntryCache�cache�
parse_menu�getrootr�r��handle_moves�
post_parse�generate_not_only_allocated�generate_only_allocatedr�)rAr��	candidater��menus     rrYzXMLMenuBuilder.parsegs����	5�B�G�M�M�(�3�3�	5�*�8�4�4�H��	:��
���'8�"�=�=�@S�S�I�*�9�5�5�H��
:��J�N�N�+<�b�A�A�+=�>�	�.�y�9�9���	R��/�1D�y�1P�Q�Q�Q�� � ��)�)�	=��1�8�<�<�<�	C��;�x�(�(�D�D��	C��7��B�B�B����!�U�U���"�u�u���#�%�%��
����t�|�|�~�~�x�8�8����	� ��
����$�����������	
�(�(��.�.�.��$�$�T�*�*�*�	
�	�	�����s�C)�)C;c�P�t��}|�|||��|SrD)r*�
parse_node)rA�noder�res    rr^zXMLMenuBuilder.parse_menu�s&���v�v������h��-�-�-��rc��t|��}|D�]�}|j|j}}|r|���nd}|dkr,|�||��}|�|���[|dkr|r|�|||���{|dkr|�||����|dkr|r|�|||����|dkr|�	||����|dkr
|r||_
��|dkr|r|j�|����	|dkr	d	|_
��|d
kr	d|_
��'|dkr	d	|_��6|d
kr	d|_��E|dks|dkr/|j�|�|�������|dkrU|j�dd��dkr|�d|||�����|r|�||||�����|dkr|r|�||||�����|dkr|�|||����|dkr/|j�|�|������Q|dkr"|dkr|�|��|_��y|dkr"|dkr|�|��|_���|dkr5|r3|�||j�dd��||�����|dkr|�||�����dS)Nr*�AppDir�DefaultAppDirs�DirectoryDir�DefaultDirectoryDirsrr-r=T�NotOnlyUnallocatedFr#�
NotDeleted�Include�Exclude�	MergeFiler�r}rQ�MergeDir�DefaultMergeDirsr�r:rpr7�	LegacyDirrr,�
KDELegacyDirs)rr�tag�text�stripr^rJ�
parse_app_dir�parse_default_app_dir�parse_directory_dir�parse_default_directory_dirrr8rIr=r#r>�
parse_rule�attribrV�parse_merge_file�parse_merge_dir�parse_default_merge_dirsr<�
parse_move�parse_layoutr:r7�parse_legacy_dir�parse_kde_legacy_dirs)	rArhr�r}�num_children�childrwrxres	         rrgzXMLMenuBuilder.parse_node�s����4�y�y���0	=�0	=�E��	�5�:��C�#'�1�4�:�:�<�<�<�T�D��f�}�}����u�h�7�7���!�!�$�'�'�'�'�����T���"�"�4��6�:�:�:�:��(�(�(��*�*�8�V�<�<�<�<���&�&�4�&��(�(��x��@�@�@�@��.�.�.��0�0��6�B�B�B�B�����4��"������#�#��#��"�)�)�$�/�/�/�/��)�)�)�)-��&�&��,�,�,�).��&�&��	�!�!�!%������$�$�!&�����	�!�!�S�I�%5�%5���#�#�D�O�O�E�$:�$:�;�;�;�;���#�#��<�#�#�F�D�1�1�X�=�=��)�)�*=�u�h�PV�W�W�W�W��I��)�)�$��x��H�H�H���
�"�"�t�"��$�$�T�5�(�F�C�C�C�C��*�*�*��-�-�e�X�v�F�F�F�F�������#�#�D�O�O�E�$:�$:�;�;�;�;������!�#�#�$(�$5�$5�e�$<�$<�F�M����'�'��!�#�#�+/�+<�+<�U�+C�+C�F�(����#�#��#��%�%�d�E�L�,<�,<�X�r�,J�,J�H�V\�]�]�]�]���'�'��*�*�8�V�<�<�<��a0	=�0	=rc���tt|j�dd����t|j�dd����t	|j�dd����t|j�dd����t|j�dd�����	��}g}|D�]�}|j|j}}|r|���nd}|d
kr�|r�|�d
|t|j�dd����t|j�dd����t	|j�dd����t|j�dd����t|j�dd����g����
|dkr|�dg����+|dkr|r|�d|g����L|d
kr0|�d
|j�dd��g�����||_	|S)Nr�Fr�r�r
r�Tr�)r�r�r�r�r�r�r�r0r�r�r�)
r:rArrV�intrwrxryrIr�)rArh�layoutr�r�rwrxs       rr�zXMLMenuBuilder.parse_layout�s6���������e� D� D�E�E��D�K�O�O�H�e�<�<�=�=��T�[�_�_�^�Q�?�?�@�@�"�4�;�?�?�?�D�#I�#I�J�J�!�$�+�/�/�.�%�"H�"H�I�I�
�
�
�����	�	�E��	�5�:��C�#'�1�4�:�:�<�<�<�T�D��j� � �T� �������U�\�-�-�l�E�B�B�C�C��U�\�-�-�h��>�>�?�?����(�(���;�;�<�<��U�\�-�-�o�t�D�D�E�E��U�\�-�-�n�e�D�D�E�E��������#�#����k�]�+�+�+�+��
�"�"�t�"����j�$�/�0�0�0�0����������L�$�$�V�U�3�3����������
rc��d\}}|D]=}|j|j}}|r|���nd}|dkr|r|}�3|dkr|r|}�>t||��S)Nr�r�r�)rwrxryr�)rArhr�r�r�rwrxs       rr�zXMLMenuBuilder.parse_move�sr�����S��	�	�E��	�5�:��C�#'�1�4�:�:�<�<�<�T�D��e�|�|��|��������$������C��~�~�rc�F�|jdkrtjntj}t	jdd���}|�|t	j����}|r||_ntd��|_t	j
|��t||��S)Nrprpr)r�r��False)rwr�r�r�rr��
parse_bool_op�Orr�rr�)rArhr�r��exprs     rr~zXMLMenuBuilder.parse_rules���$(�H�	�$9�$9�t� � �t�?P���~�Q�1�5�5�5���!�!�$�����1�1���	,��D�I�I�"�7�+�+�D�I��!�$�'�'�'��D�$���rc���g}|D].}|�|��}|r|�|���/t|��}|dkrtj||��S|dkr|dSdS)Nrpr)�parse_rule_noderIrrr�BoolOp)rArh�operator�valuesr�rN�
num_valuess       rr�zXMLMenuBuilder.parse_bool_ops������	$�	$�E��'�'��.�.�D��
$��
�
�d�#�#�#����[�[�
���>�>��:�h��/�/�/�
�1�_�_��!�9���trc���|j}|dkr'|�|tj����S|dkr'|�|tj����S|dkrQ|�|tj����}|r&tjtj��|��ndS|dkrtd��S|dkr�|j}tj	tj
|��tj��gtjtj
dtj�����d	tj���
��g���S|dkr�|j}tj	tj
|��tj��gtjtj
dtj�����d
tj���
��g���SdS)Nr��And�Not�All�True�Categoryrmrrr�r�r0ri)rwr�rr�r��UnaryOpr�rrxr�r��Inr�rrr�)rArhrwr��categoryr�s      rr�zXMLMenuBuilder.parse_rule_nodes����h���$�;�;��%�%�d�C�F�H�H�5�5�5�
�E�\�\��%�%�d�C�G�I�I�6�6�6�
�E�\�\��%�%�d�C�F�H�H�5�5�D�37�A�3�;�s�w�y�y�$�/�/�/�T�A�
�E�\�\��f�%�%�%�
�J�
�
��y�H��;��W�X�&�&��V�X�X�J� �]��(�k�s�x�z�z�B�B�B�%���
�
��������
��J�
�
��y�H��;��W�X�&�&��V�X�X�J� �]��(�k�s�x�z�z�B�B�B�(���
�
��������
��
rc�n�t||t��}|r|j�|��dSdSrD)r6r2r6rI�rAr�r�r}s    rrzzXMLMenuBuilder.parse_app_dirAsA�� ���(�;�;���	)��N�!�!�%�(�(�(�(�(�	)�	)rc��tt��D]7}|�tj�|d��||���8dS)Nr)�reversedrrzryrtrz�rAr�r}r:s    rr{z$XMLMenuBuilder.parse_default_app_dirFsR���-�(�(�	R�	R�A����r�w�|�|�A�~�>�>��&�Q�Q�Q�Q�	R�	Rrc�n�t||t��}|r|j�|��dSdSrD)r6r2r9rIr�s    rr|z"XMLMenuBuilder.parse_directory_dirJsB�� ���(�;�;���	/�� �'�'��.�.�.�.�.�	/�	/rc��tt��D]7}|�tj�|d��||���8dS)Nr)r�rr|ryrtrzr�s    rr}z*XMLMenuBuilder.parse_default_directory_dirOsT���-�(�(�	_�	_�A��$�$�R�W�\�\�!�5J�%K�%K�X�W]�^�^�^�^�	_�	_rc�&�|j�dd��dkr�tD]�}|�|d���d��}||kr�tD]}}||kr�	t
j�t
j�||����r7|�	t
j�||��||��n�~��dSt||t��}|r|�	|||��dSdS)Nr�r}r,ro)rrVrrryryrtr5rz�
merge_filer6r4)rAr�r�r�r}r:�rel_file�ps        rr�zXMLMenuBuilder.parse_merge_fileUs���<���F�D�)�)�X�5�5�$�
"�
"��#�+�+�A�r�2�2�8�8��=�=���x�'�'�,�"�"����6�6�$��7�>�>�"�'�,�,�q�(�*C�*C�D�D�"� �O�O�B�G�L�L��H�,E�,E�u�f�U�U�U�!�E�"��

"�
"�%�U�H�i�@�@�E��
6�����u�f�5�5�5�5�5�
6�
6rc��t||t��}|rrtj|��D]_}	|�d��r5|�tj�||��||���N#t$rY�ZwxYwdSdS)NrS)	r6r2ry�listdirrWr�rtrz�UnicodeDecodeError)rAr�r�r�r}�items      rr�zXMLMenuBuilder.parse_merge_dires��� ���(�;�;���	��
�5�)�)�
�
����}�}�W�-�-�R��������U�D�(A�(A�5�&�Q�Q�Q���)�����H�����	�	�
�
s�A
A;�;
B�Bc	�,�tj�tj�|����d}t	t
��D]<}|�tj�|d|dz��|||���=dS)Nrr�z-merged)ryrt�splitext�basenamer�rr�rz)rAr�r�r}r�r:s      rr�z'XMLMenuBuilder.parse_default_merge_dirsos����7�#�#�B�G�$4�$4�X�$>�$>�?�?��B���/�*�*�	j�	j�A�� � �����a��(�Y�:N�!O�!O�QV�X`�bh�i�i�i�i�	j�	jrc��||jvr|jrtd|���dS|j�|��	t	j|��}nB#t$r|jrtd|���YdS|jrtd|���YdSxYw|���}|�|||��dS)Nz Infinite MergeFile loop detectedrRrT)	rZrNrr�rXrY�IOErrorr_rg)rAr�r�r}r��roots      rr�zXMLMenuBuilder.merge_filets����t�)�)�)��z�
�"�#E�x�P�P�P�������x�(�(�(�	��;�x�(�(�D�D���	�	�	��z�
�"�#3�X�>�>�>����	��z�
�"�#;�X�F�F�F��������|�|�~�~������h��/�/�/�/�/s�A�!B�7Bc�H�|�||||��}|r||z
}dSdSrD)�merge_legacy_dir)rArrr�r}�ms      rr�zXMLMenuBuilder.parse_legacy_dir�s:���!�!�$���&�A�A���	��a�K�F�F�F�	�	rc	��t||t��}|�r#||jv�r|j�|��t	��}|j�|��|j�|��tj	�
|��|_d|_tj
|��D]�}	|dkr|j�|��n�tj	�tj	�||����rI|�|�tj	�||��|||������#t&$rY��wxYw|j�|g|d��|j�|gd��}|D]�}|j}	t1|	��dkrDt2�t2j|j��}
|j�|
��||jvr|	�d��|	|_��|SdSdS)NTz
.directoryFr�Legacy)r6r2r[r�r*r6rIr9ryrtr�rr3r�r8r3rzrJr�r�r]�add_menu_entries�get_menu_entriesrrrr�r�r�rir>)rArrr�r}r�r�r�rm�
categories�rs           rr�zXMLMenuBuilder.merge_legacy_dir�s/����h��9�9���"	�D�� 4�4�4�� �$�$�T�*�*�*����A�
�I���T�"�"�"�
�O�"�"�4�(�(�(��W�%�%�d�+�+�A�F��A�J��
�4�(�(�
�
����|�+�+��
�,�,�T�2�2�2�2�����r�w�|�|�D�$�'?�'?�@�@�����T�%:�%:��G�L�L��t�4�4�"�$�"�	&�&������*�����H�����
�J�'�'�����=�=�=��*�5�5�t�f�e�D�D�K�(�
6�
6�	�&�1�
��z�?�?�a�'�'��)�)�$�*;�Y�=T�U�U�A��G�N�N�1�%�%�%��v�~�-�-��%�%�h�/�/�/�+5�I�(���H�E"	�"	�4�4s�B'E*�*
E7�6E7c�Z�	tjgd�tjd���}|���d���}n#t
$rYdSwxYw	|d�d��D]}|�|d||���dS#t$rYdSwxYw)N)z
kde-configz--path�appsT)�stdout�universal_newlinesr�:�kde)	�
subprocess�Popen�PIPE�communicate�
splitlines�OSErrorrqr��
IndexError)rAr�r}�proc�outputrs      rr�z$XMLMenuBuilder.parse_kde_legacy_dirs�s���		��#�0�0�0�!��#'����D�
�%�%�'�'��*�5�5�7�7�F�F���	�	�	��F�F�	����	��q�	����,�,�
E�
E���%�%�d�E�8�V�D�D�D�D�
E�
E���	�	�	��D�D�	���s$�AA�
A �A �$6B�
B*�)B*c��|j�d|_|j�d|_|jr|js�|jr
|j|_n�|jr1|jdkr|jj|_nht��|_nT|jdkr#|jj|_|jj|_n&t��|_t��|_|jdkr2|jj|jz|_|jj|jz|_t|j	��|_	t|j��|_t|j��|_|j
D]}|�|���|j	���|j���|j���|j	D]�}|jD]�}tj�tj�||����rtt#||��}|js||_�^|���t"jkr3|j���t"jkr||j_��|jrdS��dS)NFr)r#r=r:r7r1r2r6r9rJr8r?rarwryrtr5rzr�r-rrrr)rArerPrMrLrms      rrazXMLMenuBuilder.post_parse�sj���<�� �D�L���'�#(�D� ��{�	2�$�"4�	2��!�

2�"�0������
2��:��>�>�)-��)B�D�&�&�)/���D�&�&��:��>�>�"&�+�";�D�K�)-��)B�D�&�&�"(�(�(�D�K�)/���D�&��:��>�>��;�.���=�D�L�!%��!:�T�=O�!O�D��#�4�#3�4�4���$�T�%7�8�8����t�|�,�,����}�	%�	%�G��O�O�G�$�$�$�$�	
�� � �"�"�"���"�"�$�$�$���������)�
	�
	�I��)�
@�
@���7�>�>�"�'�,�,�s�I�">�">�?�?�@� )�)�S� 9� 9�I��>�@�)2����"�*�*�,�,�	�0E�E�E��>�1�1�3�3�y�7J�J�J�6?�D�N�3���~�
����
�
	�
	rc��|jD]}|�|���|jdur�|j�|j��g}|jD]5}|�|j�|j��d��}�6|D]O}|j	durB|j
�|��d|_	d|_|j
�|���NdSdS)NFrpT)r?rbr=r]r�r6r>r�r�r�rrIr�r;�rArerPr�rNrms      rrbz*XMLMenuBuilder.generate_not_only_allocateds����}�	6�	6�G��,�,�W�5�5�5�5���5�(�(��J�'�'���5�5�5��K��
�
W�
W��"�j�j���)D�)D�T�\�)R�)R�TU�V�V���(�
7�
7�	��=�D�(�(��%�,�,�T�2�2�2�$)�I�M�*.�I�'��$�+�+�I�6�6�6��)�(�
7�
7rc��|jD]}|�|���|jdur�|j�|j��g}|jD]5}|�|j�|j��d��}�6|D]A}|j	dur4|j
�|��|j�|���@dSdS)NTr�)
r?rcr=r]r�r6r>r�r�r�rrIr;r�s      rrcz&XMLMenuBuilder.generate_only_allocateds����}�	2�	2�G��(�(��1�1�1�1���4�'�'��J�'�'���5�5�5��K��
�
W�
W��"�j�j���)D�)D�T�\�)R�)R�TU�V�V���(�
7�
7�	��=�D�(�(��%�,�,�T�2�2�2��$�+�+�I�6�6�6��(�'�

7�
7rc��|jD]}|�|���|jD�]"}|�|j��}|�r|�|j��}|j�d��}d}t|��dkr�|s|}|�|d��}|sJt��}|d|_	t|��dkrd|_
|�|��|}|�d��t|��dk��||z
}|j
j�|����$dS)NrorrpT)r?r`r<rsr�r�rqrrr*rr3rJrxr2r�)	rArerPrO�move_from_menu�move_to_menur��	oldparentr�s	         rr`zXMLMenuBuilder.handle_moves$sV���}�	'�	'�G����g�&�&�&�&��J�	F�	F�D�!�\�\�$�(�3�3�N��
F�#�|�|�D�H�5�5������s�+�+�� �	��%�j�j�1�n�n�$�)�$(�	�'�/�/��a��9�9�G�"�6�"&�&�&��',�Q�x����u�:�:��>�>�/3�G�,�!�,�,�W�5�5�5� '�I��I�I�a�L�L�L��%�j�j�1�n�n��>�)���%�.�5�5�n�E�E�E��-	F�	Frr�rD)r�r�r�rBrYr^rgr�r�r~r�r�rzr{r|r}r�r�r�r�r�r�r�rarbrcr`r�rrrLrLbs�����������4�4�4�4�l���
2=�2=�2=�2=�h � � �D	�	�	�	 �	 �	 ���� � � �H)�)�)�
R�R�R�/�/�/�
_�_�_�6�6�6� ���j�j�j�
0�0�0�4���
$�$�$�L���"6�6�6�r7�7�7�"7�7�7� F�F�F�F�FrrLc�.�eZdZdZd�Zd
d�Zd�Zdd�Zd	S)r\zClass to cache Desktop Entriesc�6�i|_g|jd<i|_dS)N�legacy)�cacheEntriesr]r@s rrBzMenuEntryCache.__init__Cs"�����&(���(�#���
�
�
rr,Fc�f�|D]-}||jvr"g|j|<|�|d||���.dS)Nr,)r��_MenuEntryCache__addFiles)rAr9rr�rs     rr�zMenuEntryCache.add_menu_entriesHsO���	:�	:�D��4�,�,�,�*,��!�$�'�����b�&�&�9�9�9��	:�	:rc��tjtj�||����D�]}|�d��r�	ttj�||��||��}n#t$rY�UwxYw|j|�|��|r |jd�|����tj�	tj�|||����r8|s6|�
|tj�||��||����dS)Nz.desktopr�)ryr�rtrzrWr�rr�rIr3r�)rAr�subdirrr�r�rms       r�
__addFileszMenuEntryCache.__addFilesNs4���J�r�w�|�|�D�&�9�9�:�:�	R�	R�D��}�}�Z�(�(�

R�� )�"�'�,�,�v�t�*D�*D�d�F� S� S�I�I��#�����H������!�$�'�.�.�y�9�9�9��B��%�h�/�6�6�y�A�A�A������r�w�|�|�D�&�$�?�?�@�@�
R��
R�����b�g�l�l�6�4�&@�&@�&�&�Q�Q�Q��	R�	Rs�/A<�<
B	�B	Tc�p�g}t��}|dd�}|r|�d��d�|��}	|j|S#t$rYnwxYw|D]�}|j|D]�}	|j|vr0|�|j��|�|��nh|���tj
krF|�|��}	||	}
|
���tjkr||
_
��#t$rY��wxYw��||j|<|S)Nr�r,)r�rIrzr]�KeyErrorr�rir�rr�r�indexrrr�)rAr9r��entries�ids�appdirs�keyrrm�idxrfs           rr�zMenuEntryCache.get_menu_entries\se�����e�e���q�q�q�'���	%��N�N�8�$�$�$��g�g�g����	��:�c�?�"���	�	�	��D�	�����
	�
	�D�!�.�t�4�
�
�	�� �.�c�9�9����	� 7�8�8�8����y�1�1�1�1�"�*�*�,�,�	�0E�E�E�%�m�m�I�6�6�� '���� �=�=�?�?�i�.A�A�A�-6�E�N���)�����H�����
�"��
�3���s%�A�
A"�!A"�9B!D�
D(�'D(N)r,F)T)r�r�r�r�rBr�r�r�r�rrr\r\Asc������$�$����
:�:�:�:�R�R�R������rr\Fc�F�t|���|��S)zYHelper function.
    Equivalent to calling xdg.Menu.XMLMenuBuilder().parse(filename)
    )rLrY)r�rNs  rrYrY{s ���%� � �&�&�x�0�0�0rr.)1r�ryrr�rr�xml.etree.cElementTreerX�cElementTree�ImportError�xml.etree.ElementTree�ElementTree�xdg.BaseDirectoryrr�xdg.DesktopEntryr�xdg.Exceptionsr�xdg.utilr�
xdg.Localer��
xdg.Configrr"r�r�r�r�r�r�r*r�r:r�r�r�r�r2r4r6r<rArJ�objectrLr\rYr�rr�<module>r�s;����&
�	�	�	�
�
�
�
�����
�
�
�
�
�
�
�
�*�*�*�*�*�*�*�*�*�*�*���*�*�*�)�)�)�)�)�)�)�)�)�)�)�*����=�<�<�<�<�<�<�<�)�)�)�)�)�)�'�'�'�'�'�'���������������1�1�1������
�
�	������
��l)�l)�l)�l)�l)�l)�l)�l)�^	(�(�(�(�(�(�(�(���������0,�,�,�,�,�,�,�,�^_"�_"�_"�_"�_"�_"�_"�_"�D�������������������)�������#�#�#����\F�\F�\F�\F�\F�V�\F�\F�\F�~7�7�7�7�7�7�7�7�t1�1�1�1�1�1s�	"�3�3

Youez - 2016 - github.com/yon3zu
LinuXploit