§
    Öu•c´š  ã                   óî  — d Z ddlZddlZddlZddlZddlZ	 ddlmc mZ n# e	$ r ddl
mc mZ Y nw xY wddlmZmZ ddlmZ ddlmZ ddlmZ ddlZddlZd„ Zd„ Zd	Zd
ZdZdZdZdZ G d„ d¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z" G d„ d¦  «        Z# G d„ d¦  «        Z$ G d„ d¦  «        Z% G d„ d¦  «        Z&d\  Z'Z(d„ Z)d„ Z*d „ Z+d!„ Z, G d"„ d#e-¦  «        Z. G d$„ d%¦  «        Z/d(d'„Z0dS ))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                 ó  — t           j        dk    rLt          j        | ¦  «        } t           j        dk    rt          j        | ¦  «        S t          j        | ¦  «        S t          j        | t          j        ¦   «         ¬¦  «        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                 óŒ   — t           s*t          | t          ¦  «        r|                      d¦  «        } t	          j        | ¦  «        S )zgWrapper around locale.strxfrm that accepts unicode strings on Python 2.

    See Python bug #2481.
    zutf-8)r   Ú
isinstanceÚunicodeÚencodeÚlocaleÚstrxfrm)Úss    r   Ú_strxfrmr"   2   s>   € õ
 ð •Z ¥7Ñ+Ô+ð Ø�HŠH�WÑÔˆÝŒ>˜!ÑÔÐr   ÚDeletedÚ	NoDisplayÚHiddenÚEmptyÚ	NotShowInÚNoExecc                   óˆ   — e Zd Z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d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	 d„ Zd„ ZdS )Ú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 | _        d S )NÚ r   FT)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__I   s¢   € àˆŒ	ØˆŒØˆŒØˆŒØˆŒØˆŒ
ØˆŒØˆŒð ˆŒ	ØˆŒð ˆŒØ!ˆÔØˆŒØˆÔØˆÔØˆŒØˆÔØˆŒ
Ø#ˆÔØˆŒ
ØˆŒˆˆr   c                 ó   — | j         S ©N©r   r@   s    r   Ú__str__zMenu.__str__e   ó
   € ØŒyÐr   c                 óD  — |j         D ]}| j                              |¦  «         Œ|j        D ]}| j                             |¦  «         Œ|j        D ]}| j                             |¦  «         Œ|j        �|j        | _        |j        �|j        | _        |j        r|j        | _        |j        r|j        | _        |j        D ]}| j                             |¦  «         Œ|j	        D ]}| j	                             |¦  «         Œ|j
        D ]}|                      |¦  «         Œ| S rD   )r6   Úappendr9   r8   r#   r=   r:   r7   r>   r<   r?   Ú
addSubmenu)rA   ÚotherÚdirÚ	directoryÚruleÚmoveÚsubmenus          r   Ú__add__zMenu.__add__h   sQ  € Ø”=ð 	%ð 	%ˆ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Ñ$Ô$Ð$Ð$àˆr   c                 ót   — t          j        |                      ¦   «         |                     ¦   «         ¦  «        S rD   )r   ÚstrcollÚgetName©rA   rK   s     r   Ú__cmp__zMenu.__cmp__Š   s$   € ÝŒ~˜dŸlšl™nœn¨e¯mªm©o¬oÑ>Ô>Ð>r   c                 óD   — t          |                      ¦   «         ¦  «        S ©z&Key function for locale-aware sorting.)r"   rT   r@   s    r   Ú_keyz	Menu._key�   s   € å˜Ÿš™œÑ'Ô'Ð'r   c                 ó~   — 	 |                      ¦   «         }n# t          $ r Y nw xY w|                       ¦   «         |k     S rD   ©rY   ÚAttributeErrorrU   s     r   Ú__lt__zMenu.__lt__‘   óI   € ð	Ø—J’J‘L”LˆEˆEøÝð 	ð 	ð 	ØˆDð	øøøà�yŠy‰{Œ{˜UÒ"Ð"ó   ‚ —
$£$c                 ó„   — 	 | j         t          |¦  «        k    S # t          $ r | j         t          |¦  «        k    cY S w xY wrD   )r   r   Ú	NameErrorÚstrrU   s     r   Ú__eq__zMenu.__eq__˜   sN   € ð	+Ø”9¥¨¡¤Ò.Ð.øÝð 	+ð 	+ð 	+Ø”9¥ E¡
¤
Ò*Ð*Ð*Ð*ð	+øøøs   ‚ š"?¾?Fc              #   óF   K  — | j         D ]}|r|V — Œ	|j        du r|V — ŒdS )z4Interator for a list of Entries visible to the user.TN)r.   r4   )rA   Úshow_hiddenÚentrys      r   Ú
getEntrieszMenu.getEntriesŸ   sK   è è € à”\ð 	ð 	ˆEØð Ø����Ø”˜tÐ#Ð#Ø���øð		ð 	r   c                 ó€   — | j         D ]}|j        |k    r|c S Œ|r | j        D ]}|                     ||¦  «         ŒdS dS )z4Searches for a MenuEntry with a given DesktopFileID.N)r;   ÚDesktopFileIDr?   ÚgetMenuEntry)rA   ÚdesktopfileidÚdeepÚ	menuentryrP   s        r   rj   zMenu.getMenuEntry«   sy   € àÔ)ð 	!ð 	!ˆIØÔ&¨-Ò7Ð7Ø Ð Ð Ð ð 8àð 	:Øœ=ð :ð :�Ø×$Ò$ ]°DÑ9Ô9Ð9Ð9ð	:ð 	:ð:ð :r   c                 óÐ   — |                      dd¦  «        }| j        D ]G}|j        |d         k    r4t          |¦  «        dk    r|                     |d         ¦  «        c S |c S ŒHdS )z&Searches for a Menu with a given path.ú/é   r   N)Úsplitr?   r   ÚlenÚgetMenu)rA   ÚpathÚarrayrP   s       r   rs   zMenu.getMenu´   sz   € à—
’
˜3 Ñ"Ô"ˆØ”}ð 	#ð 	#ˆGØŒ|˜u QœxÒ'Ð'Ý�u‘:”: ’>�>Ø"Ÿ?š?¨5°¬8Ñ4Ô4Ð4Ð4Ð4à"�N�N�Nð	 (ð	#ð 	#r   c                 óf  — | }g }	 |r|                      |j        ¦  «         n'|                      |                     ¦   «         ¦  «         |j        dk    r|j        }nnŒY|                     ¦   «          d}|s|                     d¦  «         |D ]"}t          j         	                    ||¦  «        }Œ#|S )z/Returns this menu's path in the menu structure.rp   r   r,   )
rI   r   rT   r1   r2   ÚreverseÚpopÚosrt   Újoin)rA   ÚorgÚtoplevelÚparentÚnamesrt   r   s          r   ÚgetPathzMenu.getPath¾   sÀ   € àˆØˆð	Øð /Ø—’˜Vœ[Ñ)Ô)Ð)Ð)à—’˜VŸ^š^Ñ-Ô-Ñ.Ô.Ð.ØŒ|˜aÒÐØœ��àð	ð 	�Š‰ŒˆØˆØð 	Ø�IŠI�a‰LŒLˆLØð 	,ð 	,ˆDÝ”7—<’<  dÑ+Ô+ˆDˆDØˆr   c                 ón   — 	 | j         j                             ¦   «         S # t          $ r
 | j        cY S w xY w)z"Returns the menu's localised name.)r-   r   rT   r\   r   r@   s    r   rT   zMenu.getNameÓ   sG   € ð	Ø”>Ô.×6Ò6Ñ8Ô8Ð8øÝð 	ð 	ð 	Ø”9ÐÐÐð	øøøs   ‚   4³4c                 ób   — 	 | j         j                             ¦   «         S # t          $ r Y dS w xY w)z Returns the menu's generic name.r,   )r-   r   ÚgetGenericNamer\   r@   s    r   r‚   zMenu.getGenericNameÚ   s@   € ð	Ø”>Ô.×=Ò=Ñ?Ô?Ð?øÝð 	ð 	ð 	Ø�2�2ð	øøøó   ‚   
