
    "e`!                     (   d dl mZ d dlmZmZ d dlmZ d dlZd dlZ		 d dl
Zd dlmZ eZej"                  Z G d d	      Z G d
 d      Zd Zd Zd Zedz   Zedz   ez   Z ee      Z ee      Zd Z edd      ZddZy# e$ r dZd dlmZ Y fw xY w)    )
namedtuple)ascii_lettersdigits)
pydevd_xmlN)_pydev_jy_imports_tipperF)_pydev_imports_tipperc                       e Zd ZdZd Zd Zy)_StartsWithFilterz\
        Used because we can't create a lambda that'll use an outer scope in jython 2.1
    c                 .    |j                         | _        y N)lower
start_with)selfr   s     @/usr/lib/python3/dist-packages/_pydev_bundle/_pydev_completer.py__init__z_StartsWithFilter.__init__   s    $**,    c                 T    |j                         j                  | j                        S r   )r   
startswithr   )r   names     r   __call__z_StartsWithFilter.__call__   s    zz|&&t77r   N)__name__
__module____qualname____doc__r   r    r   r   r
   r
      s    -8r   r
   c                   &    e Zd ZddZd Zd Zd Zy)	CompleterNc                 V    |d| _         nd| _         || _        |i | _        y|| _        y)a  Create a new completer for the command line.

        Completer([namespace,global_namespace]) -> completer instance.

        If unspecified, the default namespace where completions are performed
        is __main__ (technically, __main__.__dict__). Namespaces should be
        given as dictionaries.

        An optional second namespace can be given.  This allows the completer
        to handle cases where both the local and global scopes need to be
        distinguished.

        Completer instances should be used as the completion mechanism of
        readline via the set_completer() call:

        readline.set_completer(Completer(my_namespace).complete)
        N   r   )use_main_ns	namespaceglobal_namespace)r   r!   r"   s      r   r   zCompleter.__init__*   s9    ,  D D&DN #$&D!$4D!r   c                 |    | j                   rt        d      d|v r| j                  |      S | j                  |      S )zReturn the next possible completion for 'text'.

        This is called successively with state == 0, 1, 2, ... until it
        returns None.  The completion should begin with 'text'.

        zNamespace must be provided!.)r    RuntimeError__main____dict__r!   attr_matchesglobal_matches)r   texts     r   completezCompleter.completeL   sD     <== $;$$T**&&t,,r   c                     d }i }t         j                  | j                  | j                  fD ]  }|j	                  |        t        |      }t        ||j                         ||      S )zCompute matches when text is a simple name.

        Return a list of all keywords, built-in functions and names currently
        defined in self.namespace or self.global_namespace that match.

        c                     | |   S r   r   )objattrs     r   get_itemz*Completer.global_matches.<locals>.get_iteme   s    t9r   )__builtin__r'   r!   r"   updater
   dir2keys)r   r*   r0   adict_with_compsfilters         r   r)   zCompleter.global_matches]   sc    	  + 4 4dnndF[F[\ 	&OHH_%	& #4(Aqvvx622r   c                    ddl }|j                  d|      }|sg S |j                  dd      \  }}	 t        || j                        }t        |      }t        ||      }|S #  	 t        || j
                        }n#  g cY cY S xY wY AxY w)a  Compute matches when text contains a dot.

        Assuming the text is of the form NAME.NAME....[NAME], and is
        evaluatable in self.namespace or self.global_namespace, it will be
        evaluated and its attributes (as revealed by dir()) are used as
        possible completions.  (For class instances, class members are are
        also considered.)

        WARNING: this can still invoke arbitrary C code, if an object
        with a __getattr__ hook is evaluated.

        r   Nz(\S+(\.\w+)*)\.(\w*)$r      )r7   )rematchgroupevalr!   r"   r
   r3   )	r   r*   r:   mexprr/   r.   r7   wordss	            r   r(   zCompleter.attr_matchesq   s     	 HH-t4IWWQ]
d	tT^^,C #4(S(	4!6!67	 s)   A! !B$A;:B;B?BB)NN)r   r   r   r   r+   r)   r(   r   r   r   r   r   (   s     5D-"3("r   r   c                     | g S i }|j                  | j                         |j                  | j                         t        j                  r$t        j
                  |||| j                        }|S t        |d      }|j                  |      }|S )a  
    :return list(tuple(method_name, docstring, parameters, completion_type))

    method_name: str
    docstring: str
    parameters: str -- i.e.: "(a, b)"
    completion_type is an int
        See: _pydev_bundle._pydev_imports_tipper for TYPE_ constants
    N)r2   	f_globalsf_localspydevconsoleIPYTHONget_completionsr   r+   )frameact_tokupdated_globalscompletions	completers        r   generate_completionsrL      s     }	
 O5??+5>>*"227G_V[VdVde 	 ot4	((1r   c                 0    t        | |      }t        |      S r   )rL   completions_to_xml)rG   rH   rJ   s      r   generate_completions_as_xmlrO      s    &ug6Kk**r   c           	      L   t         j                  }t         j                  }dg}| D ]  }|j                  d       |j                   | ||d   d                   |j                  d       |j                   | ||d   d                   |j                  d       |j                   | ||d   d                   |j                  d	       |j                   | ||d
   d                   |j                  d        |j                  d       dj	                  |      S )Nz<xml>z
<comp p0="r   z/>_= 	z" p1="r   z" p2="   z" p3="r9   z"/>z</xml> )r   make_valid_xml_valuequoteappendjoin)rJ   	valid_xmlrT   msgcomps        r   rN   rN      s    //IE)C 	

< 

9U47I678

8

9U47I678

8

9U47I678

8

9U47I678

5	 JJx773<r   _c                 "    | j                         S r   )isidentifier)ss    r   r\   r\      s    >>r   TokenAndQualifierztoken, qualifierc                 B   |dk  rd}|dk  rd}t        | t              r| j                  d      } | j                         }	 ||   } |t        |       k\  rt        |       }| d| } d}d}g }t        |dz
  dd      D ]2  }| |   }|t        v st        |      s|dk(  r|j                  |       2 n dj                  t        |            }d|v r+|j                  d      }dj                  |dd       }|d   }n|}t        ||      S # t        $ r t        dd      cY S w xY w)z
    Extracts the token a qualifier from the text given the line/colum
    (see test_extract_token_and_qualifier for examples).

    :param unicode text:
    :param int line: 0-based
    :param int column: 0-based
    r   zutf-8rR   Nr   r$   )
isinstancebytesdecode
splitlines
IndexErrorr^   lenrangeidentifier_partr\   rU   rV   reversedsplit)	r*   linecolumnlinestoken	qualifier
temp_tokenics	            r   extract_token_and_qualifierrs      sC    axz${{7#OOE+T{ TT=DEIJ6A:r2& G<?a4ia  (:./Jz%%d+
		*Sb/*rN		UI..3  + c**+s   D DD)r   r   )collectionsr   stringr   r   _pydevd_bundler   rD   builtinsr1   	java.langjava_pydev_bundler   r   ImportError	IS_JYTHONgenerate_imports_tip_for_moduler3   r
   r   rL   rO   rN   identifier_startrh   setr\   r^   rs   r   r   r   <module>r      s    " ( %  464
 <<	8 	8"k k\<+
( !3& #%.'( o& 24FG 0/]  4I34s   B BB