
    F\h^                        S r SSKrSSKrSSKrSSKrSSKrSSKr/ SQr " S S\5      r	\R                  " 5       r0 rSqSqS6SS.S jjrS6S	 jrS7S
 jrS rS rSS.S jr " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      r S$ r!S% r"\RF                  SS& S':X  a   " S( S)\5      r$\RF                  S*:X  a   " S+ S,\5      r%\RF                  S-:X  a"  SS.K&J'r'  \'(       a
  SS/K(J)r)J*r*J+r+   " S0 S1\5      r,S2\-\.   S-  4S3 jr/S6S2\-\.   S-  4S4 jjr0\1S5:X  a  \0" 5         gg)8z?Interfaces for launching and remotely controlling web browsers.    N)Erroropenopen_newopen_new_tabgetregisterc                       \ rS rSrSrg)r       N)__name__
__module____qualname____firstlineno____static_attributes__r       !/usr/lib/python3.13/webbrowser.pyr   r      s    r   r   F	preferredc                ,   [            [        c
  [        5         X/[        U R	                  5       '   U(       d  [
        (       a$  U  S3[
        :X  a  [        R                  SU 5        O[        R                  U 5        SSS5        g! , (       d  f       g= f)zRegister a browser connector.Nz.desktopr   )_lock	_tryorderregister_standard_browsers	_browserslower_os_preferred_browserinsertappend)nameklassinstancer   s       r   r   r      sf    	&(#("3	$**,
 ..dV83DH]3]Q%T" 
s   A5B
Bc                    [         c   [           [         c
  [        5         SSS5        U b  U /nO[         nU H|  nSU;   a<  [        R                  " U5      nUS   S:X  a  [        USS 5      s  $ [        U5      s  $  [        UR                  5          nUS   b  US   s  $ US   c  Mr  US   " 5       s  $    [        S5      e! , (       d  f       N= f! [         a    [        U5      n NVf = f)zCReturn a browser launcher instance appropriate for the environment.N%s&   r   z!could not locate runnable browser)r   r   r   shlexsplitBackgroundBrowserGenericBrowserr   r   KeyError_synthesizer   )usingalternativesbrowsercommands       r   r   r   )   s     *,  w 7?kk'*Gr{c!("66%g../#GMMO4 qz%qz!'qz|##  $ 3
443 U&  /%g./s   C=C
CC+*C+c                     [         c   [           [         c
  [        5         SSS5        [          H'  n[        U5      nUR	                  XU5      (       d  M'    g   g! , (       d  f       N@= f)aZ  Display url using the default browser.

If possible, open url in a location determined by new.
- 0: the same browser window (the default).
- 1: a new browser window.
- 2: a new browser page ("tab").
If possible, autoraise raises the window (the default) or not.

If opening the browser succeeds, return True.
If there is a problem, return False.
NTF)r   r   r   r   r   )urlnew	autoraiser   r.   s        r   r   r   L   sT      *,  d)<<),,   Us   A
A(c                     [        U S5      $ )zmOpen url in a new window of the default browser.

If not possible, then open url in the only browser window.
r%   r   r1   s    r   r   r   c       
 Q<r   c                     [        U S5      $ )z}Open url in a new page ("tab") of the default browser.

If not possible, then the behavior becomes equivalent to open_new().
   r5   r6   s    r   r   r   k   r7   r   c                   U R                  5       S   n[        R                  " U5      (       d  SS/$ [        R                  R                  U5      n [        UR                  5          nUS   nU(       al  UR                  5       UR
                  :X  aN  SSK	nUR                  U5      nXl
        [        R                  R                  U 5      Ul        [        U SXQS9  SU/$ SS/$ ! [         a    SS/s $ f = f)a  Attempt to synthesize a controller based on existing controllers.

This is useful to create a controller when a user specifies a path to
an entry in the BROWSER environment variable -- we can copy a general
controller to operate using a specific installation of the desired
browser in this way.

If we can't create a controller in this way, or if there is no
executable for the requested browser, return [None, None].

r   Nr%   )r    r   )r'   shutilwhichospathbasenamer   r   r*   copyr   r   )r.   r   cmdr   r/   
controllerr@   s          r   r+   r+   s   s     --/!
C<<d|77C DDJJL) Jdjjlj&9&99YYz*
! gg..w7
$Ij!!$<  d|s   C& &C76C7c                   >    \ rS rSrSrS/rS
S jrSS jrS rS r	Sr
g	)BaseBrowser   z3Parent class for all browsers. Do not use directly.r"   c                     Xl         Xl        g N)r   r?   selfr   s     r   __init__BaseBrowser.__init__   s    	r   c                     [         erG   )NotImplementedErrorrI   r1   r2   r3   s       r   r   BaseBrowser.open   s    !!r   c                 &    U R                  US5      $ )Nr%   r5   rI   r1   s     r   r   BaseBrowser.open_new       yya  r   c                 &    U R                  US5      $ )Nr9   r5   rQ   s     r   r   BaseBrowser.open_new_tab   rS   r   )r?   r   N) r   T)r   r   r   r   __doc__argsrJ   r   r   r   r   r   r   r   rD   rD      s     =6D"!!r   rD   c                   (    \ rS rSrSrS rSS jrSrg)r)      zOClass for all browsers started with a command
and without remote functionality.c                     [        U[        5      (       a  Xl        S/U l        OUS   U l        USS  U l        [        R
                  R                  U R                  5      U l        g )Nr"   r   r%   )
isinstancestrr   rY   r=   r>   r?   rH   s     r   rJ   GenericBrowser.__init__   sQ    dC  IDI QDIQRDI((3r   c                    [         R                  " SU5        U R                  /U R                   Vs/ s H  nUR	                  SU5      PM     sn-   n [         R
                  S S S:X  a  [        R                  " U5      nO[        R                  " USS9nUR                  5       (       + $ s  snf ! [         a     gf = f)Nwebbrowser.openr"      winT)	close_fdsF)
sysauditr   rY   replaceplatform
subprocessPopenwaitOSErrorrI   r1   r2   r3   argcmdlineps          r   r   GenericBrowser.open   s    		#S)99+,0II!7,5S "%T3!7,5!7 7	||BQ5($$W-$$W=vvx<!7  		s   B,AB1 1
B>=B>)rY   r?   r   NrW   )r   r   r   r   rX   rJ   r   r   r   r   r   r)   r)      s    ,4r   r)   c                   "    \ rS rSrSrSS jrSrg)r(      zAClass for all browsers which are to be started in the
background.c                 ~   U R                   /U R                   Vs/ s H  nUR                  SU5      PM     sn-   n[        R                  " SU5         [        R
                  S S S:X  a  [        R                  " U5      nO[        R                  " USSS9nUR                  5       S L $ s  snf ! [         a     gf = f)Nr"   ra   rb   rc   T)rd   start_new_sessionF)
r   rY   rg   re   rf   rh   ri   rj   pollrl   rm   s          r   r   BackgroundBrowser.open   s    99+,0II!7,5S "%T3!7,5!7 7		#S)	||BQ5($$W-$$W7;=668t##!7  		s   B*AB/ /
B<;B<r   NrW   r   r   r   r   rX   r   r   r   r   r   r(   r(      s    r   r(   c                   L    \ rS rSrSrSrSrSrSS/rSr	Sr
SrSS jrSS	 jrS
rg)UnixBrowser   z=Parent class for all Unix browsers with remote functionality.NFT%actionr"   c           	      J   / nU(       a5  U R                   (       a$  [        U5      nU R                   U   nU(       a  U/nU R                  /U-   U-   nU(       d  U R                  (       a  [        R
                  nOS n[        R                  " USUU R                  =(       a    U=(       d    S USS9n	U(       a   U	R                  S5      n
U
(       + $ U R                  (       a  U	R                  5       c  ggU	R                  5       (       + $ ! [        R                   a     gf = f)NTrd   stdinstdoutstderrru      F)
raise_optsintr   
backgroundri   DEVNULLrj   redirect_stdoutrk   TimeoutExpiredrv   )rI   rY   remoter3   r1   	raise_optoptro   inoutrp   rcs              r   _invokeUnixBrowser._invoke   s    	dooII//),C E	99+	)D0T__&&E EWE%)%9%9%Ce%Kt$)TC VVAYv __vvxvvx< ,, s   :D D"!D"c                 n   [         R                  " SU5        US:X  a  U R                  nONUS:X  a  U R                  nO;US:X  a'  U R                  c  U R                  nOU R                  nO[        SU 35      eU R                   Vs/ s H%  nUR                  SU5      R                  SU5      PM'     nnU Vs/ s H  oU(       d  M  UPM     nnU R                  USX15      nU(       d>  U R                   Vs/ s H  oUR                  SU5      PM     nnU R                  US	S	5      $ gs  snf s  snf s  snf )
Nra   r   r%   r9   z8Bad 'new' parameter to open(); expected 0, 1, or 2, got r"   r|   TF)
re   rf   remote_actionremote_action_newwinremote_action_newtabr   remote_argsrg   r   rY   )rI   r1   r2   r3   actionrn   rY   successs           r   r   UnixBrowser.open  s*   		#S)!8''FAX..FAX((02222 4475: ; ;  ++-+C D#&..y&A+ 	 -#+tst+,,tT9:6:ii@isKKc*iD@<<eU33-+ As   ,D(9
D-D-7D2r   rG   rW   )r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   rz      s<    GJJO d#KM" Hr   rz   c                   0    \ rS rSrSrSS/rSrSrSrSr	S	r
g
)Mozillai'  z$Launcher class for Mozilla browsers.r|   r"   rV   z-new-windowz-new-tabTr   Nr   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   '  s%    .d#KM(%Jr   r   c                   4    \ rS rSrSrSS/rSS/rSrSrS	r	S
r
g)Epiphanyi1  z$Launcher class for Epiphany browser.z-noraiserV   r|   r"   -nz-wTr   N)r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   1  s)    .b!Jd#KMJr   r   c                   0    \ rS rSrSrSS/rSrSrSrSr	Sr
g	)
Chromei;  z)Launcher class for Google Chrome browser.r|   r"   rV   --new-windowTr   Nr   r   r   r   r   r   ;  s%    3d#KM)Jr   r   c                   0    \ rS rSrSrSS/rSrSrSrSr	Sr
g	)
OperaiH  z!Launcher class for Opera browser.r|   r"   rV   r   Tr   Nr   r   r   r   r   r   H  s%    +d#KM)Jr   r   c                   4    \ rS rSrSrSS/rSrSrSrSr	Sr
S	rg
)ElinksiR  z#Launcher class for Elinks browsers.z-remotezopenURL(%s%action)rV   z,new-windowz,new-tabFr   N)r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   R  s-    -23KM(%J Or   r   c                   "    \ rS rSrSrSS jrSrg)	Konquerori`  zController for the KDE File Manager (kfm, or Konqueror).

See the output of ``kfmclient --commands``
for more information on the Konqueror remote-control interface.
c           	         [         R                  " SU5        US:X  a  SnOSn[        R                  n [        R                  " SXA/SUXUS9nUR                  5         g! [         a     Of = f [        R                  " SS	U/SUXUSS
9nUR                  5       c  gO! [         a     Of = f [        R                  " SSU/SUXUSS
9nUR                  5       S L $ ! [         a     gf = f)Nra   r9   newTabopenURL	kfmclientT)rd   r   r   r   	konquerorz--silentr~   kfmz-dF)re   rf   ri   r   rj   rk   rl   rv   )rI   r1   r2   r3   r   devnullrp   s          r   r   Konqueror.openg  s   		#S)!8FF$$
	  +v!;+/w(/AA FFH  			  +z3!?+/w(/379A vvx  	  			$  %s!3+/w(/379A 668t##  		s5   A 
A+*A+/B 
B*)B*.C 
C('C(r   NrW   rx   r   r   r   r   r   `  s    +$r   r   c                   0    \ rS rSrSrSS/rSrSrSrSr	Sr
g	)
Edgei  z*Launcher class for Microsoft Edge browser.r|   r"   rV   r   Tr   Nr   r   r   r   r   r     s%    4d#KM)Jr   r   c                     [         R                  " S5      (       a  [        SS [        S5      5        [         R                  " S5      (       a  [        SS [        / SQ5      5        [        R
                  " SS5      R                  S5      n SU ;   d  S[        R                  ;   a1  [         R                  " S	5      (       a  [        S	S [        S	5      5        S
U ;   d  S[        R                  ;   a5  [         R                  " S5      (       a  [        S[        [        S5      5        [         R                  " S5      (       a  [        SS [        S5      5        S H6  n[         R                  " U5      (       d  M   [        US [        U5      5        M8     [         R                  " S5      (       a  [        S[        [        S5      5        O5[         R                  " S5      (       a  [        S[        [        S5      5        [         R                  " S5      (       a  [        SS [        S5      5        S H6  n[         R                  " U5      (       d  M   [        US [        U5      5        M8     [         R                  " S5      (       a  [        SS [        S5      5        [         R                  " S5      (       a  [        SS [        S5      5        g g )Nzxdg-opengio)r   r   z--r"   XDG_CURRENT_DESKTOPrV   :GNOMEGNOME_DESKTOP_SESSION_IDz	gvfs-openKDEKDE_FULL_SESSIONr   zx-www-browser)firefox	iceweasel	seamonkeyzmozilla-firefoxmozillar   r   epiphany)zgoogle-chromechromechromiumzchromium-browseroperamicrosoft-edge)r;   r<   r   r(   r=   getenvr'   environr   r   r   r   r   r   )xdg_desktopr.   s     r   register_X_browsersr     s    ||JT#4Z#@A ||E/0KLM))126<<SAK 
K		#rzz	1LL%%d$5k$BC 
+		rzz	)LL%%i;)?@ ||O$$$(9/(JK<<  WdGG$45 ||E	9U#34	k	"	"i;)?@ ||JT8J#78 O<<  WdF7O4 O
 ||G$g/||$%%!4.>)?@ &r   c                     / q [        R                  S:X  aX  [        SS [	        S5      5        [        SS [	        S5      5        [        SS [	        S5      5        [        SS [	        S5      5        [        R                  S:X  a  [        SS [        5       S	S
9  [        R                  S:X  a  [        SS [        S5      5        [        R                  S S S:X  Ga  [        S[        5        [        R                  R                  [        R                  R                  SS5      S5      n [        R                  R                  [        R                  R                  SS5      S5      nSSSSSX4 H6  n[        R                  " U5      (       d  M   [        US [        U5      5        M8     [        R                  " S5      (       a  [        SS [        S5      5        GO[        R                  S:w  a  [        R                  R                  S5      (       d$  [        R                  R                  S5      (       a^   SR!                  5       n["        R$                  " U["        R&                  S9nUR)                  5       R+                  5       nUq[7        5         [        R                  R                  S5      (       a  [        R                  " S5      (       a  [        SS [9        S5      5        [        R                  " S 5      (       a  [        S S [9        S 5      5        [        R                  " S!5      (       a  [        S!S [;        S!5      5        [        R                  " S"5      (       a  [        S"S [9        S"5      5        [        R                  " S#5      (       a  [        S#S [9        S#5      5        S$[        R                  ;   ay  [        R                  S$   R!                  [        R<                  5      nUR?                  5         U H2  nUS%:w  d  M  [A        US	S
9nUS&   b  M  [        US [9        U5      S	S
9  M4     g g ! [.        ["        R0                  [2        [4        4 a     GNf = f)'NdarwinMacOSXdefaultr   r   safariios
iosbrowserTr   
serenityosBrowserrb   rc   zwindows-defaultzPROGRAMFILES(x86)zC:\Program Files (x86)z%Microsoft\Edge\Application\msedge.exePROGRAMFILESzC:\Program Filesr   r   r   zMicrosoftEdge.exer   DISPLAYWAYLAND_DISPLAYz$xdg-settings get default-web-browser)r   TERMzwww-browserlinkselinkslynxw3mBROWSERrV   r%   )!r   re   rh   r   MacOSXOSAScript
IOSBrowserr(   WindowsDefaultr=   r>   joinr   r   r;   r<   r   r'   ri   check_outputr   decodestripr   FileNotFoundErrorCalledProcessErrorPermissionErrorNotADirectoryErrorr   r)   r   pathsepreverser+   )edge64edge32r.   rA   
raw_resultresultuserchoicesro   s           r   r   r     s=   I
||x4!;<4!:;D/)"<=4!:; ||utZ\TB
|||#D"3I">?
||BQ5 "N3 bjjnn-@B[\HJ bjjnn^=PQHJ!;	81G||G$$$(9'(BC1 <<+,,%tT2E-FG <<8#	)B)BbjjnnUfFgFg	/<BBD'44SASAST
#**,224 )/%! ::>>&!!||M**n].KL||G$$$w(?@||H%%4)9:||F##~f'=>||E""nU&;< BJJjj+11"**= #G"}!'T:q6>WdN7,CtT	 # 9 &z'D'D#%79 s   7AP; ;$Q#"Q#rb   rc   c                       \ rS rSrSS jrSrg)r   i@  c                     [         R                  " SU5         [        R                  " U5        g! [         a     gf = f)Nra   TF)re   rf   r=   	startfilerl   rN   s       r   r   WindowsDefault.openA  s=    II'-S!    s   0 
==r   NrW   r   r   r   r   r   r   r   r   r   r   r   @  s    		r   r   r   c                   6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )r   iQ  c                 $   > [         TU ]  U5        g rG   )superrJ   )rI   r   	__class__s     r   rJ   MacOSXOSAScript.__init__R  s    GT"r   c                 .   [         R                  " SU5        UR                  SS5      nU R                  S:X  a  SU S3nOSU R                   SU S3n[        R
                  " S	S
5      nUc  gUR                  U5        UR                  5       nU(       + $ )Nra   "z%22r   zopen location "z&
                   tell application "zH"
                       activate
                       open location "z,"
                   end
                   	osascriptwF)re   rf   rg   r   r=   popenwriteclose)rI   r1   r2   r3   scriptosapiper   s          r   r   MacOSXOSAScript.openU  s    II'-++c5)CyyI%*3%q1&&*ii[ 1''*e , hh{C0GMM&!B6Mr   r   )r   rW   )r   r   r   r   rJ   r   r   __classcell__)r   s   @r   r   r   Q  s    	#	 	r   r   r   )objc)c_void_pc_char_pc_ulongc                       \ rS rSrSS jrSrg)r   is  c                    [         R                  " SU5        [        c  g[        [        R                  l        [        R                  " S5      n[        R                  " S5      n[        [        [        [        /[        R                  l
        [        R                  " UUUR                  S5      S5      n[        R                  " S5      n[        R                  " S5      n[        [        [        /[        R                  l
        [        R                  " XxU5      n	[        R                  " S	5      n
[        R                  " S
5      n[        [        /[        R                  l
        [        R                  " X5      n[        R                  " S5      n[        [        [        [        [        /[        R                  l
        S [        R                  l        [        R                  " XU	S S 5        g)Nra   Fs   NSStrings   stringWithCString:encoding:zutf-8   s   NSURLs   URLWithString:s   UIApplications   sharedApplications"   openURL:options:completionHandler:T)re   rf   r   r   objc_msgSendrestypeobjc_getClasssel_registerNamer  r  argtypesencode)rI   r1   r2   r3   NSStringconstructor
url_stringNSURLurlWithString_ns_urlUIApplicationsharedApplication
shared_appopenURL_s                 r   r   IOSBrowser.opent  so   II'-| )1D% ))+6H//0NOK*2Hh)PD&**

7#	J &&x0E!223DEN*2Hh)GD&&&ujIF
 !../?@M $ 5 56J K*2H)=D&**=LJ ,,-RSH(Hh*D& )-D%jFD$Gr   r   NrW   r   r   r   r   r   r   s  s    4	r   r   arg_listc           
          SS K nUR                  SS9nUR                  SSS9  UR                  5       nUR                  SSS	S
SSSS9  UR                  SSS	SSSSS9  UR	                  U 5      nU$ )Nr   zOpen URL in a web browser.)descriptionr1   zURL to open)helpr   r   store_constr%   new_winzopen new window)r   constr   destr  z-tz	--new-tabr9   zopen new tab)argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_args)r  r  parsergrouprY   s        r   r#  r#    s    $$1M$NF
M2//1E	t^M	-  / 
t[	*  , X&DKr   c                 p    [        U 5      n[        UR                  UR                  5        [	        S5        g )N)r#  r   r1   r  print)r  rY   s     r   mainr)    s%    hD4<< 	$Kr   __main__rG   rW   )2rX   r=   r&   r;   re   ri   	threading__all__	Exceptionr   RLockr   r   r   r   r   r   r   r   r   r+   rD   r)   r(   rz   r   r   r   Chromiumr   r   r   r   r   r   rh   r   r   _ios_supportr   ctypesr   r  r  r   listr^   r#  r)  r   r   r   r   <module>r3     s   E 
   
  
J	I 	 			 #e # 5F. ', D! !&[ 8 &M+ M`k { [  K [ 2$ 2$j; "7AtVU~ <<u
 
  <<8+ 8 <<5!665[ 5pcT) $49t#  zF r   