.­.c                 ób   — 	 | j         j                             ¦   «         S # t          $ r Y dS w xY w)z Returns the menu's comment text.r,   )r-   r   Ú
getCommentr\   r@   s    r   r…   zMenu.getCommentá   s@   € ð	Ø”>Ô.×9Ò9Ñ;Ô;Ð;øÝð 	ð 	ð 	Ø�2�2ð	øøørƒ   c                 ób   — 	 | j         j                             ¦   «         S # t          $ r Y dS w xY w)z0Returns the menu's icon, filename or simple namer,   )r-   r   ÚgetIconr\   r@   s    r   r‡   zMenu.getIconè   s@   € ð	Ø”>Ô.×6Ò6Ñ8Ô8Ð8øÝð 	ð 	ð 	Ø�2�2ð	øøørƒ   c                 ó¾  — g | _         d| _        | j        D ]}|                     ¦   «          Œt	          ¦   «         }t	          ¦   «         }| j        j        D ]Q}|d         dk    r|                     |d         ¦  «         Œ*|d         dk    r|                     |d         ¦  «         ŒR| j        j        D �]}|d         dk    rit          | ¦  «        }t          | j         ¦  «        dk    r't          | j         d         t          ¦  «        rd|_        | j                              |¦  «         Œx|d         dk    r8|                      |d         ¦  «        }|r| j                              |¦  «         Œ¼|d         dk    r\|                      |d         ¦  «        }|r=|j        j        r|                      |¦  «         �Œ| j                              |¦  «         �Œ$|d         dk    rà|d         d	k    s|d         d
k    rH| j                             ¦   «          | j        D ]%}|j        |vr| j                              |¦  «         Œ&�Œ�|d         dk    s|d         d
k    rh| j                             ¦   «          | j        D ]G}|j        |vr<|j        j        r|                      |¦  «         Œ-| j                              |¦  «         ŒH�Œ| j         D �]~}d|_        | xj        dz  c_        t          |t(          ¦  «        r¶|j        du rt,          |_        | xj        dz  c_        ŒUt          |j        t0          ¦  «        ru|j        j                             ¦   «         rt6          |_        | xj        dz  c_        Œª|j        j                             ¦   «         rt:          |_        | xj        dz  c_        Œåt          |t0          ¦  «        �r^|j                             ¦   «         rt6          |_        | xj        dz  c_        �Œ2|j                             ¦   «         rt:          |_        | xj        dz  c_        �Œi|j                             ¦   «         r7|j                             ¦   «         st@          |_        | xj        dz  c_        �Œ¹tB          j"        j#        r�|j         $                    ¦   «         g k    r*tB          j"        j#        |j         $                    ¦   «         vs*tB          j"        j#        |j         %                    ¦   «         v rtL          |_        | xj        dz  c_        �ŒYt          |t          ¦  «        r| xj        dz  c_        �Œ€t          | j         ¦  «        dk    r2t          | j         d         t          ¦  «        rd| j         d         _        t          | j         ¦  «        dk    r2t          | j         d         t          ¦  «        rd| j         d         _        | j         d d …         D ]m}t          |t(          ¦  «        rV|j        j'        sJ|j        dk    r?tP          |_        | xj        dz  c_        |j)        du r| j          *                    |¦  «         Œnd S )Nr   r0   rp   ÚMenunameÚ	SeparatoréÿÿÿÿFÚMergeÚfilesÚallÚmenusT)+r.   r5   r?   ÚsortÚsetr:   ÚorderÚaddrŠ   rr   r   r4   rI   rj   rs   ÚinlineÚmerge_inliner;   ri   r   r*   r#   ÚDELETEDr-   Ú	MenuEntryr   ÚgetNoDisplayÚ
NO_DISPLAYÚ	getHiddenÚHIDDENÚ
getTryExecÚfindTryExecÚNO_EXECÚxdgÚConfigÚwindowmanagerÚgetOnlyShowInÚgetNotShowInÚNOT_SHOW_INÚ
show_emptyÚEMPTYr3   Úremove)rA   rP   Ú	_submenusÚ_entriesr’   Ú	separatorrm   rf   s           r   r�   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×'Ò'¨Ñ.Ô.Ð.øð	/ð 	/r   c                 ó–   — | j         D ]}||k    r||z  } d S Œ| j                              |¦  «         | |_        | j        dz   |_        d S )Nrp   )r?   rI   r2   r1   )rA   ÚnewmenurP   s      r   rJ   zMenu.addSubmenuT  sd   € Ø”}ð 	+ð 	+ˆGØ˜'Ò!Ð!Ø˜7Ñ"�Ø��ð "ð ŒM× Ò  Ñ)Ô)Ð)Ø!ˆGŒNØ œJ¨™NˆGŒMˆMˆMr   c                 óx  — t          |j        ¦  «        dk    rÂ|j        j        r¶|j        d         }|j                             d|                     ¦   «         d¬¦  «         |j                             d|                     ¦   «         d¬¦  «         |j                             d|                     ¦   «         d¬¦  «         | j         	                    |¦  «         dS t          |j        ¦  «        |j        j
        k    s|j        j
        dk    r“|j        j        rat          |                     ¦   «         |                     ¦   «         |                     ¦   «         ¦  «        }| j         	                    |¦  «         |j        D ]}| j         	                    |¦  «         ŒdS | j         	                    |¦  «         dS )	z}Appends a submenu's entries to this menu
        See the <Menuname> section of the spec about the "inline" attribute
        rp   r   r   T)r   ÚGenericNameÚCommentN)rr   r.   r:   Úinline_aliasr   r‘   rT   r‚   r…   rI   Úinline_limitÚinline_headerÚHeader)rA   rP   rm   Úheaderrf   s        r   r•   zMenu.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×Ò Ñ(Ô(Ð(Ð(Ð(r   N©F)FF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rF   rQ   rV   rY   r]   rc   rg   rj   rs   r   rT   r‚   r…   r‡   r�   rJ   r•   © r   r   r*   r*   D   sJ  € € € € € ðð ðð ð ð8ð ð ðð ð ðD?ð ?ð ?ð(ð (ð (ð#ð #ð #ð+ð +ð +ð ðð ð ð ð:ð :ð :ð :ð#ð #ð #ðð ð ð ð*ð ð ðð ð ðð ð ðð ð ðb/ð b/ð b/ðH ð+ð +ð +ð)ð )ð )ð )ð )r   r*   c                   ó    — e Zd ZdZdd„Zd„ ZdS )ÚMovezA move operationr,   c                 ó"   — || _         || _        d S rD   )ÚOldÚNew)rA   ÚoldÚnews      r   rB   zMove.__init__u  s   € ØˆŒØˆŒˆˆr   c                 ó6   — t          | j        |j        ¦  «        S rD   )Úcmpr¾   rU   s     r   rV   zMove.__cmp__y  s   € Ý�4”8˜UœYÑ'Ô'Ð'r   N©r,   r,   )r¶   r·   r¸   r¹   rB   rV   rº   r   r   r¼   r¼   s  s=   € € € € € ØÐðð ð ð ð(ð (ð (ð (ð (r   r¼   c                   óT   — e Zd ZdZ	 	 d	d„Zed„ ¦   «         Zej        d„ ¦   «         ZdS )
r:   zMenu Layout classFr
   Tc                 ót   — || _         || _        || _        || _        || _        g | _        ddgddgg| _        d S )NrŒ   r�   r�   )r¥   r”   r±   r²   r°   Ú_orderÚ_default_order)rA   r¥   r”   r±   r²   r°   s         r   rB   zLayout.__init__  sO   € à$ˆŒØˆŒØ(ˆÔØ*ˆÔØ(ˆÔØˆŒà�gÐØ�gÐð
ˆÔÐÐr   c                 ó,   — | j         r| j         n| j        S rD   )rÇ   rÈ   r@   s    r   r’   zLayout.orderŒ  s   € à"œkÐBˆtŒ{ˆ{¨tÔ/BÐBr   c                 ó   — || _         d S rD   )rÇ   )rA   r’   s     r   r’   zLayout.order�  s   € àˆŒˆˆr   N)FFr
   TF)r¶   r·   r¸   r¹   rB   Úpropertyr’   Úsetterrº   r   r   r:   r:   }  so   € € € € € ØÐØDEØ27ð
ð 
ð 
ð 
ð ðCð Cñ „XðCð „\ðð ñ „\ðð ð r   r:   c                   óD   — e Zd ZdZd\  ZZed„ ¦   «         Zd„ Zd„ Z	d„ Z
dS )ÚRulezInclude / Exclude Rules Class©r   rp   c                 ó†  — t          j        t          j        t          j        |¦  «        t          j        ¦   «         gt          j        t          j        dt          j        ¦   «         ¬¦  «        dt          j        ¦   «         ¬¦  «        g¬¦  «        dd¬¦  «        }t          j        |¦  «         t          ||¦  «        }|S )	Nrm   r   ri   ©ÚvalueÚattrr   ©ÚleftÚopsÚcomparatorsrp   r   )ÚbodyÚlinenoÚ
col_offset)
r   Ú
ExpressionÚCompareÚStrÚEqÚ	Attributer   r   Úfix_missing_locationsrÎ   )ÚclsÚtypeÚfilenameÚtreerN   s        r   ÚfromFilenamezRule.fromFilenameš  s¯   € åŒ~Ý”Ý”W˜XÑ&Ô&Ý”V‘X”X�JÝ œ]Ýœ( kµs´x±z´zÐBÑBÔBØ(Ýœ™
œ
ðñ ô ð ðñ ô ð  ð
ñ 
ô 
ˆõ 	Ô! $Ñ'Ô'Ð'Ý�D˜$ÑÔˆØˆr   c                 óX   — || _         || _        t          | j        dd¦  «        | _        d S )Nz<compiled-menu-rule>Úeval)ÚTypeÚ
expressionÚcompileÚcode)rA   râ   ré   s      r   rB   zRule.__init__¬  s*   € àˆŒ	à$ˆŒÝ˜DœOÐ-CÀVÑLÔLˆŒ	ˆ	ˆ	r   c                 ó4   — t          j        | j        ¦  «        S rD   )r   Údumpré   r@   s    r   rF   zRule.__str__³  s   € ÝŒx˜œÑ(Ô(Ð(r   c                 ó¼   — |D ]X}|dk    r|j         du s	|j        du rŒt          | j        ¦  «        r)| j        t
          j        u rd|_        d|_         ŒQd|_        ŒY|S )Né   TF)ÚMatchedIncludeÚ	Allocatedrç   rë   rè   rÎ   ÚTYPE_INCLUDEÚAdd)rA   ÚmenuentriesÚrunrm   s       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øØÐr   N)r¶   r·   r¸   r¹   rò   ÚTYPE_EXCLUDEÚclassmethodrå   rB   rF   rö   rº   r   r   rÎ   rÎ   •  sm   € € € € € Ø'Ð'à!%Ñ€L�,àðð ñ „[ðð"Mð Mð Mð)ð )ð )ðð ð ð ð r   rÎ   c                   ój   — e Zd ZdZdZdZdZdd„Zd„ Zd„ Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r—   z(Wrapper for 'Menu Style' Desktop EntriesÚUserÚSystemÚBothr,   c                 ó(  — t          t          j                             ||¦  «        ¦  «        | _         |                      |||¦  «         d| _        d | _        g | _        d| _        d| _	        d| _
        | j                              ¦   «         | _        d S ©NTF)r   ry   rt   rz   ÚsetAttributesr4   ÚOriginalÚParentsrñ   ró   rð   ÚgetCategoriesÚ
