
    6{gv                     8   d Z ddlmZmZmZmZmZ ddlZddlZddl	Z	ddl
Z
ddlZddlZ ej                  d       g dZ ej                  dej                   ej"                  z        Z ej                  d      Z G d d	ej(                  ej*                        Zy)
z?
Adds context menu item to open an URI at the pointer position
    )GtkXedGioGObject	GtkSourceNxed)	fileftpsftpsmbdavdavssshhttphttpsz[\w#/\?:%@&\=\+\.\\~-]+z~((([a-zA-Z][0-9a-zA-Z+\-\.]*):)?/{0,2}([0-9a-zA-Z;:,/\?@&=\+\$\.\-_!~\*'\(\)%]+))?(#[0-9a-zA-Z;,/\?:@&\=+$\.\\-_!~\*'\(\)%]+)?c                       e Zd Zd Z ej
                  ej                        Zd Z	d Z
d Zd Zd Zd Zd Zd	 Zd
 Zd Zy)OpenURIContextMenuPlugin)typec                     t         j                  j                  |        d| _        d | _        t
        j                  j                  d      | _        y )N zUTF-8)	r   Object__init__uriwindowr   Encodingget_from_charsetencoding)selfs    T/usr/lib/x86_64-linux-gnu/xed/plugins/open-uri-context-menu/open-uri-context-menu.pyr   z!OpenURIContextMenuPlugin.__init__'   s:    	..$$($+$$55g>$-    c           	      ,   g }dD ]L  }t        | d|j                  dd      z         }|j                  | j                  j	                  ||             N || j                  _        | j                  j                         D ]  }| j                  |        y )N)z	tab-addedztab-removed
on_window_-_)getattrreplaceappendr   connectOpenURIContextMenuPluginID	get_viewsconnect_view)r   handler_idssignalmethodviews        r   do_activatez$OpenURIContextMenuPlugin.do_activate-   s    +, ;fD,S)AAB6dkk))&&9:; ,7$++(kk##% dTr    c                     | j                   g| j                   j                         z   }|D ]/  }|j                  }||D ]  }|j                  |        d |_        1 d | _         y N)r   r*   r)   
disconnect)r   widgetswidgetr,   
handler_ids        r   do_deactivatez&OpenURIContextMenuPlugin.do_deactivate6   sm    [[MDKK1133' ,f22;

! #
z"#'+6$, $+r    c                 L    |j                  d| j                        }|g|_        y )Nzpopulate-popup)r(   on_view_populate_popupr)   )r   r/   r6   s      r   r+   z%OpenURIContextMenuPlugin.connect_view@   s#    ||,d.I.IJ*%/L$!r    c                      y r2    )r   r   s     r   	update_uiz"OpenURIContextMenuPlugin.update_uiD       r    c                     d|g}t        j                         dk(  r8t         j                  j                  d      rddt         j                  d   g|z   }t	        j
                  |       y )Nzxdg-openr   	SUDO_USERsudoz-u)osgetuidenvironhas_key
subprocessPopen)r   	menu_itemurlcommands       r   
browse_urlz#OpenURIContextMenuPlugin.browse_urlG   sS    'YY[A"**,,[9dBJJ{34w>77r    c                 B    | j                  |j                                y r2   )r+   get_viewr   r   tabs      r   on_window_tab_addedz,OpenURIContextMenuPlugin.on_window_tab_addedN   s    CLLN#r    c                      y r2   r;   rM   s      r   on_window_tab_removedz.OpenURIContextMenuPlugin.on_window_tab_removedQ   r=   r    c                 @   |j                         }|j                  t        j                  j                        }|j                         \  }}}}|j                  t        j                  j                  ||      \  }}|j                  ||      }	t        |	t              r|	d   r|	d   nd }	|	d k(  r;|j                  |j                               }	t        |	t              r|	d   r|	d   nd }	|	j                         r5t        j                  |	j                               sn|	j                         r5|	j!                         }
|
j#                         rEt        j                  |
j                               s|
j                          n|
j#                         rE|j%                  |
|	d      }t'        |      dk(  ry| j)                  |      }|sy|}t'        |      dkD  r|d d dz   }d}|j+                  d      s|j+                  d      rd}|rt        j,                  t/        d	      |z        }|j1                  d
| j2                  |       |j5                          t        j6                         }|j5                          |j9                  |       |j9                  |       y)Nr      FT2   u   …http://zhttps://z	Open '%s'activate)
get_buffer
get_windowr   TextWindowTypeTEXTget_pointerwindow_to_buffer_coordsget_iter_at_location
isinstancetupleget_iter_at_mark
get_insertforward_charRE_DELIMmatchget_charcopybackward_charget_textlenvalidate_uri
startswithMenuItemr$   r(   rJ   showSeparatorMenuItemprepend)r   r/   menudocwin
ptr_windowxymodinsertstartworddisplayed_word	browse_tobrowse_uri_item	separators                   r   r9   z/OpenURIContextMenuPlugin.on_view_populate_popupT   s/   #**//0#//+*aC		%	%c&8&8&=&=q!	D$!Q
 $$Q*&F1I6 t^  !126 )VAYF
..*
+	 	 ++-%
..)
*		 	
 
eVU	+$Y!^
			4	 $	
.2"3B')3>)	__Y4??:#>9\\!K.N"CD?:t=$$&9>><<	<< 	r    c                 $   t         j                  |      }|sy|j                         }|j                  d      d k(  s|j                  d      dk(  ry|j                  d      d k7  r|j                  d      t        v r|S y|j                  d      j	                  d      rd|z   S t
        j                  j                  |      }t
        j                  j                  |      r$t
        j                  j                  |      rd|z   S | j                  j                         j                         }|d k7  r|j	                  d      rot
        j                  j                  t
        j                  j                  |      |      }t
        j                  j                  |j                  dd	d
            r?|S t
        j                  j                  t
        j                  j                  |      |      S t!        j"                  t
        j$                  d   t
        j&                        }|D ]f  }t
        j                  j                  t
        j                  j                  |      d|      }t
        j                  j                  |      sad|z   c S  y)NF   /      zwww.rU   zfile://r   rS   PATHinclude)RE_URI_RFC2396searchgroupACCEPTED_SCHEMESrk   rA   path
expanduserisfileisabsr   get_active_documentget_uri_for_displayjoindirnamer&   stringsplitrC   pathsep)r   r   mtargetdoc_dirfpathsr   s           r   rj   z%OpenURIContextMenuPlugin.validate_uri   s   C !	

779&WWQZ41771:,
WWQZ4ggaj$$MggajF#v77f%&WW^^FggmmFvKK++-AAC'_#
RWW__W-v6A	ww~~aii	2q12X77<<0&99
,,rzz&)2::
6% g	ww||BGGOOG,i@1ggnnQq=
 
r    N)__name__
__module____qualname____gtype_name__r   propertyr   Windowr   r   r0   r7   r+   r<   rJ   rO   rQ   r9   rj   r;   r    r   r   r   #   sP    ,
'




+?1$6p'r    r   )__doc__gi.repositoryr   r   r   r   r   gettextresysrA   rE   r   installr   compileUNICODE	MULTILINErc   r   r   WindowActivatabler   r;   r    r   <module>r      s   " < ;  	 
 	    X 2::0"**R\\2IJ  ^  _Pw~~s/D/D Pr    