+
    ni6D  c                   sh    R t ^ RIHtHt ^ RIt^ RIHt ^ RIH	t	 ^ RI
t^ RIt^ RIt ! R R]4      tR# )a/  
Complete implementation of the XDG Desktop Entry Specification
http://standards.freedesktop.org/desktop-entry-spec/

Not supported:
- Encoding: Legacy Mixed
- Does not check exec parameters
- Does not check URL's
- Does not completly validate deprecated/kde items
- Does not completly check categories
)IniFileis_asciiN)ParsingError)whichc                   sv  a  ] tR t^t o RtRtR<R ltR tR tR t	R t
R	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t R t!R  t"R! t#R" t$R# t%R$ t&R% t'R& t(R' t)R( t*R) t+R* t,R+ t-R, t.R- t/R. t0R/ t1R0 t2R1 t3R2 t4R3 t5R4 t6R5 t7R6 t8R7 t9R8 t:R9 t;R: t<R;t=V t>R# )=DesktopEntryz+Class to parse and validate Desktop EntriesDesktop EntryNc                s    \        4       V n        V'       d9   \        P                  P	                  V4      '       d   V P                  V4       R# V'       d   V P                  V4       R# R# )zCreate a new DesktopEntry.

If filename exists, it will be parsed as a desktop entry file. If not,
or if filename is None, a blank DesktopEntry is created.
N)dictcontentospathZexistsparsenew)selffilename   &&5/usr/lib/python3.14/site-packages/xdg/DesktopEntry.py__init__ZDesktopEntry.__init__   sB     vx00JJx HHX     c                s"    V P                  4       # N)getNamer      &r   __str__ZDesktopEntry.__str__&   s    ||~r   c                s8    \         P                  ! WRR.4       R# )zParse a desktop entry file.

This can raise :class:`~xdg.Exceptions.ParsingError`,
:class:`~xdg.Exceptions.DuplicateGroupError` or
:class:`~xdg.Exceptions.DuplicateKeyError`.
r   KDE Desktop EntryN)r    r
   )r   Zfiler   r   r
   ZDesktopEntry.parse)   s     	d?4G"HIr   c                s>    V P                  RRR7      p\        V4      # )zLooks in the PATH for the executable given in the TryExec field.