Categories©rA   rã   rL   Úprefixs       r   rB   zMenuEntry.__init__Ë  s‡   € å(­¬¯ª°c¸8Ñ)DÔ)DÑEÔEˆÔØ×Ò˜8 S¨&Ñ1Ô1Ð1ð ˆŒ	ð ˆŒØˆŒð ˆŒØˆŒØ#ˆÔð Ô+×9Ò9Ñ;Ô;ˆŒˆˆr   c                 óT   — | j         j        r| j                              ¦   «          dS dS )z&Save any changes to the desktop entry.N)r   ÚtaintedÚwriter@   s    r   ÚsavezMenuEntry.saveß  s5   € àÔÔ$ð 	&ØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð	&ð 	&r   c                 óL   — | j         j                             | j        d¦  «        S )z7Return the directory containing the desktop entry file.r,   )r   rã   Úreplacer0   r@   s    r   ÚgetDirzMenuEntry.getDirä  s    € àÔ Ô)×1Ò1°$´-ÀÑDÔDÐDr   c                 óœ   — t           j        j        s5| j        r| j        S t
          d         | j        j        v r| j        S | j	        S | j        S )z.Return the type of MenuEntry, System/User/Bothr   )
rŸ   r    Ú	root_moder   Ú	TYPE_BOTHr   r   rã   Ú	TYPE_USERÚTYPE_SYSTEMr@   s    r   ÚgetTypezMenuEntry.getTypeè  sP   € åŒzÔ#ð 	"ØŒ}ð (Ø”~Ð%Ý˜qÔ! TÔ%6Ô%?Ð?Ð?Ø”~Ð%àÔ'Ð'à”>Ð!r   c                 ó  — || _         || _        t          j                             ||¦  «                             dd¦  «        | _        t          j                             | j        j	        ¦  «        s|  
                    ¦   «          d S d S )Nro   ú-)r0   ÚPrefixry   rt   rz   r  ri   Úisabsr   rã   Ú_MenuEntry__setFilenamer  s       r   rÿ   zMenuEntry.setAttributesô  sv   € Ø ˆŒØˆŒÝœWŸ\š\¨&°(Ñ;Ô;×CÒCÀCÈÑMÔMˆÔåŒw�}Š}˜TÔ.Ô7Ñ8Ô8ð 	!Ø×ÒÑ Ô Ð Ð Ð ð	!ð 	!r   c                 óÐ   — |                       ¦   «         | j        k    rHt          | j        |                      ¦   «         | j        ¦  «        | _        |                      ¦   «          d S d S rD   )r  r  r—   r0   r  r  r   r  r@   s    r   ÚupdateAttributeszMenuEntry.updateAttributesü  sW   € Ø�<Š<‰>Œ>˜TÔ-Ò-Ð-Ý% d¤m°T·[²[±]´]ÀDÄKÑPÔPˆDŒMØ×ÒÑ Ô Ð Ð Ð ð .Ð-r   c                 óx  — t           j        j        st          d         }nt          d         }| j                             ¦   «         dk    r!t          j                             |d¦  «        }n t          j                             |d¦  «        }t          j                             || j	        ¦  «        | j        _
        d S )Nr   rp   ÚApplicationÚapplicationsúdesktop-directories)rŸ   r    r  r   r   r  ry   rt   rz   r0   rã   )rA   rt   Údir_s      r   Ú__setFilenamezMenuEntry.__setFilename  s�   € ÝŒzÔ#ð 	$Ý  Ô#ˆDˆDå  Ô#ˆDàÔ×$Ò$Ñ&Ô&¨-Ò7Ð7Ý”7—<’<  nÑ5Ô5ˆDˆDå”7—<’< Ð&;Ñ<Ô<ˆDå%'¤W§\¢\°$¸¼Ñ%FÔ%FˆÔÔ"Ð"Ð"r   c                 óˆ   — t          j        | j                             ¦   «         |j                             ¦   «         ¦  «        S rD   )r   rS   r   rT   rU   s     r   rV   zMenuEntry.__cmp__  s2   € ÝŒ~˜dÔ/×7Ò7Ñ9Ô9¸5Ô;M×;UÒ;UÑ;WÔ;WÑXÔXÐXr   c                 óN   — t          | j                             ¦   «         ¦  «        S rX   )r"   r   rT   r@   s    r   rY   zMenuEntry._key  s   € å˜Ô)×1Ò1Ñ3Ô3Ñ4Ô4Ð4r   c                 ó~   — 	 |                      ¦   «         }n# t          $ r Y nw xY w|                       ¦   «         |k     S rD   r[   rU   s     r   r]   zMenuEntry.__lt__  r^   r_   c                 ó:   — | j         t          |¦  «        k    rdS dS rþ   )ri   rb   rU   s     r   rc   zMenuEntry.__eq__  s    € ØÔ¥ U¡¤Ò+Ð+Ø�4à�5r   c                 ó   — | j         S rD   )ri   r@   s    r   Ú__repr__zMenuEntry.__repr__"  s   € ØÔ!Ð!r   NrÄ   )r¶   r·   r¸   r¹   r  r  r  rB   r	  r  r  rÿ   r  r  rV   rY   r]   rc   r%  rº   r   r   r—   r—   Ä  sð   € € € € € Ø.Ð.à€IØ€KØ€Ið<ð <ð <ð <ð(&ð &ð &ð
