
    ^hM                        S SK r S SKrS SKrS SKJr  \R
                  " S5      r\R
                  " S5      r\R
                  " S5      r\R
                  " S5      r	S r
SrSrS	r " S
 S\5      r " S S5      r\ R"                   " S S5      5       rS rS rS rS rS rS r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\" 5       r " S  S!\5      r\" 5       r  " S" S#\5      r!\!" 5       r" " S$ S%\5      r#\RH                  4S& jr%\" S'5      \" S'5      \" S(5      \" S(5      \" S)5      \" S)5      \" S*5      \" S+5      \" S,S-5      \\" S.5      \" S.5      S/.r&g)0    N)lockz^\s*!z#^\s*([-_a-zA-Z0-9?.*]+)\s*:\s*(.*)$z\\([ 	n\\]|[0-7]{3,3})z([.*]+)         c                       \ rS rSrSrg)OptionError/    N)__name__
__module____qualname____firstlineno____static_attributes__r
       :/var/www/html/env/lib/python3.13/site-packages/Xlib/rdb.pyr   r   /   s    r   r   c                   X    \ rS rSrSS jrS rS rS rS rS r	SS	 jr
S
 rS rS rSrg)
ResourceDB3   Nc                     0 U l         [        R                  " 5       U l        Ub  U R                  U5        Ub  U R	                  U5        Ub  U R                  U5        g g N)dbr   allocate_lockinsert_fileinsert_stringinsert_resources)selffilestring	resourcess       r   __init__ResourceDB.__init__4   sZ    &&(	T"v& !!), !r   c                 ~    [        U5      [        L a  [        US5      nU R                  UR	                  5       5        g)zinsert_file(file)

Load resources entries from FILE, and insert them into the
database.  FILE can be a filename (a string)or a file object.

rN)typestropenr   read)r   r   s     r   r   ResourceDB.insert_file?   s/     :c?D499;'r   c                    UR                  S5      nU(       Ga<  US   nUS	 U(       d  M  [        R                  U5      (       a  M5  US   S:X  a'  U(       a  USS US   -   nUS	 OUSS nOUS   S:X  a  M'  [        R                  U5      nU(       d  M  UR	                  SS5      u  pV[
        R                  U5      n[        S[        U5      S5       H;  nXx   n	[        U	5      S:X  a  [        [        U	S	5      5      Xx'   M/  U	S
:X  d  M7  SXx'   M=     US   R                  5       US'   SR                  U5      nU R                  XV5        U(       a  GM;  gg)zYinsert_string(data)

Insert the resources entries in the string DATA into the
database.


r   \N   r         n )split
comment_rematchresource_spec_regroupvalue_escape_rerangelenchrintrstripjoininsert)
r   datalineslinemresvaluesplitsiss
             r   r   ResourceDB.insert_stringM   sI    

4 8Da  %% r(d"9uQx/Da9D r(d" !&&t,A AJC %**51F1c&k1-Iq6Q; #C1IFI#X $FI .  **,F2JGGFOEKK#] er   c                 <    U H  u  p#U R                  X#5        M     g)zinsert_resources(resources)

Insert all resources entries in the list RESOURCES into the
database.  Each element in RESOURCES should be a tuple:

  (resource, value)

Where RESOURCE is a string and VALUE can be any Python value.

N)r>   )r   r   rC   rD   s       r   r   ResourceDB.insert_resources   s     $JCKK# $r   c                    [         R                  U5      nUS   S:X  a  gU R                  R                  5         U R                  n[        S[        U5      S5       H>  nX5S-
     U;  a  0 0 4XCUS-
     '   SX5   ;   a  XCUS-
        S   nM1  XCUS-
        S   nM@     US   U;   a  XCS      SS U4-   XCS   '   O
0 0 U4XCS   '   U R                  R                  5         g)z~insert(resource, value)

Insert a resource entry into the database.  RESOURCE is a
string and VALUE can be any Python value.

r+   r1   Nr-   r   *r   )resource_parts_rer2   r   acquirer   r8   r9   release)r   resourcerD   partsr   rF   s         r   r>   ResourceDB.insert   s     "''1 9?		WWq#e*a(A U|2%$&8Q<  eha!e%a(a!e%a( ) 9?RyM"1-	9BRyMUOBRyM		r   c           	         Uu  p#UR                  S5      nUR                  S5      n[        U5      [        U5      :w  a  [        SU< SU< 35      e[        U5      n/ nU R                  R	                  5          US   U R
                  ;   a+  [        U[        [        4U R
                  US      5      5        US   U R
                  ;   a+  [        U[        [        4U R
                  US      5      5        SU R
                  ;   a(  [        U[        [        4U R
                  S   5      5        US:X  aX  U(       aQ  US   nUR                  U5      (       a*  UR                  5       U R                  R                  5         $ [        X#45      eSU R
                  ;   a&  [        U[        SU R
                  S   S   5      5        U(       a  US   nUS	 UR                  5       n	XI   [        4XY   [        4S[        44 H  u  pUR!                  X5      nU(       aM  UR                  U5      (       a,  UR                  5       s  U R                  R                  5         $ [        X|5        UR#                  U5      nU(       d  M  [        X|5        M     U(       a  M  [        X#45      e! U R                  R                  5         f = f)	zdb[name, class]

Return the value matching the resource identified by NAME and
CLASS.  If no match is found, KeyError is raised.
.z2Different number of parts in resource name/class: /r   ?r-   r1   r
   )r2   r9   
ValueErrorr   rN   r   
bin_insert_Match
NAME_MATCHCLASS_MATCH
WILD_MATCHfinalrD   rO   KeyErrormatch_lengthr4   
skip_match)r   ncnameclsnamepclspcomplenmatchesxrF   partscorer4   s                r   __getitem__ResourceDB.__getitem__   sS    	 

3yy~
 u:T"Z^`cdeee*
 			U	  Qx477"7FJ>47758;L$MNAw$''!7FK?DGGDG<L$MNdgg~7FJ>4773<$HI
 !|AJ777##779D IIA #D;//
 TWW}7F2twwr{1~$>?$  AJAJ NN$%*Xz$:%)Wk$:%(*$5$7KD
 GGD0E ;;w//#(;;=0 II 'w6 LL1Eu"72%$7! 'J D;'' IIs&   :C+J$  C J$ !J$  J$ J$ $K c                 4     XU4   $ ! [          a    Us $ f = f)zget(name, class [, default])

Return the value matching the resource identified by NAME and
CLASS.  If no match is found, DEFAULT is returned, or None if
DEFAULT isn't specified.

)r^   )r   rC   rc   defaults       r   getResourceDB.get0  s(    	c
## 	N	s    c                     U R                   R                  5         [        U R                  UR                  5        U R                   R	                  5         g)zZupdate(db)

Update this database with all resources entries in the resource
database DB.

N)r   rN   	update_dbr   rO   )r   r   s     r   updateResourceDB.update>  s6     			$''255!		r   c                     U R                   R                  5         [        SU R                  5      nU R                   R	                  5         U$ )z?output()

Return the resource database in text representation.
r1   )r   rN   	output_dbr   rO   )r   texts     r   outputResourceDB.outputJ  s9     			TWW%		r   c                     U(       aM  US   (       aC  US   S   S:X  a7   X2S      R                  XU5      nU(       a  US   (       a  US   S   S:X  a  M7  U$ ! [         a    [        SUS   -  5      e[         a    [        SUS   -  5      ef = f)a  getopt(name, argv, opts)

Parse X command line options, inserting the recognised options
into the resource database.

NAME is the application name, and will be prepended to all
specifiers.  ARGV is the list of command line arguments,
typically sys.argv[1:].

OPTS is a mapping of options to resource specifiers.  The key is
the option flag (with leading -), and the value is an instance of
some Option subclass:

NoArg(specifier, value): set resource to value.
IsArg(specifier):        set resource to option itself
SepArg(specifier):       value is next argument
ResArg:                  resource and value in next argument
SkipArg:                 ignore this option and next argument
SkipLine:                ignore rest of arguments
SkipNArgs(count):        ignore this option and count arguments

The remaining, non-option, oparguments is returned.

rdb.OptionError is raised if there is an error in the argument list.
r   -zunknown option: %szmissing argument to option: %s)parser^   r   
IndexError)r   rb   argvoptss       r   getoptResourceDB.getoptU  s    6 tAw471:#4NG}**4t< tAw471:#4   B!"6a"@AA N!"BT!W"LMMNs   A 6B)r   r   )NNNr   )r   r   r   r   r    r   r   r   r>   rk   ro   rs   rx   r   r   r
   r   r   r   r   3   s8    	-(9$x$%No b
	#r   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)rY   i{  c                 j    Xl         [        U5      [        L a  SU l        X l        g SU l        X l        g Nr   r-   )pathr$   tupleskipr6   r   )r   r   dbss      r   r    _Match.__init__}  s-    	9DIJ DIGr   c                 4    U R                   UR                   :H  $ r   r   r   others     r   __eq___Match.__eq__  s    yyEJJ&&r   c                 4    U R                   UR                   :  $ r   r   r   s     r   __lt___Match.__lt__  s    yy5::%%r   c                 ,    [        U R                  5      $ r   )r9   r   r   s    r   r_   _Match.match_length  s    499~r   c                    U R                   (       a7  XR                  ;   a'  [        U R                  U4-   U R                  U   5      $ g XR                  S   ;   a*  [        U R                  U4-   U R                  S   U   5      $ XR                  S   ;   a-  [        U R                  US-   4-   U R                  S   U   5      $ g r   )r   r   rY   r   r6   )r   ri   rj   s      r   r4   _Match.match  s    99wwdii5)3TWWT]CCzz!}$dii5)3TZZ]45HIIA&dii519-7At9LMMr   c                 R   [        U R                  5      S-   U:  a  g U R                  (       a:  U R                  (       a(  [	        U R                  [
        4-   U R                  5      $ g U R                  S   (       a+  [	        U R                  [
        4-   U R                  S   5      $ g Nr-   )r9   r   r   r   rY   
MATCH_SKIPr6   r   rf   s     r   r`   _Match.skip_match  s{    tyy>A( 99wwdii:.8$''BB ZZ]$))zn4djjmDD r   c                     U R                   (       d3  [        U R                  5      U:X  a  [        U R                  5      S:  a  gg)Nr   r-   r   )r   r9   r   r6   r   s     r   r]   _Match.final  s-    yyS^w63tzz?Q;Nr   c                      U R                   S   $ Nr   r6   r   s    r   rD   _Match.value  s    zz!}r   )r   r6   r   r   N)r   r   r   r   r    r   r   r_   r4   r`   r]   rD   r   r
   r   r   rY   rY   {  s*    	'&*r   rY   c                 6   U (       d  U R                  U5        gSn[        U 5      S-
  nX#::  a3  X#-   S-  nXU   :  a  US-
  nOXU   :  a  US-   nO	XU   :X  a  gX#::  a  M3  XU   :  a  U R                  X15        gXU   :  a  U R                  US-   U5        gg)zbin_insert(list, element)

Insert ELEMENT into LIST.  LIST must be sorted, and ELEMENT will
be inserted to that LIST remains sorted.  If LIST already contains
ELEMENT, it will not be duplicated.

Nr   r-   r   )appendr9   r>   )listelementloweruppercenters        r   rX   rX     s     GEIME
.-A%&\!QJEF|#QJEV$ . eE#	;	EAIw' 
r   c                     UR                  5        Ha  u  p#X ;   aJ  [        X   S   US   5        [        X   S   US   5        [        U5      S:  a  X   S S USS  -   X'   MR  MT  [        U5      X'   Mc     g Nr   r-   r   )itemsrr   r9   
copy_group)destsrccompr6   s       r   rr   rr     s    yy{ < djmU1X.djmU1X.
 5zA~!Z^eABi7
 
 $E*DJ# #r   c                 F    [        U S   5      [        U S   5      4U SS  -   $ r   )copy_dbr   s    r   r   r     s*    E!HwuQx01E!"I==r   c                 V    0 nU R                  5        H  u  p#[        U5      X'   M     U$ r   )r   r   )r   newdbr   r6   s       r   r   r     s,    Exxz ' " Lr   c           	          SnUR                  5        H]  u  p4[        U5      S:  a  X < U< S[        US   5      < S3-   nU[        X-   S-   US   5      -   nU[        X-   S-   US   5      -   nM_     U$ )	Nr1   r   z: r*   rT   r   rL   r-   )r   r9   output_escaperv   )prefixr   rC   r   r6   s        r   rv   rv     s    
Cxxz u:>mE!H6MNNC Ifmc158<<Ifmc158<< " Jr   c                     [        U 5      n U (       d  U $ S H  u  pU R                  X5      n M     U S   S;   a  SU -   n U S   S;   a  U SS S:w  a  U S S S-   U S   -   n U $ )N))r,   z\\) z\000)r*   z\nr   z 	r,   r+   )r%   replace)rD   charescs      r   r   r     s    JE%	 d(	% Qx5uRyEeBrld2cr
T!E"I-Lr   c                        \ rS rSrS rS rSrg)Optioni.  c                     g r   r
   r   s    r   r    Option.__init__/      r   c                     g r   r
   r   rb   r   argss       r   r|   Option.parse2  r   r   r
   N)r   r   r   r   r    r|   r   r
   r   r   r   r   .  s    r   r   c                   $    \ rS rSrSrS rS rSrg)NoArgi5  z!Value is provided to constructor.c                     Xl         X l        g r   	specifierrD   )r   r   rD   s      r   r    NoArg.__init__7  s    "
r   c                 \    UR                  XR                  -   U R                  5        USS  $ r   )r>   r   rD   r   s       r   r|   NoArg.parse;  s&    
		$'4ABxr   r   Nr   r   r   r   __doc__r    r|   r   r
   r   r   r   r   5  s    +r   r   c                   $    \ rS rSrSrS rS rSrg)IsArgi?  z"Value is the option string itself.c                     Xl         g r   r   r   r   s     r   r    IsArg.__init__A      "r   c                 N    UR                  XR                  -   US   5        USS  $ r   r>   r   r   s       r   r|   IsArg.parseD  &    
		$'a1ABxr   r   Nr   r
   r   r   r   r   ?  s    ,#r   r   c                   $    \ rS rSrSrS rS rSrg)SepArgiH  zValue is the next argument.c                     Xl         g r   r   r   s     r   r    SepArg.__init__J  r   r   c                 N    UR                  XR                  -   US   5        USS  $ Nr-   r   r   r   s       r   r|   SepArg.parseM  r   r   r   Nr   r
   r   r   r   r   H  s    %#r   r   c                       \ rS rSrSrS rSrg)ResArgClassiQ  z(Resource and value in the next argument.c                 4    UR                  US   5        USS  $ r   )r   r   s       r   r|   ResArgClass.parseS  s    
a!ABxr   r
   Nr   r   r   r   r   r|   r   r
   r   r   r   r   Q  s
    2r   r   c                       \ rS rSrSrS rSrg)SkipArgClassiY  z%Ignore this option and next argument.c                     USS  $ r   r
   r   s       r   r|   SkipArgClass.parse[  s    ABxr   r
   Nr   r
   r   r   r   r   Y  s
    /r   r   c                       \ rS rSrSrS rSrg)SkipLineClassi`  zIgnore rest of the arguments.c                     / $ r   r
   r   s       r   r|   SkipLineClass.parseb  s    	r   r
   Nr   r
   r   r   r   r   `  s
    'r   r   c                   $    \ rS rSrSrS rS rSrg)	SkipNArgsig  z0Ignore this option and the next COUNT arguments.c                     Xl         g r   count)r   r   s     r   r    SkipNArgs.__init__i  s    
r   c                 &    USU R                   -   S  $ r   r   r   s       r   r|   SkipNArgs.parsel  s    A

NO$$r   r   Nr   r
   r   r   r   r   g  s    :%r   r   c                    SSK JnJn  SSKnUR                  R                  UR                  R                  US   5      5      S   n[        5       nUR                  XQSS U 5      nUR                  US-   US-   S5      nUR                  U5      n	U	R                  S5      R                  R                  UR                  UR                  5      n
U
(       a  U
R                   nOSn[        US9nUR#                  U5        XX4$ )a  display, name, db, args = get_display_opts(options, [argv])

Parse X OPTIONS from ARGV (or sys.argv if not provided).

Connect to the display specified by a *.display resource if one is
set, or to the default X display otherwise.  Extract the
RESOURCE_MANAGER property and insert all resources from ARGV.

The four return values are:
  DISPLAY -- the display object
  NAME    -- the application name (the filname of ARGV[0])
  DB      -- the created resource database
  ARGS    -- any remaining arguments
r   )displayXatomNr-   .displayz.Display)r   )Xlibr   r   osr   splitextbasenamer   r   ro   Displayscreenrootget_full_propertyRESOURCE_MANAGERSTRINGrD   rs   )optionsr~   r   r   r   rb   optdbleftargvdnamed	rdbstringr?   r   s                r   get_display_optsr  q  s      $77BGG,,T!W56q9DLE||Dqr(G4HIIdZ'
):DAEA  2253I3I38<<AI	T	"BIIeB  r   z*backgroundz*foregroundz*fontz.namez.titlez*synchronousonr   )z-bgz-backgroundz-fgz-foregroundz-fnz-fontz-namez-titlez-synchronousz-xrmz-displayz-d)'	functoolsresysXlib.supportr   compiler3   r5   r7   rM   rZ   r[   r\   r   	Exceptionr   r   total_orderingrY   rX   rr   r   r   rv   r   r   r   r   r   r   ResArgr   SkipArgr   SkipLiner   r~   r  stdoptsr
   r   r   <module>r     s  2  	 
  ZZ!
::DE **:;JJz*  


	) 	E EP
 ? ? ?L(F+(>0 F F V &  
6 
 .F 
 ?% % &)XX %!R ' /' //7O7OH% 6j)
#r   