__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
�

�u�c�����SrSSKrSSKrSSKrSSKrSSKrSSKJs Jr SSKJ
r
Jr SSKJr SSKJr SSKJr SSKrSSKrSrSrS	rS
rSrSrS
rSr"SS5r "SS5r!"SS5r""SS5r#"SS5r$"SS5r%"SS5r&Sur'r(Sr)Sr*S r+S!r,"S"S#\-5r."S$S%5r/S'S&jr0g!\	a SSK
Js Jr N�f=f)(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�&�[RS:�aV[R"U5n[RS:�a[R"U5$[R
"U5$[R"U[R"5S9$)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'se��
���6�!�����%�����v�%��<�<��%�%��#�#�D�)�)��x�x�4�S�X�X�Z�0�0�c��[(d&[U[5(aURS5n[R
"U5$)z_Wrapper 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"2s2��

�C�Z��7�+�+�
�H�H�W����>�>�!��r�Deleted�	NoDisplay�Hidden�Empty�	NotShowIn�NoExecc��\rSrSrSrSrSrSrSrSr	Sr
S	rSS
jrSSjr
SrSS
jrSrSrSrSrSrSrSrSrg)�Menu�DzVMenu containing sub menus under menu.Entries

Contains both Menu and MenuEntry items.
c�*�SUlSUl/UlSUlSUlSUlSUlSUlSUlSUl	/Ul
SUlSUl/Ul
/UlSUl/Ul/UlSUl/Ul/Ulg)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__�
Menu.__init__Is�����	������������
���
������
���	�������!��������������������
�#�����
���
rc��UR$�N�rrAs r�__str__�Menu.__str__e����y�y�rc��URHnURRU5 M  URHnURRU5 M  URHnURRU5 M  URbURUlUR
bUR
UlUR(aURUlUR(aURUlURHnURRU5 M  URHnURRU5 M  URHnURU5 M U$rF)r7�appendr:r9r#r>r;r8r?r=r@�
addSubmenu)rB�other�dir�	directory�rule�move�submenus       r�__add__�Menu.__add__hs-���=�=�C��L�L����$�!��&�&�C����%�%�c�*�'��*�*�I����#�#�I�.�+��=�=�$� �=�=�D�L�� � �,�#(�#8�#8�D� ��<�<��,�,�D�K����!&�!4�!4�D���K�K�D��J�J���d�#� ��K�K�D��J�J���d�#� ��~�~�G��O�O�G�$�&��rc�h�[R"UR5UR55$rF)r�strcoll�getName�rBrNs  r�__cmp__�Menu.__cmp__�s���~�~�d�l�l�n�e�m�m�o�>�>rc�4�[UR55$�z&Key function for locale-aware sorting.)r"rXrAs r�_key�	Menu._key�s�������'�'rc�j�UR5nUR5U:$![a Nf=frF�r^�AttributeErrorrYs  r�__lt__�Menu.__lt__��9��	��J�J�L�E��y�y�{�U�"�"���	��	���%�
2�2c��UR[U5:H$![a UR[U5:Hs$f=frF)rr�	NameError�strrYs  r�__eq__�Menu.__eq__�s<��	+��9�9����.�.���	+��9�9��E�
�*�*�	+�s��"?�?c#�v# �URH%nU(aUv� MURSLdM!Uv� M' g7f)z4Interator for a list of Entries visible to the user.TN)r/r5)rB�show_hidden�entrys   r�
getEntries�Menu.getEntries�s,����\�\�E�������t�#���	"�s�*9�	9c��URHnURU:XdMUs $ U(a%URHnURX5 M gg)z4Searches for a MenuEntry with a given DesktopFileID.N)r<�
DesktopFileIDr@�getMenuEntry)rB�
desktopfileid�deep�	menuentryrSs     rrs�Menu.getMenuEntry�sL���)�)�I��&�&�-�7� � �*���=�=���$�$�]�9�)�rc���URSS5nURH?nURUS:XdM[U5S:�aUR	US5s $Us $ g)z&Searches for a Menu with a given path.�/�rN)�splitr@r�len�getMenu)rB�path�arrayrSs    rr}�Menu.getMenu�sS���
�
�3��"���}�}�G��|�|�u�Q�x�'��u�:��>�"�?�?�5��8�4�4�"�N�%rc�x�Un/nU(aURUR5 OURUR55 URS:�a
URnOOMbUR5 SnU(dUR
S5 UH"n[RRXV5nM$ U$)z/Returns this menu's path in the menu structure.rr-)
rLrrXr2r3�reverse�pop�osr~�join)rB�org�toplevel�parent�namesr~rs       r�getPath�Menu.getPath�s������������V�[�[�)����V�^�^�-�.��|�|�a��������	�
�
������I�I�a�L��D��7�7�<�<��+�D���rc��URRR5$![a URs$f=f)z"Returns the menu's localised name.)r.rrXrbrrAs rrX�Menu.getName�s9��	��>�>�.�.�6�6�8�8���	��9�9��	�s�#&�?�?c�l�URRR5$![a gf=f)z Returns the menu's generic name.r-)r.r�getGenericNamerbrAs rr��Menu.getGenericName�s2��	��>�>�.�.�=�=�?�?���	��	���#&�
3�3c�l�URRR5$![a gf=f)z Returns the menu's comment text.r-)r.r�
getCommentrbrAs rr��Menu.getComment�s2��	��>�>�.�.�9�9�;�;���	��	�r�c�l�URRR5$![a gf=f)z0Returns the menu's icon, filename or simple namer-)r.r�getIconrbrAs rr��Menu.getIcon�s2��	��>�>�.�.�6�6�8�8���	��	�r�c���/UlSUlURHnUR5 M [	5n[	5nUR
RHAnUSS:XaURUS5 M"USS:XdM-URUS5 MC UR
RGHFnUSS:Xaj[U5n[UR5S:�a)[URS[5(aSUlURRU5 MwUSS:Xa:URUS5nU(aURRU5 M�M�USS:XakURUS5nU(aMUR
R(aUR!U5 GM
URRU5 GM+GM.USS:XdGM:USS	:Xd	USS
:Xa]UR"R5 UR"H0nUR$U;dMURRU5 M2 GM�USS:XdUSS
:XdGM�URR5 URH^nUR&U;dMUR
R(aUR!U5 MCURRU5 M` GMI URGHnSUlU=RS-
sl[U[(5(a�UR*SLa"[,UlU=RS-slMf[UR.[05(a�UR.R2R55(a"[6UlU=RS-slM�UR.R2R95(a#[:UlU=RS-slGMGMGM"[U[05(Ga�UR2R55(a#[6UlU=RS-slGMzUR2R95(a#[:UlU=RS-slGM�UR2R=5(aBUR2R?5(d#[@UlU=RS-slGM[BRDRF(a�UR2RI5/:wa6[BRDRFUR2RI5;d6[BRDRFUR2RK5;a#[LUlU=RS-slGM�GM�GM�[U[5(dGMU=RS-slGM [UR5S:�a6[URS[5(aSURSl[UR5S:�a6[URS[5(aSURSlURSSH�n[U[(5(dMUR
RN(aM7URS:XdMI[PUlU=RS-slURRSLdMzURRUU5 M� g)
Nrr1rz�Menuname�	Separator���F�Merge�files�all�menusT)+r/r6r@�sort�setr;�order�addr�r|rr5rLrsr}�inline�merge_inliner<rrrr*r#�DELETEDr.�	MenuEntryr�getNoDisplay�
NO_DISPLAY�	getHidden�HIDDEN�
getTryExec�findTryExec�NO_EXEC�xdg�Config�
windowmanager�
getOnlyShowIn�getNotShowIn�NOT_SHOW_IN�
show_empty�EMPTYr4�remove)rBrS�	_submenus�_entriesr��	separatorrvrns        rr��	Menu.sort�sP���������}�}�G��L�L�N�%��E�	��5���[�[�&�&�E��Q�x�:�%����U�1�X�&��q��Z�'��
�
�e�A�h�'�	'��[�[�&�&�E��Q�x�;�&�%�d�O�	��t�|�|�$�q�(�Z����R�8H�)�-T�-T�%*�I�N����#�#�I�.��q��Z�'� �-�-�e�A�h�7�	���L�L�'�'�	�2���q��Z�'��,�,�u�Q�x�0����~�~�,�,��)�)�'�2����+�+�G�4�	�
�q��W�$���8�w�&�%��(�e�*;��$�$�)�)�+�%)�%5�%5�	�$�2�2�(�B� �L�L�/�/�	�:�&6��1�X��(�E�!�H��,=��M�M�&�&�(�#'�=�=��"�<�<�y�8�&�~�~�4�4� $� 1� 1�'� :� $��� 3� 3�G� <�$1�3'�B�\�\�E��E�J��L�L�A��L��%��&�&��=�=�D�(�!(�E�J��L�L�A�%�L������;�;����3�3�@�@�B�B�%/��
�����)�����5�5�?�?�A�A�%+��
�����)���B�	<��E�9�-�-��%�%�2�2�4�4�!+�E�J��L�L�A�%�L�L��'�'�1�1�3�3�!'�E�J��L�L�A�%�L�L��'�'�2�2�4�4�U�=O�=O�=[�=[�=]�=]�!(�E�J��L�L�A�%�L�L��Z�Z�-�-��*�*�8�8�:�b�@��J�J�4�4�E�<N�<N�<\�<\�<^�^��
�
�0�0�E�4F�4F�4S�4S�4U�U�%0��
�����)���V�.��E�9�-�-�����!���E"�H�t�|�|��q� ��$�,�,�q�/�9�5�5�',����Q��$��t�|�|��q� ��$�,�,�r�*�I�6�6�(-����R� �%��\�\�!�_�E��%��&�&�u�|�|�/F�/F�/F�5�=�=�\]�K]�"��
�����!���>�>�T�)��L�L�'�'��.�%rc��URHnX!:XdM
X!-
n g URRU5 XlURS-Ulg)Nrz)r@rLr3r2)rB�newmenurSs   rrM�Menu.addSubmenuTsI���}�}�G��!��"���%�

�M�M� � ��)�!�N� �J�J��N�G�Mrc��[UR5S:Xa�URR(a�URSnURRSUR
5SS9 URRSUR5SS9 URRSUR5SS9 URRU5 g[UR5URR::dURRS:Xa�URR(aR[UR
5UR5UR55nURRU5 URHnURRU5 M  gURRU5 g)	zmAppends a submenu's entries to this menu
See the <Menuname> section of the spec about the "inline" attribute
rzrrT)r�GenericName�CommentN)
r|r/r;�inline_aliasrr�rXr�r�rL�inline_limit�
inline_header�Header)rBrSrv�headerrns     rr��Menu.merge_inline_sS���w����1�$����)D�)D�����*�I��"�"�&�&�v�w���/@��&�N��"�"�&�&�}�g�6L�6L�6N�W[�&�\��"�"�&�&�y�'�2D�2D�2F�t�&�T��L�L���	�*�
����
!�W�^�^�%@�%@�
@�G�N�N�D_�D_�cd�Dd��~�~�+�+����� 1�7�3I�3I�3K�W�M_�M_�Ma�b�����#�#�F�+� �������#�#�E�*�)�
�L�L����(r)r7r8r#r2r9r.r:r0r/r1r;r<r=rr4r>r3r?r5r@r6N�F)FF)�__name__�
__module__�__qualname__�__firstlineno__�__doc__rCrHrTrZr^rcrjrorsr}r�rXr�r�r�r�rMr��__static_attributes__�rrr*r*Dsn����8��D?�(�#�+���:�#��*����b/�H�+�)rr*c�(�\rSrSrSrSSjrSrSrg)�MoveiszA move operationc��XlX lgrF)�Old�New)rB�old�news   rrC�
Move.__init__us�����rc�B�[URUR5$rF)�cmpr�rYs  rrZ�Move.__cmp__ys���4�8�8�U�Y�Y�'�'r)r�r�N�r-r-)r�r�r�r�r�rCrZr�r�rrr�r�ss����(rr�c�Z�\rSrSrSrSSjr\S5r\RS5rSr	g)	r;i}zMenu Layout classc�h�XlX lX0lX@lXPl/UlSS/SS//Ulg)Nr�r�r�)r�r�r�r�r��_order�_default_order)rBr�r�r�r�r�s      rrC�Layout.__init__s?��$����(��*��(�����
�g��
�g��
��rc�T�UR(aUR$UR$rF)r�r�rAs rr��Layout.order�s��"�k�k�t�{�{�B�t�/B�/B�Brc��XlgrF)r�)rBr�s  rr�r��s���r)r�r�r�r�r�r�r�N)FFr
TF)
r�r�r�r�r�rC�propertyr��setterr�r�rrr;r;}s>���DE�27�
��C��C��\�\���rr;c�D�\rSrSrSrSurr\S5rSr	Sr
SrSrg	)
�Rulei�zInclude / Exclude Rules Class�rrzc
��[R"[R"[R"U5[R"5/[R
"[R"S[R"5S9S[R"5S9/S9SSS9n[R"U5 [X5nU$)	Nrvrrr��value�attrr��left�ops�comparatorsrzr)�body�lineno�
col_offset)
r�
Expression�Compare�Str�Eq�	Attributerr�fix_missing_locationsr�)�cls�type�filename�treerQs     r�fromFilename�Rule.fromFilename�s����~�~�����W�W�X�&��V�V�X�J� �]�]��(�(�k�s�x�x�z�B�(����
������
��	�!�!�$�'��D����rc�T�XlX l[URSS5Ulg)Nz<compiled-menu-rule>�eval)�Type�
expression�compile�code)rBr�rs   rrC�
Rule.__init__�s!���	�$���D�O�O�-C�V�L��	rc�B�[R"UR5$rF)r�dumprrAs rrH�Rule.__str__�s���x�x����(�(rc��UHynUS:Xa URSLdURSLaM)[UR5(dMEUR[
RLaSUlSUlMrSUlM{ U$)N�TF)�MatchedInclude�	Allocatedrrrr��TYPE_INCLUDE�Add)rB�menuentries�runrvs    r�apply�
Rule.apply�sn��$�I��a�x�Y�5�5��=�&�0�0�D�8���D�I�I����9�9�� 1� 1�1�$(�I�M�/3�I�,�$)�I�M�%��r)rrrN)
r�r�r�r�r�r�TYPE_EXCLUDE�classmethodr�rCrHrr�r�rrr�r��s1��'�!%��L�,�����"M�)�rr�c�t�\rSrSrSrSrSrSrSSjrSr	Sr
S	rSS
jrSr
SrS
rSrSrSrSrSrg)r�i�z(Wrapper for 'Menu Style' Desktop Entries�User�System�Bothc��[[RRX!55UlUR	XU5 SUlSUl/UlSUlSUl	SUl
URR5Ulg�NTF)
rr�r~r��
setAttributesr5�Original�Parentsr
rr�
getCategories�
Categories�rBr�rO�prefixs    rrC�MenuEntry.__init__�su��(������c�)D�E������8�&�1���	���
����������#����+�+�9�9�;��rc�p�URR(aURR5 gg)z&Save any changes to the desktop entry.N)r�tainted�writerAs r�save�MenuEntry.save�s(�����$�$����#�#�%�%rc�b�URRRURS5$)z7Return the directory containing the desktop entry file.r-)rr��replacer1rAs r�getDir�MenuEntry.getDir�s%��� � �)�)�1�1�$�-�-��D�Drc��[RR(dVUR(aUR$[
SURR;aUR$UR$UR$)z.Return the type of MenuEntry, System/User/Bothr)
r�r��	root_moder�	TYPE_BOTHrrr��	TYPE_USER�TYPE_SYSTEMrAs r�getType�MenuEntry.getType�sY���z�z�#�#��}�}��~�~�%��q�!�T�%6�%6�%?�%?�?��~�~�%��'�'�'��>�>�!rc��XlX0l[RR	X15RSS5Ul[RRURR5(dUR5 gg)Nry�-)r1�Prefixr�r~r�r*rr�isabsrr��_MenuEntry__setFilenamer!s    rr�MenuEntry.setAttributes�s^�� �
����W�W�\�\�&�;�C�C�C��M����w�w�}�}�T�.�.�7�7�8�8���� �9rc���UR5UR:XaE[URUR	5UR
5UlUR5 ggrF)r2r1r�r1r+r6rr8rAs r�updateAttributes�MenuEntry.updateAttributes�sE���<�<�>�T�-�-�-�%�d�m�m�T�[�[�]�D�K�K�P�D�M���� �.rc��[RR(d
[SnO	[SnURR5S:Xa![RRUS5nO [RRUS5n[RRX R5URl
g)Nrrz�Application�applications�desktop-directories)r�r�r.rrr2r�r~r�r1r�)rBr~�dir_s   r�
__setFilename�MenuEntry.__setFilenames����z�z�#�#� ��#�D� ��#�D����$�$�&�-�7��7�7�<�<��n�5�D��7�7�<�<��&;�<�D�%'�W�W�\�\�$�
�
�%F����"rc��[R"URR5URR55$rF)rrWrrXrYs  rrZ�MenuEntry.__cmp__s1���~�~�d�/�/�7�7�9�5�;M�;M�;U�;U�;W�X�Xrc�H�[URR55$r])r"rrXrAs rr^�MenuEntry._keys����)�)�1�1�3�4�4rc�j�UR5nUR5U:$![a Nf=frFrarYs  rrc�MenuEntry.__lt__rerfc�8�UR[U5:Xaggr)rrrirYs  rrj�MenuEntry.__eq__s������U��+��rc��UR$rF)rrrAs r�__repr__�MenuEntry.__repr__"s���!�!�!r)rr
r rrrr1rrrr6r5Nr�)r�r�r�r�r�r0r1r/rCr'r+r2rr;r8rZr^rcrjrMr�r�rrr�r��sS��.��I��K��I�<�(&�
E�
"�!�!�
G�Y�5�#��"rr�c��\rSrSrSrSrSrg)r�i&z!Just a dummy class for Separatorsc��XlSUlg)NT�r3r5)rBr�s  rrC�Separator.__init__(s������	rrQN)r�r�r�r�r�rCr�r�rrr�r�&s
��'�rr�c�$�\rSrSrSrSrSrSrg)r�i-zClass for Inline Headersc�(�XlX lX0lgrF)rr�r�)rBr�generic_name�comments    rrC�Header.__init__/s���	�'���rc��UR$rFrGrAs rrH�Header.__str__4rJr)r�r�rN)r�r�r�r�r�rCrHr�r�rrr�r�-s����
rr�r�c��[RRU5n[RRU5(d[RR	X05n[RRU5n[RR
U5(dgU[:Xa&[RRU5(aU$U[:Xa&[RRU5(aU$g�NF)r�r~�dirnamer7r��abspath�exists�TYPE_DIR�isdir�	TYPE_FILE�isfile)r�r�r�r~s    r�_check_file_pathrc;s���
�7�7�?�?�8�$�D�
�7�7�=�=���������T�)���G�G�O�O�E�"�E�
�7�7�>�>�%� � ���x��B�G�G�M�M�%�0�0����y��R�W�W�^�^�E�2�2���rc�"�[[5n[RRSLaURS5 UHLn[RRUSU5n[RRU5(dMJUs $ g)NTrr�)
�listrr�r�r.r�r�r~r�rb)r��dirs�d�menunames    r�_get_menu_file_pathriIsa���� �D�
�z�z���t�#������
���7�7�<�<��7�H�5��
�7�7�>�>�(�#�#��O�rc�V�[U[5(aU$UR5S:H$)N�true)r�bool�lower)r�s r�_to_boolrnSs%���%�������;�;�=�F�"�"rc��0nUR5 UVs/sHo"U;dM
URX"5PM nnUR5 U$s snfrF)r��
setdefault)�_list�_set�es   r�_dedupertZsH��
�D�	�M�M�O�,1�C�E�q�d�]�
"�T�_�_�Q�
"�E�E�C�	�M�M�O��L��
Ds
�	A
�A
c��\rSrSrSSjrSSjrSrSSjrSrSr	S	r
S
rSrSr
S
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrg)�XMLMenuBuilderibc��XlgrF)�debug)rBrxs  rrC�XMLMenuBuilder.__init__ds���
rNc�`�U(a/[RRU5(d[U5nU(dc[RRSS5S-n[U5nU(d.[RRSS5S-n[U5nU(d[
SSW-5eURS5(d[
SU5e[R"U5n[5Ul[5Ul[5UlURUR!5U5nX4lXlUR'U5 UR)U5 UR+U5 UR-U5 UR/5 U$! [
S	U5e=f)
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)r�r~r7ri�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�)rBr��	candidater��menus     rr��XMLMenuBuilder.parsegsa���B�G�G�M�M�(�3�3�*�8�4�H���
�
���'8�"�=�@S�S�I�*�9�5�H���J�J�N�N�+<�b�A�+=�>�	�.�y�9����/�1D�y�1P�Q�Q�� � ��)�)��1�8�<�<�	C��;�;�x�(�D�
!�U���"�u���#�%��
����t�|�|�~�x�8���	� �
����$�������	
�(�(��.��$�$�T�*�	
�	�	�����-	C��7��B�B�s�F�F-c�>�[5nURXU5 U$rF)r*�
parse_node)rB�noder�r�s    rr��XMLMenuBuilder.parse_menu�s���v�������-��rc� �[U5nUGH�nURURpvU(aUR5OSnUS:Xa$UR	XR5nURU5 M^US:XaU(aUR
XrU5 MUS:XaURX#5 M�US:XaU(aURXrU5 M�US:XaURX#5 M�US:XaU(aXsl
M�US:Xa%U(aURRU5 GMUS:Xa
S	Ul
GM"US
:Xa
SUl
GM2US:Xa
S	UlGMBUS
:Xa
SUlGMRUS:XdUS:Xa-URRUR!U55 GM�US:XaUUR"R%SS5S:XaUR'SXRU5 GM�U(aUR'XuX#5 GM�GM�US:XaU(aUR)XuX#5 GMUS:XaUR+XRU5 GM#US:Xa-UR,RUR/U55 GMVUS:Xa"US:�aUR1U5UlGM{GM~US:Xa"US:�aUR1U5UlGM�GM�US:Xa6U(a/UR7XuR"R%SS5X#5 GM�US:XdGM�UR9X#5 GM� g)Nr*�AppDir�DefaultAppDirs�DirectoryDir�DefaultDirectoryDirsrr.r>T�NotOnlyUnallocatedFr#�
NotDeleted�Include�Exclude�	MergeFiler�r�r|�MergeDir�DefaultMergeDirsr�r;rzr8�	LegacyDirr"r-�
KDELegacyDirs)r|�tag�text�stripr�rM�
parse_app_dir�parse_default_app_dir�parse_directory_dir�parse_default_directory_dirrr9rLr>r#r?�
parse_rule�attribr��parse_merge_file�parse_merge_dir�parse_default_merge_dirsr=�
parse_move�parse_layoutr;r8�parse_legacy_dir�parse_kde_legacy_dirs)	rBr�r�r��num_children�childr�r�r�s	         rr��XMLMenuBuilder.parse_node�s���4�y���E��	�	�5�:�:��#'�4�:�:�<�T�D��f�}����u�7���!�!�$�'����T��"�"�4�6�:��(�(��*�*�8�<���&�4��(�(���@��.�.��0�0��B����4�"����#���"�"�)�)�$�/��)�)�)-��&��,�,�).��&��	�!�!%�����$�!&����	�!�S�I�%5����#�#�D�O�O�E�$:�;���#��<�<�#�#�F�D�1�X�=��)�)�*=�u�PV�W���)�)�$�x�H���
�"�t��$�$�T�(�C��*�*��-�-�e�v�F�������#�#�D�O�O�E�$:�;�����!�#�$(�$5�$5�e�$<�F�M�$���'��!�#�+/�+<�+<�U�+C�F�(�$���#���%�%�d�L�L�,<�,<�X�r�,J�H�]���'��*�*�8�<�arc��[[URRSS55[URRSS55[	URRSS55[URRSS55[URRSS55S	9n/nUGHnUR
URpeU(aUR5OSnUS
:Xa�U(a�URS
U[URRSS55[URRSS55[	URRSS55[URRSS55[URRSS55/5 GMUS:XaURS/5 GM&US:XaU(aURSU/5 GMIUS
:XdGMRURS
URRSS5/5 GM� X2l	U$)Nr�Fr�r�r
r�Tr�)r�r�r�r�r�r�r�r1r�r�r�)
r;rnr�r��intr�r�r�rLr�)rBr��layoutr�r�r�r�s       rr��XMLMenuBuilder.parse_layout�s�����������e� D�E��D�K�K�O�O�H�e�<�=��T�[�[�_�_�^�Q�?�@�"�4�;�;�?�?�?�D�#I�J�!�$�+�+�/�/�.�%�"H�I�
�����E��	�	�5�:�:��#'�4�:�:�<�T�D��j� �T�������U�\�\�-�-�l�E�B�C��U�\�\�-�-�h��>�?�����(�(���;�<��U�\�\�-�-�o�t�D�E��U�\�\�-�-�n�e�D�E�����#����k�]�+��
�"�t����j�$�/�0���������L�L�$�$�V�U�3���%�,���
rc���Sup#UHWnURURpeU(aUR5OSnUS:XaU(aUnMDUS:XdMLU(dMUUnMY [X#5$)Nr�r�r�)r�r�r�r�)rBr�r�r�r�r�r�s       rr��XMLMenuBuilder.parse_move�s[������E��	�	�5�:�:��#'�4�:�:�<�T�D��e�|�������$�$���
��C�~�rc�T�URS:Xa[RO[Rn[R
"SSS9nUR
U[R"55nU(aXClO[S5Ul[R"U5 [X#5$)Nr�rzr)r�r��False)r�r�rrrr��
parse_bool_op�Orr�rr�)rBr�r�r��exprs     rr��XMLMenuBuilder.parse_rulesu��$(�H�H�	�$9�t� � �t�?P�?P���~�~�Q�1�5���!�!�$�����1����I�"�7�+�D�I��!�!�$�'��D��rc���/nUH.nURU5nU(dMURU5 M0 [U5nUS:�a[R"X#5$US:XaUS$g)Nrzr)�parse_rule_noderLr|r�BoolOp)rBr��operator�valuesr�rQ�
num_valuess       rr��XMLMenuBuilder.parse_bool_opsg�����E��'�'��.�D��t��
�
�d�#����[�
���>��:�:�h�/�/�
�1�_��!�9��rc��URnUS:Xa%URU[R"55$US:Xa%URU[R"55$US:XaXURU[R"55nU(a*[R
"[R"5U5$S$US:Xa[S5$US:Xa�URn[R"[R"U5[R"5/[R"[R"S[R"5S9S	[R"5S
9/S9$US:Xa�URn[R"[R"U5[R"5/[R"[R"S[R"5S9S
[R"5S
9/S9$g)Nr��And�Not�All�True�Categoryrvrr r�r�r1rr)r�r�rr�r��UnaryOpr�rr�r�r��Inr�rrr�)rBr�r�r��categoryr�s      rr��XMLMenuBuilder.parse_rule_nodesu���h�h���$�;��%�%�d�C�F�F�H�5�5�
�E�\��%�%�d�C�G�G�I�6�6�
�E�\��%�%�d�C�F�F�H�5�D�37�3�;�;�s�w�w�y�$�/�A�T�A�
�E�\��f�%�%�
�J�
��y�y�H��;�;��W�W�X�&��V�V�X�J� �]�]��(�(�k�s�x�x�z�B�%����
����
��J�
��y�y�H��;�;��W�W�X�&��V�V�X�J� �]�]��(�(�k�s�x�x�z�B�(����
����
�rc�j�[X[5nU(aURRU5 ggrF)rcr_r7rL�rBr�r�r�s    rr��XMLMenuBuilder.parse_app_dirAs(�� ��(�;����N�N�!�!�%�(�rc��[[5H3nUR[RRUS5X5 M5 g)Nr?)�reversedrr�r�r~r��rBr�r�rgs    rr��$XMLMenuBuilder.parse_default_app_dirFs0���-�(�A����r�w�w�|�|�A�~�>��Q�)rc�j�[X[5nU(aURRU5 ggrF)rcr_r:rLr�s    rr��"XMLMenuBuilder.parse_directory_dirJs*�� ��(�;���� � �'�'��.�rc��[[5H3nUR[RRUS5X5 M5 g)Nr@)r�rr�r�r~r�r�s    rr��*XMLMenuBuilder.parse_default_directory_dirOs1���-�(�A��$�$�R�W�W�\�\�!�5J�%K�X�^�)rc��URRSS5S:Xa�[H�nURUS5R	S5nXc:wdM+[H}nXW:XaM
[
RR[
RRXv55(dMMUR[
RRXv5X$5  M� M� g[X[5nU(aURXU5 gg)Nr�r�r-ry)r�r�rr*r�r�r~rbr��
merge_filercra)rBr�r�r�r�rg�rel_file�ps        rr��XMLMenuBuilder.parse_merge_fileUs����<�<���F�D�)�X�5�$��#�+�+�A�r�2�8�8��=���'�,���6�$��7�7�>�>�"�'�'�,�,�q�*C�D�D� �O�O�B�G�G�L�L��,E�u�U�!�-�%�%�U�i�@�E������f�5�rc� �[X[5nU(af[R"U5HKnUR	S5(a1UR[RRX5X$5 MKMM gg![a M^f=f)Nr~)	rcr_r��listdirr�r�r~r��UnicodeDecodeError)rBr�r�r�r��items      rr��XMLMenuBuilder.parse_merge_diresq�� ��(�;����
�
�5�)����}�}�W�-�-���������U�(A�5�Q�.�*���
*����s�AA?�?
B
�B
c	��[RR[RRU55Sn[	[
5H8nUR
[RRUSUS-5XU5 M: g)Nrr�z-merged)r�r~�splitext�basenamer�rr�r�)rBr�r�r�r�rgs      rr��'XMLMenuBuilder.parse_default_merge_dirsosc���7�7�#�#�B�G�G�$4�$4�X�$>�?��B���/�*�A�� � ������a��(�Y�:N�!O�QV�bh�i�+rc��XR;aUR(a[SU5egURRU5 [R
"U5nUR5nURXQU5 g![a  UR(a[SU5eg UR(a[SU5eg=f)Nz Infinite MergeFile loop detectedr}r)	r�rxrr�r�r��IOErrorr�r�)rBr�r�r�r��roots      rr��XMLMenuBuilder.merge_filets����)�)�)��z�z�"�#E�x�P�P�������x�(�	��;�;�x�(�D��|�|�~�������/���	��z�z�"�#3�X�>�>��	��z�z�"�#;�X�F�F��s�
B�'C�,Cc�@�URXX45nU(aXE-
nggrF)�merge_legacy_dir)rBrAr"r�r��ms      rr��XMLMenuBuilder.parse_legacy_dir�s#���!�!�$��A����K�F�
rc	��[X[5nU(Ga-XR;GaURRU5 [	5nUR
R
U5 URR
U5 [RRU5UlSUl[R"U5H�nUS:XaURR
U5 M'[RR[RR!X55(aBUR#UR%[RR!X5UUU55 M�M� UR(R+U/US5 UR(R-U/S5nUH�nUR.n	[1U	5S:XaI[2R5[2R6UR85n
UR:R
U
5 XR
;dMxU	R
S5 X�lM� U$gg![&a GM�f=f)NTz
.directoryFr�Legacy)rcr_r�r�r*r7rLr:r�r~r�rr4r�r9r`r�rMr�r�r��add_menu_entries�get_menu_entriesr r|r�r�rrrr?)rBrAr"r�r�r�r�rrv�
categories�rs           rr��XMLMenuBuilder.merge_legacy_dir�s������9���D� 4� 4�4�� � �$�$�T�*���A�
�I�I���T�"�
�O�O�"�"�4�(��W�W�%�%�d�+�A�F��A�J��
�
�4�(����|�+��
�
�,�,�T�2������r�w�w�|�|�D�'?�@�@����T�%:�%:��G�G�L�L��4�"�$�"�	&��A�	)�
�J�J�'�'�����=��*�*�5�5�t�f�e�D�K�(�	�&�1�1�
��z�?�a�'��)�)�$�*;�*;�Y�=T�=T�U�A��G�G�N�N�1�%��~�~�-��%�%�h�/�+5�(�)��H�E5�4��&*����s�	!I�,BI�
I�Ic�2�[R"/SQ[RSS9nUR5SR	5nUSR
S5HnURUSX5 M g![
a gf=f![a gf=f)N)z
kde-configz--path�appsT)�stdout�universal_newlinesr�:�kde)	�
subprocess�Popen�PIPE�communicate�
splitlines�OSErrorr{r��
IndexError)rBr�r��proc�outputrAs      rr��$XMLMenuBuilder.parse_kde_legacy_dirs�s���		��#�#�0�!���#'��D�
�%�%�'��*�5�5�7�F�	��q�	����,���%�%�d�E�8�D�-��	�	��	���	��	�s$�AA9�
.B	�9
B�B�	
B�Bc��URcSUlURcSUlUR(aUR(d�UR(aURUlO�UR(a<URS:�aUR
RUlOu[5UlOeURS:�a7UR
RUlUR
RUlO[5Ul[5UlURS:�aPUR
RUR-UlUR
RUR-Ul[UR5Ul	[UR5Ul[UR5UlURHnURU5 M URR5 URR5 URR5 URH�nURH�n[RR[RR!XC55(dMF[#X45nUR$(dXQlMjUR'5["R(:XdM�UR$R'5["R*:XdM�XQR$lM� UR$(dM� g g)NFr)r#r>r;r8r2r3r7r:rtr9r@r�r�r�r~rbr�r�r.r2r1r0r)rBr�rSrPrOrvs      rr��XMLMenuBuilder.post_parse�s-���<�<�� �D�L����'�#(�D� ��{�{�$�"4�"4��!�!�"�0�0�������:�:��>�)-���)B�)B�D�&�)/��D�&��:�:��>�"&�+�+�";�";�D�K�)-���)B�)B�D�&�"(�(�D�K�)/��D�&��:�:��>��;�;�.�.����=�D�L�!%���!:�!:�T�=O�=O�!O�D��#�4�#3�#3�4���$�T�%7�%7�8����t�|�|�,����}�}�G��O�O�G�$�%�	
��� � �"����"�"�$��������)�)�I��)�)���7�7�>�>�"�'�'�,�,�s�">�?�?� )�)� 9�I��>�>�)2��"�*�*�,�	�0E�0E�E��>�>�1�1�3�y�7J�7J�J�6?�N�N�3�*��~�~�~��*rc��URHnURU5 M URSLa�URR	UR
5 /nURH8nURURRUR
5S5nM: UHXnURSLdMURRU5 SUl	SUlURRU5 MZ gg)NFrzT)r@r�r>r�r�r7r?rr�rrrLr
r<�rBr�rSrrQrvs      rr��*XMLMenuBuilder.generate_not_only_allocateds����}�}�G��,�,�W�5�%����5�(��J�J�'�'����5��K��
�
��"�j�j����)D�)D�T�\�\�)R�TU�V��#�)�	��=�=�D�(��%�%�,�,�T�2�$)�I�M�*.�I�'��$�$�+�+�I�6�)�
)rc���URHnURU5 M URSLa�URR	UR
5 /nURH8nURURRUR
5S5nM: UHJnURSLdMURRU5 URRU5 ML gg)NTr)
r@r�r>r�r�r7r?rr�rrrLr<rs      rr��&XMLMenuBuilder.generate_only_allocateds����}�}�G��(�(��1�%����4�'��J�J�'�'����5��K��
�
��"�j�j����)D�)D�T�\�\�)R�TU�V��#�(�	��=�=�D�(��%�%�,�,�T�2��$�$�+�+�I�6�)�(rc��URHnURU5 M URGHnURUR5nU(dM(URUR
5nUR
R
S5nSn[U5S:�a�U(dUnURUS5nU(d;[5nUSUl	[U5S:�aSUl
URU5 UnURS5 [U5S:�aM�WU-
nURRRU5 GM g)NryrrzT)r@r�r=r}r�r�r{r|r*rr4rMr�r3r�)	rBr�rSrR�move_from_menu�move_to_menur��	oldparentr�s	         rr��XMLMenuBuilder.handle_moves$s���}�}�G����g�&�%��J�J�D�!�\�\�$�(�(�3�N��~�#�|�|�D�H�H�5�������s�+�� �	��%�j�1�n�$�$(�	�'�/�/��a��9�G�"�"&�&��',�Q�x����u�:��>�/3�G�,�!�,�,�W�5� '�I��I�I�a�L��%�j�1�n��>�)���%�%�.�.�5�5�n�E�-r)r�r�r�rxr�rF)r�r�r�r�rCr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrvrvbs����4�l�
2=�h �D	�	 �� �H)�
R�/�
_�6� �j�
0�4�
$�L�"6�r7�"7� Frrvc�8�\rSrSrSrSrS	SjrSrS
SjrSr	g)r�iAzClass to cache Desktop Entriesc�>�0Ul/URS'0Ulg)N�legacy)�cacheEntriesr�rAs rrC�MenuEntryCache.__init__Cs!�����&(����(�#���
rc�|�UH6nX@R;dM/URU'URUSX#5 M8 g)Nr-)r�_MenuEntryCache__addFiles)rBrfr"rrAs     rr��MenuEntryCache.add_menu_entriesHs8���D��,�,�,�*,��!�!�$�'�����b�&�9�rc��[R"[RRX55GHnUR	S5(aq[[RRX%5X5nURURU5 U(a URSRU5 M�M�[RR[RRXU55(dM�U(aM�URU[RRX%5X45 GM g![a GMf=f)Nz.desktopr)r�r�r~r�r�r�rrrLr`r)rBrA�subdirr"rr�rvs       r�
__addFiles�MenuEntryCache.__addFilesNs����J�J�r�w�w�|�|�D�9�:�D��}�}�Z�(�(�� )�"�'�'�,�,�v�*D�d� S�I��!�!�$�'�.�.�y�9���%�%�h�/�6�6�y�A�������r�w�w�|�|�D�$�?�@�@�������b�g�g�l�l�6�&@�&�Q�;��$����s�)E�
E�Ec�z�/n[5nUSSnU(aURS5 SRU5nURU$![a Of=fUH�nUR
UH�nURU;a.URUR5 URU5 MBUR5[R:XaAURU5n	X9n
U
R5[R:XaX�l
M�M�M�![a M�f=f M� X0RU'U$)Nrr-)r�rLr�r��KeyErrorrrrr�r2r�r1�indexr0rr�)rBrfr�entries�ids�appdirs�keyrArv�idxrns           rr��MenuEntryCache.get_menu_entries\s �����e���q�'����N�N�8�$��g�g�g���	��:�:�c�?�"���	��	���D�!�.�.�t�4�	�� �.�.�c�9����	� 7� 7�8����y�1�"�*�*�,�	�0E�0E�E�%�m�m�I�6�� '��� �=�=�?�i�.A�.A�A�-6�N�B�	F��*�����5��"�
�
�3���s*�A�
A�A�3<D�1AD�
D$�#D$)r�rN)r-F)T)
r�r�r�r�r�rCr�rr�r�r�rrr�r�As��$��
:�R�rr�c�6�[U5RU5$)zQHelper function.
Equivalent to calling xdg.Menu.XMLMenuBuilder().parse(filename)
)rvr�)r�rxs  rr�r�{s���%� �&�&�x�0�0rr[)1r�r�rrrr�xml.etree.cElementTreer��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�r_rarcrirnrt�objectrvr�r�r�rr�<module>r:s
���&
�
��
�
�*�*�*�=�)�'����1����
�
�	������
��l)�l)�^	(�(���0,�,�^_"�_"�D�������)���#��\F�V�\F�~7�7�t1��A#�*�)�)�*�s�	C�C�C

Filemanager

Name Type Size Permission Actions
BaseDirectory.cpython-313.pyc File 8.89 KB 0644
Config.cpython-313.pyc File 1.42 KB 0644
DesktopEntry.cpython-313.pyc File 25.28 KB 0644
Exceptions.cpython-313.pyc File 4.62 KB 0644
IconTheme.cpython-313.pyc File 23.22 KB 0644
IniFile.cpython-313.pyc File 17.07 KB 0644
Locale.cpython-313.pyc File 2.32 KB 0644
Menu.cpython-313.pyc File 55.46 KB 0644
MenuEditor.cpython-313.pyc File 26.44 KB 0644
Mime.cpython-313.pyc File 35.72 KB 0644
RecentFiles.cpython-313.pyc File 9.58 KB 0644
__init__.cpython-313.pyc File 2.11 KB 0644
util.cpython-313.pyc File 3.25 KB 0644
Filemanager