Eð Eð Eð
"ð 
"ð 
"ð!ð !ð !ð !ð!ð !ð !ð
Gð Gð GðYð Yð Yð5ð 5ð 5ð#ð #ð #ðð ð ð"ð "ð "ð "ð "r   r—   c                   ó   — e Zd ZdZd„ ZdS )rŠ   z!Just a dummy class for Separatorsc                 ó"   — || _         d| _        d S )NT)r2   r4   )rA   r}   s     r   rB   zSeparator.__init__(  s   € ØˆŒØˆŒ	ˆ	ˆ	r   N)r¶   r·   r¸   r¹   rB   rº   r   r   rŠ   rŠ   &  s)   € € € € € Ø'Ð'ðð ð ð ð r   rŠ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )r³   zClass for Inline Headersc                 ó0   — || _         || _        || _        d S rD   )r   r®   r¯   )rA   r   Úgeneric_nameÚcomments       r   rB   zHeader.__init__/  s   € ØˆŒ	Ø'ˆÔØˆŒˆˆr   c                 ó   — | j         S rD   rE   r@   s    r   rF   zHeader.__str__4  rG   r   N)r¶   r·   r¸   r¹   rB   rF   rº   r   r   r³   r³   -  s8   € € € € € ØÐðð ð ð
ð ð ð ð r   r³   rÏ   c                 óò  — t           j                             |¦  «        }t           j                             | ¦  «        s t           j                             || ¦  «        } t           j                             | ¦  «        } t           j                             | ¦  «        sdS |t          k    r!t           j                             | ¦  «        r| S |t          k    r!t           j         
                    | ¦  «        r| S dS ©NF)ry   rt   Údirnamer  rz   ÚabspathÚexistsÚTYPE_DIRÚisdirÚ	TYPE_FILEÚisfile)rÒ   rã   râ   rt   s       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ÐØˆØˆ5r   c                 ó  — t          t          ¦  «        }t          j        j        du r|                     d¦  «         |D ]F}t          j                             |d| ¦  «        }t          j         	                    |¦  «        r|c S ŒGd S )NTr   r�   )