Returns the full path to the executable if it is found, None if not.
Raises :class:`~xdg.Exceptions.NoKeyError` if TryExec is not present.
TryExecT)Zstrict)getr   )r   Ztryexecs   & r   findTryExecZDesktopEntry.findTryExec2   s      ((9T(2W~r   c                $    V P                  R 4      # )Typer   r   r   r   getTypeZDesktopEntry.getType<       xxr   c                s(    V P                  RRR7      # )z)deprecated, use getVersionString instead Versionnumerictyper   r   r   r   
getVersionZDesktopEntry.getVersion>   s    xx		x22r   c                r   )r    r   r   r   r   getVersionStringZDesktopEntry.getVersionStringA       xx	""r   c                (    V P                  R RR7      # )NameTlocaler   r   r   r   r   ZDesktopEntry.getNameC       xxtx,,r   c                r'   )ZGenericNameTr)   r   r   r   r   getGenericNameZDesktopEntry.getGenericNameE       xxdx33r   c                r'   )	NoDisplaybooleanr"   r   r   r   r   getNoDisplayZDesktopEntry.getNoDisplayG   s    xx)x44r   c                r'   )ZCommentTr)   r   r   r   r   
getCommentZDesktopEntry.getCommentI   s    xx	$x//r   c                r'   )ZIconTr)   r   r   r   r   getIconZDesktopEntry.getIconK   r+   r   c                r'   )Hiddenr/   r"   r   r   r   r   	getHiddenZDesktopEntry.getHiddenM   s    xxyx11r   c                r'   )
OnlyShowInTlistr   r   r   r   getOnlyShowInZDesktopEntry.getOnlyShowInO       xx4x00r   c                r'   )	NotShowInTr6   r   r   r   r   getNotShowInZDesktopEntry.getNotShowInQ       xx$x//r   c                r   )r   r   r   r   r   
getTryExecZDesktopEntry.getTryExecS   r&   r   c                r   )Execr   r   r   r   getExecZDesktopEntry.getExecU   r   r   c                r   )Pathr   r   r   r   getPathZDesktopEntry.getPathW   r   r   c                r'   )Terminalr/   r"   r   r   r   r   getTerminalZDesktopEntry.getTerminalY       xx
x33r   c                s*    V P                  RRRR7      # )z%deprecated, use getMimeTypes instead MimeTypeTregex)r7   r#   r   r   r   r   getMimeTypeZDesktopEntry.getMimeType[   s    xx
Gx<<r   c                r'   )rE   Tr6   r   r   r   r   getMimeTypesZDesktopEntry.getMimeTypes^   s    xx
x..r   c                r'   )
CategoriesTr6   r   r   r   r   getCategoriesZDesktopEntry.getCategories`   r9   r   c                r'   )StartupNotifyr/   r"   r   r   r   r   getStartupNotifyZDesktopEntry.getStartupNotifyb   s    xxix88r   c                r   )StartupWMClassr   r   r   r   getStartupWMClassZDesktopEntry.getStartupWMClassd   s    xx())r   c                r   )URLr   r   r   r   getURLZDesktopEntry.getURLf       xxr   c                r'   )ServiceTypesTr6   r   r   r   r   getServiceTypesZDesktopEntry.getServiceTypesk   s    xxTx22r   c                r   )DocPathr   r   r   r   
getDocPathZDesktopEntry.getDocPathm   r&   r   c                s*    V P                  R RRR7      # )ZKeywordsT)r7   r*   r   r   r   r   getKeywordsZDesktopEntry.getKeywordso   s    xx
dx;;r   c                r   )InitialPreferencer   r   r   r   getInitialPreferenceZ!DesktopEntry.getInitialPreferenceq   s    xx+,,r   c                r   )Devr   r   r   r   getDevZDesktopEntry.getDevs   rQ   r   c                r   )FSTyper   r   r   r   	getFSTypeZDesktopEntry.getFSTypeu   s    xx!!r   c                r   )
MountPointr   r   r   r   getMountPointZDesktopEntry.getMountPointw       xx%%r   c                r'   )ReadOnlyr/   r"   r   r   r   r   getReadonlyZDesktopEntry.getReadonlyy   rD   r   c                r'   )ZUnmountIconTr)   r   r   r   r   getUnmountIconZDesktopEntry.getUnmountIcon{   r-   r   c                r'   )ZMiniIconTr)   r   r   r   r   getMiniIconZDesktopEntry.getMiniIcon   s    xx
4x00r   c                r   )TerminalOptionsr   r   r   r   getTerminalOptionsZDesktopEntry.getTerminalOptions   s    xx)**r   c                r   )
DefaultAppr   r   r   r   getDefaultAppZDesktopEntry.getDefaultApp   r_   r   c                r'   )	ProtocolsTr6   r   r   r   r   getProtocolsZDesktopEntry.getProtocols   r<   r   c                r'   )
ExtensionsTr6   r   r   r   r   getExtensionsZDesktopEntry.getExtensions   r9   r   c                r   )BinaryPatternr   r   r   r   getBinaryPatternZDesktopEntry.getBinaryPattern   s    xx((r   c                r   )	MapNotifyr   r   r   r   getMapNotifyZDesktopEntry.getMapNotify   s    xx$$r   c                r   )Encodingr   r   r   r   getEncodingZDesktopEntry.getEncoding   s    xx
##r   c                r'   )ZSwallowTitleTr)   r   r   r   r   getSwallowTitleZDesktopEntry.getSwallowTitle   s    xxtx44r   c                r   )SwallowExecr   r   r   r   getSwallowExecZDesktopEntry.getSwallowExec   s    xx&&r   c                r'   )	SortOrderTr6   r   r   r   r   getSortOrderZDesktopEntry.getSortOrder   r<   r   c                r'   )FilePatternrF   r"   r   r   r   r   getFilePatternZDesktopEntry.getFilePattern   s    xxGx44r   c                r'   )ActionsTr6   r   r   r   r   
getActionsZDesktopEntry.getActions   s    xx	x--r   c                sZ   \         P                  P                  V4      ^,          R8X  d   RpM:\         P                  P                  V4      ^,          R8X  d   RpM\        RV4      h\	        4       V n        V P                  V P                  4       V P                  RV4       Wn	        R# )zMake this instance into a new, blank desktop entry.

If filename has a .desktop extension, Type is set to Application. If it
has a .directory extension, Type is Directory. Other extensions will
cause :class:`~xdg.Exceptions.ParsingError` to be raised.
.desktopApplication
.directory	DirectoryzUnknown extensionr   N)
r   r	   Zsplitextr   r   r   ZaddGroupdefaultGroupZsetr   )r   r   r#   s   && r   r   ZDesktopEntry.new   s     77H%a(J6 DWWh'*l:D2H==vd''( r   c                s   V P                   R 8X  d   V P                  P                  R4       V P                  R8X  d   V P                  P                  R4       M=V P                  R8w  d-   V P                  R8w  d   V P                  P                  R4        V P                  V P                   ,          R,          V n         V P                  V P                   ,          R	,          V n        R#   \         d    T P                  P                  R4        LTi ; i  \         d     T P                  P                  R
4        R# i ; i)r   z([KDE Desktop Entry]-Header is deprecatedz.kdelnkz$File extension .kdelnk is deprecatedr{   r}   zUnknown File extensionr   zKey 'Type' is missingr(   zKey 'Name' is missingN)	r   warningsappendfileExtensionr   r#   ZKeyErrorerrorsnamer   r   r   checkExtrasZDesktopEntry.checkExtras   s     33MM  !KL *MM  !GH:-$2D2D2TMM  !9:	8T%6%67?DI
	8T%6%67?DI  	8KK67	8  	8KK67	8s$   )C- )D -&DD&EEc                s   WP                   8X  gp   \        P                  ! R V4      '       gS   \        P                  ! RV4      '       d   \        V4      '       g%   V P                  P                  RV,          4       R# RV P                  V,          9   d8   RV P                  V,          9   d   V P                  P                  R4       R# R# R# )z^Desktop Action [a-zA-Z0-9-]+$z^X-zInvalid Group name: %sr5   r:   z;Group may either have OnlyShowIn or NotShowIn, but not bothN)r   rematchr   r   r   r   )r   groupr   r   
checkGroupZDesktopEntry.checkGroup   s    ***884e<<HHUE""xKK7%?@ U 33+V[I\:\""#`a ;]3r   c                s   VR 8X  Ed{   VR8X  g   VR8X  g   VR8X  d$   V P                   P                  RV,          4       MZVR8X  d   V P                   P                  R4       M7VR8X  g1   VR8X  g*   VR	8X  g#   V P                  P                  R
V,          4       V P                  R8X  d+   VR	8X  g$   V P                   P                  RV,          4       M3V P                  R8X  d#   VR	8X  d   V P                   P                  R4       VR8X  d4   RV P                  V,          9  d   V P                   P                  R4       VR8X  d8   RV P                  V,          9  d   V P                   P                  R4       RE# RE# RE# VR8X  d   V P                  W4       RE# \        P                  ! R\        P                  P                  ,           R,           V4      '       d   RE# \        P                  ! R\        P                  P                  ,           R,           V4      '       d   RE# VR8X  d   V P                  WRR7       RE# \        P                  ! R\        P                  P                  ,           R,           V4      '       d   RE# \        P                  ! R\        P                  P                  ,           R,           V4      '       d   V P                  W4       RE# VR8X  d   V P                  WRR7       RE# VR8X  d'   V P                  WRR7       V P                  V4       RE# VR 8X  d'   V P                  WRR7       V P                  V4       RE# VR!8X  d&   V P                  W4       V P                  VR4       RE# VR8X  d&   V P                  W4       V P                  VR4       RE# VR"8X  d&   V P                  W4       V P                  VR4       RE# VR#8X  d(   V P                  WRR7       V P                  VR4       RE# VR$8X  d(   V P                  WRR7       V P                  VR4       RE# VR8X  d(   V P                  WRR7       V P                  VR4       RE# VR%8X  d7   V P                  W4       V P                  VR4       V P                  V4       RE# \        P                  ! R&\        P                  P                  ,           R,           V4      '       d)   V P                  WR'RR(7       V P                  VR4       RE# VR)8X  d(   V P                  WRR7       V P                  VR4       RE# VR*8X  d   V P                  VR4       RE# VR8X  d&   V P                  W4       V P                  VR4       RE# VR+8X  d8   V P                  WRR7       V P                   P                  R,V,          4       RE# VR-8X  d6   V P                  W4       V P                   P                  R,V,          4       RE# VR.8X  d8   V P                  WR/R7       V P                   P                  R,V,          4       RE# VR08X  dH   V P                  W4       V P                  VR4       V P                   P                  R,V,          4       RE# VR18X  dH   V P                  W4       V P                  VR4       V P                   P                  R,V,          4       RE# VR28X  dH   V P                  W4       V P                  VR4       V P                   P                  R,V,          4       RE# VR38X  dJ   V P                  WRR7       V P                  VR4       V P                   P                  R,V,          4       RE# \        P                  ! R4\        P                  P                  ,           R,           V4      '       dH   V P                  W4       V P                  VR4       V P                   P                  R,V,          4       RE# VR58X  d6   V P                  W4       V P                   P                  R6V,          4       RE# \        P                  ! R7\        P                  P                  ,           R,           V4      '       d6   V P                  W4       V P                   P                  R6V,          4       RE# VR88X  d6   V P                  W4       V P                   P                  R6V,          4       RE# VR98X  d6   V P                  W4       V P                   P                  R6V,          4       RE# VR:8X  d8   V P                  WRR7       V P                   P                  R6V,          4       RE# VR;8X  d8   V P                  WRR7       V P                   P                  R6V,          4       RE# VR<8X  d6   V P                  W4       V P                   P                  R6V,          4       RE# VR=8X  d6   V P                  W4       V P                   P                  R6V,          4       RE# \        P                  ! R>\        P                  P                  ,           R,           V4      '       d%   V P                   P                  R6V,          4       RE# VR?8X  d6   V P                  W4       V P                   P                  R6V,          4       RE# VR@8X  d9   V P                  WRARR(7       V P                   P                  R6V,          4       RE# VRB8X  d8   V P                  WRR7       V P                   P                  R6V,          4       RE# \        P                  ! RCV4      '       d   RE# V P                  P                  RDV,          4       RE# )Fr   ZServiceTypeZServiceZFSDevicezType=%s is a KDE extensionrE   zType=MimeType is deprecatedr|   ZLinkr~   zGValue of key 'Type' must be Application, Link or Directory, but is '%s'r}   z.File extension is .directory, but Type is '%s'r{   z>Files with Type=Directory should have the extension .directoryr>   z!Type=Application needs 'Exec' keyrO   zType=Link needs 'URL' keyr    z^NameZ$z^GenericNamer.   r/   r"   z^Commentz^Iconr3   r5   Tr6   r:   r   r@   rB   ry   rI   z	^KeywordsZlocalestring)r#   r7   rK   rM   rR   zKey '%s' is a KDE extensionrT   rW   r!   rY   r[   r]   r`   z^UnmountIconrp   zKey '%s' is deprecatedz	^MiniIconrd   rf   rh   rj   rl   rn   z^SwallowTitlers   rw   rF   ru   z^X-[a-zA-Z0-9-]+zInvalid key: %sN)r   r   r   r   r   Z
checkValuer   r   xdgZLocalerF   checkOnlyShowIn	checkTypecheckCategories)r   keyvaluer   s   &&&&r   checkKeyZDesktopEntry.checkKey   sn   &=%));u
?R$$%AC%GH*$$$%BC},5KCW""#lot#tu!!\1%;:N$$%UX]%]^##z1e{6J$$%ef%e!44MM(()LMU 33MM(()DE 4  IOOC'XXgcjj...s2C88XXnSZZ%5%55c93??KOOCYO7XXj!1!11#5s;;XXgcjj...s2C88OOC'H_OOCYO7L OOCTO2  'KOOCTO2  'IOOC'NN3.F]OOC'NN3.F]OOC'NN3.JOOCYO7NN3.IOOCTO2NN3.JOOCTO2NN3.L OOC'NN3.  'XXk#**"2"2236<<OOC^$OGNN3.O#OOCYO7NN3.$$NN3.E\OOC'NN3& N"OOCTO2MM  !>!DEIOOC'MM  !>!DE''OOCYO7MM  !>!DEE\OOC'NN3
+MM  !>!DEH_OOC'NN3
+MM  !>!DEL OOC'NN3
+MM  !>!DEJOOCYO7NN3
+MM  !>!DEXXnSZZ%5%55c93??OOC'NN3
+MM  !>!DE JOOC'MM  !9C!?@XXk#**"2"2236<<OOC'MM  !9C!?@%%OOC'MM  !9C!?@L OOC'MM  !9C!?@KOOCTO2MM  !9C!?@L OOCTO2MM  !9C!?@O#OOC'MM  !9C!?@KOOC'MM  !9C!?@XXocjj&6&66s:C@@MM  !9C!?@M!OOC'MM  !9C!?@M!OOCW4O@MM  !9C!?@KOOCTO2MM  !9C!?@ XX(#.. KK0367r   c                sz    V P                  4       V8X  g&   V P                  P                  R V: RV: 24       R# R# )zKey 'z' only allowed in Type=N)r   r   r   )r   r   r#   s   &&&r   r   ZDesktopEntry.checkType  s,    ||~%KKS$OP &r   c                s    V P                  V4      p. ROpV F=  pWC9  g   K  VR,          R8w  g   K  V P                  P                  RV,          4       K?  	  R# )GNOME:i    i   NX-z)'%s' is not a registered OnlyShowIn valueN)
r   KDEZLXDEZMATEZRazorZROXZTDEZUnityXFCEZOld)getListr   r   )r   r   valuesZvaliditems   &&   r   r   ZDesktopEntry.checkOnlyShowIn  sK    e$ D T#Y$%6""#NQU#UV r   c                s  a V P                  V4      p. ROo\        ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       g   V P                  P                  R4       . RNRNRNRNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NR8NR9NR:NR;NR<NR=NR>NR?NR@NRANRBNRCNRDNRENRFNRGNRHNRINRJNRKNRLNRMNRNNRONRPNRQNRRNRSNRTNRUNRVNRWNRXNRYNRZNR[NR\NR]NR^NR_NR`NRaNRbNRcNRdNReNRfNRgNRhNRiNRjNRkNRlNRmNRnNRoNRpNRqNRrNRsNRtNRuNRvNRwNRxNRyNRzNR{NR|NR}NR~NRNRNRNRNpVS,           pV FF  pWT9  g   K  VP	                  R4      '       d   K$  V P                  P                  RV,          4       KH  	  R# )
AudioVideoc              3   s,   <"   T F	  qS9   x  K  	  R # 5ir    )Z.0r   mains   & r   Z	<genexpr>Z/DesktopEntry.checkCategories.<locals>.<genexpr>  s     3FD4<Fs   TFzMissing main categoryZBuildingZDebuggerZIDEZGUIDesignerZ	ProfilingZRevisionControlZTranslationZCalendarZContactManagementZDatabaseZ
DictionaryZChartZEmailZFinanceZ	FlowChartZPDAZProjectManagementZPresentationZSpreadsheetZWordProcessorZ
2DGraphicsZVectorGraphicsZRasterGraphicsZ
3DGraphicsZScanningZOCRZPhotographyZ
PublishingZViewerZ	TextToolsZDesktopSettingsZHardwareSettingsZPrintingZPackageManagerZDialupZInstantMessagingZChatZ	IRCClientZFeedZFileTransferZHamRadioZNewsZP2PZRemoteAccessZ	TelephonyZTelephonyToolsZVideoConferenceZ
WebBrowserZWebDevelopmentZMidiZMixerZ	SequencerZTunerZTVZAudioVideoEditingZPlayerZRecorderZDiscBurningZ
ActionGameZAdventureGameZ
ArcadeGameZ	BoardGameZ
BlocksGameZCardGameZKidsGameZ	LogicGameZRolePlayingZShooterZ
SimulationZ
SportsGameZStrategyGameZArtZConstructionZMusicZ	LanguagesZArtificialIntelligenceZ	AstronomyZBiologyZ	ChemistryZComputerScienceZDataVisualizationZEconomyZElectricityZ	GeographyZGeologyZ
GeoscienceZHistoryZ
HumanitiesZImageProcessingZ
LiteratureZMapsZMathZNumericalAnalysisZMedicalSoftwareZPhysicsZRoboticsZSpiritualityZSportsZParallelComputingZ	AmusementZ	ArchivingZCompressionZElectronicsZEmulatorZEngineeringZ	FileToolsZFileManagerZTerminalEmulatorZ
FilesystemZMonitorZSecurityZAccessibilityZ
CalculatorZClockZ
TextEditorZDocumentationZAdultZCorer   r   r   ZGTKZQtZMotifZJavaZConsoleOnlyr   z!'%s' is not a registered CategoryN)r   ZAudioZVideoZDevelopmentZ	EducationZGameZGraphicsZNetworkZOfficeZScienceZSettingsZSystemZUtility)r   Zanyr   r   Z
startswith)r   r   r   Z
additionalZallcategoriesr   r   s   &&    @r   r   ZDesktopEntry.checkCategories  s   e$ as3F3sss3F333KK67 cj  c*  ce  c]  cK  cQb  cdq  cs}  c  @S  c  U_  c  am  c  ov  c  x  c  AJ  c  LW  c  Y^  c  `s  c  uC  c  ER  c  Tc  c  eq  c  sC  c  EU  c  Wc  c  eo  c  qv  c  xE  c  GS  c  U]  c  _j  c  l}  c  Q  c  S]  c  _o  c  qy  c  {M  c  OU  c  Wb  c  dj  c  lz  c  |F	  c  H	N	  c  P	U	  c  W	e	  c  g	r	  c  t	D
  c  F
W
  c  Y
e
  c  g
w
  c  y

  c  AH  c  JU  c  W^  c  `d  c  fy  c  {C  c  EO  c  Q^  c  `l  c  n}  c  K  c  MX  c  Zf  c  hr  c  t~  c  @K  c  MZ  c  \e  c  gs  c  uA  c  CQ  c  SX  c  Zh  c  jq  c  s~  c  @X  c  Ze  c  gp  c  r}  c  P  c  Re  c  gp  c  r  c  AL  c  NW  c  Ye  c  gp  c  r~  c  @Q  c  S_  c  ag  c  io  c  qD  c  FW  c  Yb  c  dn  c  p~  c  @H  c  J]  c  _j  c  lw  c  yF  c  HU  c  Wa  c  cp  c  r}  c  L  c  N`  c  bn  c  py  c  {E  c  GV  c  Xd  c  fm  c  o{  c  }L  c  NU  c  W]  c  _d  c  fm  c  ou  c  w|  c  ~B  c  DK  c  MS  c  Ub  c
"T)D(1F1F""#F#MN r   c                sZ    \         P                  ! R\        4       V P                  V4      # )zPDeprecated alias for checkCategories - only exists for backwards
compatibility.
z1checkCategorie is deprecated, use checkCategories)r   ZwarnZDeprecationWarningr   )r   r   r   r   checkCategorieZDesktopEntry.checkCategorie  s(     	I<N	P##E**r   )r   r   r   r#   r   )?Z__name__Z
__module__Z__qualname__Z__firstlineno____doc__r   r   r   r
   r   r   r$   r%   r   r,   r0   r1   r2   r4   r8   r;   r=   r?   rA   rC   rG   rH   rJ   rL   rN   rP   rS   rU   rV   rX   rZ   r\   r^   ra   rb   rc   re   rg   ri   rk   rm   ro   rq   rr   rt   rv   rx   rz   r   r   r   r   r   r   r   r   Z__static_attributes__Z__classdictcell__)Z__classdict__s   @r   r   r      s,    1"L
J 3#-450-210#  4=/19*
3#<-"&44
1+&01)%$5'05.
!*8.	bz8xQXP+ +r   r   )r   Zxdg.IniFiler    r   Z
xdg.Localer   Zxdg.Exceptionsr   Zxdg.utilr   Zos.pathr   r   r   r   r   r   r   <module>r      s/   
 *  '   	 [+7 [+r   