Úlistr   rŸ   r    r  rx   ry   rt   rz   r5  )rã   ÚdirsÚdÚmenunames       r   Ú_get_menu_file_pathr<  I  s‚   € Ý•Ñ Ô €DÝ
„zÔ˜tÐ#Ð#Ø�Š�‰ŒˆØð ð ˆÝ”7—<’<  7¨HÑ5Ô5ˆÝŒ7�>Š>˜(Ñ#Ô#ð 	ØˆOˆOˆOð	ðð r   c                 ó`   — t          | t          ¦  «        r| S |                      ¦   «         dk    S )NÚtrue)r   ÚboolÚlower)rÒ   s    r   Ú_to_boolrA  S  s,   € Ý�%�ÑÔð ØˆØ�;Š;‰=Œ=˜FÒ"Ð"r   c                 óx   ‡— i Š|                       ¦   «          ˆfd„| D ¦   «         } |                       ¦   «          | S )Nc                 óD   •— g | ]}|‰v¯‰                      ||¦  «        ‘ŒS rº   )Ú
setdefault)Ú.0ÚeÚ_sets     €r   ú
<listcomp>z_dedupe.<locals>.<listcomp>]  s,   ø€ ÐCÐCÐC q°Q¸d°]°]ˆT�_Š_˜Q Ñ"Ô"°]°]°]r   )rw   )Ú_listrG  s    @r   Ú_deduperJ  Z  s@   ø€ Ø€DØ	‡M‚M�O„O€OØCÐCÐCÐC¨EÐCÑCÔC€EØ	‡M‚M�O„O€OØ€Lr   c                   ó¤   — e Zd Zdd„Zdd„Zd„ Zdd„Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚXMLMenuBuilderFc                 ó   — || _         d S rD   )Údebug)rA   rN  s     r   rB   zXMLMenuBuilder.__init__d  s   € ØˆŒ
ˆ
ˆ
r   Nc                 ó®  — |r.t           j                             |¦  «        st          |¦  «        }|sft           j                             dd¦  «        dz   }t          |¦  «        }|s2t           j                             dd¦  «        dz   }t          |¦  «        }|st          dd|z  ¦  «        ‚|                     d¦  «        st          d|¦  «        ‚	 t          j	        |¦  «        }n#  t          d	|¦  «        ‚xY wt          ¦   «         | _        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.menuzdebian-menu.menuúFile not foundz/etc/xdg/menus/%sú.menuzNot a .menu fileúNot a valid .menu file)ry   rt   r  r<  Ú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�   )rA   rã   Ú	candidaterä   Úmenus        r   rY  zXMLMenuBuilder.parseg  sÃ  € ð ð 	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          ¦   «         }|                      |||¦  «         |S rD   )r*   Ú
parse_node)rA   Únoderã   re  s       r   r^  zXMLMenuBuilder.parse_menu�  s&   € Ý‰vŒvˆØ�Š˜˜h¨Ñ-Ô-Ð-Øˆr   c                 ó  — t          |¦  «        }|D �]ø}|j        |j        }}|r|                     ¦   «         nd }|dk    r,|                      ||¦  «        }|                     |¦  «         Œ[|dk    r|r|                      |||¦  «         Œ{|dk    r|                      ||¦  «         Œ˜|dk    r|r|                      |||¦  «         Œ¸|dk    r|  	                    ||¦  «         ŒÕ|dk    r
|r||_
        Œå|dk    r|r|j                             |¦  «         �Œ	|dk    r	d	|_        �Œ|d
k    r	d|_        �Œ'|dk    r	d	|_        �Œ6|dk    r	d|_        �ŒE|dk    s|dk    r/|j                             |                      |¦  «        ¦  «         �Œ€|dk    rU|j                             dd ¦  «        dk    r|                      d|||¦  «         �Œ¿|r|                      ||||¦  «         �ŒÛ|dk    r|r|                      ||||¦  «         �Œý|dk    r|                      |||¦  «         �Œ|dk    r/|j                             |                      |¦  «        ¦  «         �ŒQ|dk    r"|dk    r|                      |¦  «        |_        �Œy|dk    r"|dk    r|                      |¦  «        |_        �Œ¡|dk    r5|r3|                      ||j                             dd¦  «        ||¦  «         �ŒÜ|dk    r|                      ||¦  «         �Œúd S )Nr*   ÚAppDirÚDefaultAppDirsÚDirectoryDirÚDefaultDirectoryDirsr   r-   r=   TÚNotOnlyUnallocatedFr#   Ú
NotDeletedÚIncludeÚExcludeÚ	MergeFilerâ   r}   rQ  ÚMergeDirÚDefaultMergeDirsr¼   r:   rp   r7   Ú	LegacyDirr  r,   ÚKDELegacyDirs)rr   ÚtagÚtextÚstripr^  rJ   Úparse_app_dirÚparse_default_app_dirÚparse_directory_dirÚparse_default_directory_dirr   r8   rI   r=   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)	rA   rh  rã   r}   Únum_childrenÚchildrw  rx  re  s	            r   rg  zXMLMenuBuilder.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Ñ<Ô<Ð<ùða0	=ð 0	=r   c                 óÈ  — t          t          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        t	          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        ¬	¦  «        }g }|D �]‚}|j        |j        }}|r|                     ¦   «         nd }|d
k    rÞ|rÜ|                     d
|t          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        t	          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        t          |j                             dd¦  «        ¦  «        g¦  «         �Œ|dk    r|                     dg¦  «         �Œ+|dk    r|r|                     d|g¦  «         �ŒL|dk    r0|                     d|j                             dd¦  «        g¦  «         �Œ„||_	        |S )Nr¥   Fr”   r±   r
   r²   Tr°   )r¥   r”   r±   r²   r°   r‰   rŠ   r0   rŒ   râ   rŽ   )
r:   rA  r  rV  Úintrw  rx  ry  rI   r’   )rA   rh  Úlayoutr’   rˆ  rw  rx  s          r   r„  zXMLMenuBuilder.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ðñ ô ð ùð ˆŒØˆr   c                 ó¬   — d\  }}|D ]=}|j         |j        }}|r|                     ¦   «         nd }|dk    r|r|}Œ3|dk    r|r|}Œ>t          ||¦  «        S )NrÄ   r¾   r¿   )rw  rx  ry  r¼   )rA   rh  rÀ   rÁ   rˆ  rw  rx  s          r   rƒ  zXMLMenuBuilder.parse_moveø  sr   € Ø‰ˆˆSØð 	ð 	ˆEØœ	 5¤:�ˆCØ#'Ð1�4—:’:‘<”<�<¨TˆDØ�eŠ|ˆ| ˆ|Ø��Ø˜’� $�Ø�øÝ�C˜‰~Œ~Ðr   c                 óF  — |j         dk    rt          j        nt          j        }t	          j        dd¬¦  «        }|                      |t	          j        ¦   «         ¦  «        }|r||_        nt          d¦  «        |_        t	          j
        |¦  «         t          ||¦  «        S )Nrp  rp   r   )rÙ   rÚ   ÚFalse)rw  rÎ   rò   r÷   r   rÛ   Úparse_bool_opÚOrrØ   r   rà   )rA   rh  râ   rä   Úexprs        r   r~  zXMLMenuBuilder.parse_rule  sŽ   € Ø$(¤H°	Ò$9Ð$9�tÔ Ð ½tÔ?PˆÝŒ~ Q°1Ð5Ñ5Ô5ˆØ×!Ò! $­¬©¬Ñ1Ô1ˆØð 	,ØˆDŒIˆIå" 7Ñ+Ô+ˆDŒIÝÔ! $Ñ'Ô'Ð'Ý�D˜$ÑÔÐr   c                 óÜ   — g }|D ].}|                       |¦  «        }|r|                     |¦  «         Œ/t          |¦  «        }|dk    rt          j        ||¦  «        S |dk    r|d         S d S )Nrp   r   )Úparse_rule_noderI   rr   r   ÚBoolOp)rA   rh  ÚoperatorÚvaluesrˆ  rN   Ú
num_valuess          r   r�  zXMLMenuBuilder.parse_bool_op  s‚   € ØˆØð 	$ð 	$ˆEØ×'Ò'¨Ñ.Ô.ˆDØð $Ø—’˜dÑ#Ô#Ð#øÝ˜‘[”[ˆ
Ø˜Š>ˆ>Ý”:˜h¨Ñ/Ô/Ð/Ø˜1Š_ˆ_Ø˜!”9ÐØˆtr   c                 óð  — |j         }|dk    r'|                      |t          j        ¦   «         ¦  «        S |dk    r'|                      |t          j        ¦   «         ¦  «        S |dk    rQ|                      |t          j        ¦   «         ¦  «        }|r&t          j        t          j        ¦   «         |¦  «        nd S |dk    rt          d¦  «        S |dk    rŽ|j        }t          j	        t          j
        |¦  «        t          j        ¦   «         gt          j        t          j        dt          j        ¦   «         ¬¦  «        d	t          j        ¦   «         ¬
¦  «        g¬¦  «        S |dk    rŽ|j        }t          j	        t          j
        |¦  «        t          j        ¦   «         gt          j        t          j        dt          j        ¦   «         ¬¦  «        dt          j        ¦   «         ¬
¦  «        g¬¦  «        S d S )Nr�  ÚAndÚNotÚAllÚTrueÚCategoryrm   r   r  rÑ   rÔ   r0   ri   )rw  r�  r   r�  r™  ÚUnaryOprš  r   rx  rÜ   rÝ   ÚInrß   r   r   rÞ   )rA   rh  rw  r‘  Úcategoryrã   s         r   r“  zXMLMenuBuilder.parse_rule_node  sº  € ØŒ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Ø(Ýœ™
œ
ðñ ô ð ðñ ô ð ð Ðr   c                 ón   — t          ||t          ¦  «        }|r|j                             |¦  «         d S d S rD   )r6  r2  r6   rI   ©rA   rÒ   rã   r}   s       r   rz  zXMLMenuBuilder.parse_app_dirA  sA   € Ý  ¨µ(Ñ;Ô;ˆØð 	)ØŒN×!Ò! %Ñ(Ô(Ð(Ð(Ð(ð	)ð 	)r   c                 óž   — t          t          ¦  «        D ]7}|                      t          j                             |d¦  «        ||¦  «         Œ8d S )Nr  )Úreversedr   rz  ry   rt   rz   ©rA   rã   r}   r:  s       r   r{  z$XMLMenuBuilder.parse_default_app_dirF  sR   € Ý�-Ñ(Ô(ð 	Rð 	RˆAØ×Ò�rœwŸ|š|¨A¨~Ñ>Ô>ÀÈ&ÑQÔQÐQÐQð	Rð 	Rr   c                 ón   — t          ||t          ¦  «        }|r|j                             |¦  «         d S d S rD   )r6  r2  r9   rI   r¢  s       r   r|  z"XMLMenuBuilder.parse_directory_dirJ  sB   € Ý  ¨µ(Ñ;Ô;ˆØð 	/ØÔ ×'Ò'¨Ñ.Ô.Ð.Ð.Ð.ð	/ð 	/r   c                 óž   — t          t          ¦  «        D ]7}|                      t          j                             |d¦  «        ||¦  «         Œ8d S )Nr  )r¤  r   r|  ry   rt   rz   r¥  s       r   r}  z*XMLMenuBuilder.parse_default_directory_dirO  sT   € Ý�-Ñ(Ô(ð 	_ð 	_ˆAØ×$Ò$¥R¤W§\¢\°!Ð5JÑ%KÔ%KÈXÐW]Ñ^Ô^Ð^Ð^ð	_ð 	_r   c                 ó&  — |j                              dd ¦  «        dk    rÀt          D ]¶}|                     |d¦  «                             d¦  «        }||k    r…t          D ]}}||k    rŒ	t
          j                             t
          j                             ||¦  «        ¦  «        r7|  	                    t
          j                             ||¦  «        ||¦  «          nŒ~Œ·d S t          ||t          ¦  «        }|r|  	                    |||¦  «         d S d S )Nrâ   r}   r,   ro   )r  rV  r   r  ry  ry   rt   r5  rz   Ú
merge_filer6  r4  )rA   rÒ   rˆ  rã   r}   r:  Úrel_fileÚps           r   r€  zXMLMenuBuilder.parse_merge_fileU  s  € ØŒ<×Ò˜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ð 6r   c                 ó  — t          ||t          ¦  «        }|rrt          j        |¦  «        D ]_}	 |                     d¦  «        r5|                      t          j                             ||¦  «        ||¦  «         ŒN# t          $ r Y ŒZw xY wd S d S )NrS  )	r6  r2  ry   ÚlistdirrW  r©  rt   rz   ÚUnicodeDecodeError)rA   rÒ   rˆ  rã   r}   Úitems         r   r�  zXMLMenuBuilder.parse_merge_dire  s©   € Ý  ¨µ(Ñ;Ô;ˆØð 	Ýœ
 5Ñ)Ô)ð ð �ðØ—}’} WÑ-Ô-ð RØŸš­¬¯ª°U¸DÑ(AÔ(AÀ5È&ÑQÔQÐQøøÝ)ð ð ð Ø�Hðøøøð	ð 	ðð s   °A
A;Á;
BÂBc           	      ó,  — t           j                             t           j                             |¦  «        ¦  «        d         }t	          t
          ¦  «        D ]<}|                      t           j                             |d|dz   ¦  «        |||¦  «         Œ=d S )Nr   r�   z-merged)ry   rt   ÚsplitextÚbasenamer¤  r   r�  rz   )rA   rˆ  rã   r}   r²  r:  s         r   r‚  z'XMLMenuBuilder.parse_default_merge_dirso  sˆ   € Ý”7×#Ò#¥B¤G×$4Ò$4°XÑ$>Ô$>Ñ?Ô?ÀÔBˆÝ�/Ñ*Ô*ð 	jð 	jˆAØ× Ò ¥¤§¢¨a°¸(ÀYÑ:NÑ!OÔ!OÐQVÐX`ÐbhÑiÔiÐiÐið	jð 	jr   c                 ó„  — || j         v r| j        rt          d|¦  «        ‚d S | j                              |¦  «         	 t	          j        |¦  «        }nB# t          $ r | j        rt          d|¦  «        ‚Y d S  | j        rt          d|¦  «        ‚Y d S xY w|                     ¦   «         }|                      |||¦  «         d S )Nz Infinite MergeFile loop detectedrR  rT  )	rZ  rN  r   r“   rX  rY  ÚIOErrorr_  rg  )rA   rã   rˆ  r}   rä   Úroots         r   r©  zXMLMenuBuilder.merge_filet  så   € à�tÔ)Ð)Ð)ØŒzð Ý"Ð#EÀxÑPÔPÐPà�ØÔ×Ò˜xÑ(Ô(Ð(ð	Ý”;˜xÑ(Ô(ˆDˆDøÝð 	ð 	ð 	ØŒzð Ý"Ð#3°XÑ>Ô>Ð>à��ð	ØŒzð Ý"Ð#;¸XÑFÔFÐFà��øøøØ�|Š|‰~Œ~ˆØ�Š˜˜h¨Ñ/Ô/Ð/Ð/Ð/s   ¾A Á!BÁ7Bc                 óH   — |                       ||||¦  «        }|r||z  }d S d S rD   )Úmerge_legacy_dir)rA   r  r  rã   r}   Úms         r   r…  zXMLMenuBuilder.parse_legacy_dirŽ  s:   € Ø×!Ò! $¨°¸&ÑAÔAˆØð 	Ø�a‰KˆFˆFˆFð	ð 	r   c           	      ó‚  — t          ||t          ¦  «        }|�r#|| j        v�r| j                             |¦  «         t	          ¦   «         }|j                             |¦  «         |j                             |¦  «         t          j	         
                    |¦  «        |_        d|_        t          j        |¦  «        D ]º}	 |dk    r|j                             |¦  «         n†t          j	                             t          j	                             ||¦  «        ¦  «        rI|                     |                      t          j	                             ||¦  «        |||¦  «        ¦  «         Œ«# t&          $ r Y Œ·w xY w| j                             |g|d¦  «         | j                             |gd¦  «        }|D ]…}|j        }	t1          |	¦  «        dk    rDt2                               t2          j        |j        ¦  «        }
|j                             |
¦  «         ||j        vr|	                     d¦  «         |	|_        Œ†|S d S d S )NTz
.directoryFr   ÚLegacy)r6  r2  r[  r“   r*   r6   rI   r9   ry   rt   r²  r   r3   r­  r8   r3  rz   rJ   r·  r®  r]  Úadd_menu_entriesÚget_menu_entriesr  rr   rÎ   rå   rò   ri   r>   )rA   r  r  rã   r}   r¸  r¯  rô   rm   Ú
categoriesÚrs              r   r·  zXMLMenuBuilder.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Å6E7c                 óZ  — 	 t          j        g d¢t           j        d¬¦  «        }|                     ¦   «         d                              ¦   «         }n# t
          $ r Y d S w xY w	 |d                              d¦  «        D ]}|                      |d||¦  «         Œd S # t          $ r Y d S w xY w)N)z
kde-configz--pathÚappsT)ÚstdoutÚuniversal_newlinesr   ú:Úkde)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
splitlinesÚOSErrorrq   r…  Ú
IndexError)rA   rã   r}   ÚprocÚoutputr  s         r   r†  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$   ‚AA Á
A ÁA Á$6B Â
B*Â)B*c                 ó  — |j         €d|_         |j        €d|_        |j        r|j        s |j        r|j        |_        nŒ|j        r1|j        dk    r|j        j        |_        nht          ¦   «         |_        nT|j        dk    r#|j        j        |_        |j        j        |_        n&t          ¦   «         |_        t          ¦   «         |_        |j        dk    r2|j        j        |j        z   |_        |j        j        |j        z   |_        t          |j	        ¦  «        |_	        t          |j        ¦  «        |_        t          |j        ¦  «        |_        |j
        D ]}|                      |¦  «         Œ|j	                             ¦   «          |j                             ¦   «          |j                             ¦   «          |j	        D ]Ç}|j        D ]³}t          j                             t          j                             ||¦  «        ¦  «        rtt#          ||¦  «        }|j        s||_        Œ^|                     ¦   «         t"          j        k    r3|j                             ¦   «         t"          j        k    r||j        _        Œ´|j        r d S ŒÈd S )NFr   )r#   r=   r:   r7   r1   r2   r6   r9   rJ  r8   r?   ra  rw   ry   rt   r5  rz   r—   r-   r  r  r  r   )rA   re  rP   rM   rL   rm   s         r   ra  zXMLMenuBuilder.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øØŒ~ð Ø��ðð
	ð 
	r   c                 ó¶  — |j         D ]}|                      |¦  «         Œ|j        du r®| j                             |j        ¦  «         g }|j        D ]5}|                     | j                             |j        ¦  «        d¦  «        }Œ6|D ]O}|j	        du rB|j
                             |¦  «         d|_	        d|_        |j                             |¦  «         ŒNd S d S )NFrp   T)r?   rb  r=   r]  r»  r6   r>   rö   r¼  ró   r  rI   rñ   r;   ©rA   re  rP   rô   rN   rm   s         r   rb  z*XMLMenuBuilder.generate_not_only_allocated  sü   € Ø”}ð 	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ð 7r   c                 óš  — |j         D ]}|                      |¦  «         Œ|j        du r | j                             |j        ¦  «         g }|j        D ]5}|                     | j                             |j        ¦  «        d¦  «        }Œ6|D ]A}|j	        du r4|j
                             |¦  «         |j                             |¦  «         Œ@d S d S )NTrï   )r?   rc  r=   r]  r»  r6   r>   rö   r¼  ró   r  rI   r;   rÐ  s         r   rc  z&XMLMenuBuilder.generate_only_allocated  sï   € Ø”}ð 	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ð 7r   c                 óš  — |j         D ]}|                      |¦  «         Œ|j        D �]"}|                     |j        ¦  «        }|�r|                     |j        ¦  «        }|j                             d¦  «        }d }t          |¦  «        dk    r•|s|}|                     |d         ¦  «        }|sJt          ¦   «         }|d         |_	        t          |¦  «        dk    rd|_
        |                     |¦  «         |}|                     d¦  «         t          |¦  «        dk    °•||z  }|j        j                              |¦  «         �Œ$d S )Nro   r   rp   T)r?   r`  r<   rs   r¾   r¿   rq   rr   r*   r   r3   rJ   rx   r2   r§   )	rA   re  rP   rO   Úmove_from_menuÚmove_to_menur�   Ú	oldparentr¬   s	            r   r`  zXMLMenuBuilder.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ð 	Fr   rµ   rD   )r¶   r·   r¸   rB   rY  r^  rg  r„  rƒ  r~  r�  r“  rz  r{  r|  r}  r€  r�  r‚  r©  r…  r·  r†  ra  rb  rc  r`  rº   r   r   rL  rL  b  sŸ  € € € € € ðð ð ð ð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ðr7ð 7ð 7ð"7ð 7ð 7ð Fð Fð Fð Fð Fr   rL  c                   ó.   — e Zd ZdZd„ Zd
d„Zd„ Zdd„Zd	S )r\  zClass to cache Desktop Entriesc                 ó6   — i | _         g | j         d<   i | _        d S )NÚlegacy)ÚcacheEntriesr]  r@   s    r   rB   zMenuEntryCache.__init__C  s"   € ØˆÔØ&(ˆÔ˜(Ñ#ØˆŒ
ˆ
ˆ
r   r,   Fc                 óf   — |D ]-}|| j         vr"g | j         |<   |                      |d||¦  «         Œ.d S )Nr,   )rÙ  Ú_MenuEntryCache__addFiles)rA   r9  r  rØ  r  s        r   r»  zMenuEntryCache.add_menu_entriesH  sO   € Øð 	:ð 	:ˆDØ˜4Ô,Ð,Ð,Ø*,�Ô! $Ñ'Ø—’  b¨&°&Ñ9Ô9Ð9øð	:ð 	:r   c                 ó’  — t          j        t           j                             ||¦  «        ¦  «        D �]}|                     d¦  «        r„	 t          t           j                             ||¦  «        ||¦  «        }n# t          $ r Y ŒUw xY w| j        |                              |¦  «         |r | j        d                              |¦  «         Œœt           j         	                    t           j                             |||¦  «        ¦  «        r8|s6|  
                    |t           j                             ||¦  «        ||¦  «         �Œd S )Nz.desktoprØ  )ry   r­  rt   rz   rW  r—   r   rÙ  rI   r3  rÛ  )rA   r  Úsubdirr  rØ  r¯  rm   s          r   Ú
__addFileszMenuEntryCache.__addFilesN  s4  € Ý”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ð 	Rs   Á/A<Á<
B	ÂB	Tc                 óp  — g }t          ¦   «         }|d d …         }|r|                     d¦  «         d                     |¦  «        }	 | j        |         S # t          $ r Y nw xY w|D ]Ä}| j        |         D ]´}	 |j        |vr0|                     |j        ¦  «         |                     |¦  «         nh|                     ¦   «         t          j
        k    rF|                     |¦  «        }	||	         }
|
                     ¦   «         t          j        k    r||
_        Œ¥# t          $ r Y Œ±w xY wŒÅ|| j        |<   |S )NrØ  r,   )r‘   rI   rz   r]  ÚKeyErrorrÙ  ri   r“   r  r—   r  Úindexr  r   r®  )rA   r9  rØ  ÚentriesÚidsÚappdirsÚkeyr  rm   Úidxrf   s              r   r¼  zMenuEntryCache.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¹   rB   r»  rÛ  r¼  rº   r   r   r\  r\  A  sc   € € € € € Ø$Ð$ðð ð ð
:ð :ð :ð :ðRð Rð Rðð ð ð ð ð r   r\  Fc                 óF   — t          |¦  «                             | ¦  «        S )zYHelper function.
    Equivalent to calling xdg.Menu.XMLMenuBuilder().parse(filename)
    )rL  rY  )rã   rN  s     r   rY  rY  {  s    € õ ˜%Ñ Ô ×&Ò& xÑ0Ô0Ð0r   r.  )1r¹   ry   r   rÅ  r   r   Úxml.etree.cElementTreerX  ÚcElementTreeÚImportErrorÚxml.etree.ElementTreeÚElementTreeÚxdg.BaseDirectoryr   r   Úxdg.DesktopEntryr   Úxdg.Exceptionsr   Úxdg.utilr   Ú
xdg.LocalerŸ   Ú
xdg.Configr   r"   r–   r™   r›   r¦   r¤   rž   r*   r¼   r:   rÎ   r—   rŠ   r³   r2  r4  r6  r<  rA  rJ  ÚobjectrL  r\  rY  rº   r   r   ú<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ðt1ð 1ð 1ð 1ð 1ð 1s   ˜	" ¢3²3