Esempio n. 1
0
    def calltip_event(self, event=None):
        window = self.docWindow.window
        if window is None:
            return

        if not window.update_calltip.get():
            # don't process calltip event
            return

        # get calltip
        # code borrows from CallTips.py::open_calltip
        evalfuncs = False
        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets('(')
        if not sur_paren:
            return
        hp.set_index(sur_paren[0])
        name = hp.get_expression()
        if not name or (not evalfuncs and name.find('(') != -1):
            return

        w = window
        w.entry.delete("0", "end")
        w.entry.insert("insert", name)
        w.get_doc()
Esempio n. 2
0
    def calltip_event(self, event=None):
        window = self.docWindow.window
        if window is None:
            return

        if not window.update_calltip.get():
            # don't process calltip event
            return

        # get calltip
        # code borrows from CallTips.py::open_calltip
        evalfuncs = False
        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets('(')
        if not sur_paren:
            return
        hp.set_index(sur_paren[0])
        name = hp.get_expression()
        if not name or (not evalfuncs and name.find('(') != -1):
            return

        w = window
        w.entry.delete("0", "end")
        w.entry.insert("insert", name)
        w.get_doc()
Esempio n. 3
0
 def open_calltip(self, evalfuncs):
     self._remove_calltip_window()
     hp = HyperParser(self.editwin, 'insert')
     sur_paren = hp.get_surrounding_brackets('(')
     if not sur_paren:
         return
     hp.set_index(sur_paren[0])
     expression = hp.get_expression()
     if not expression or not evalfuncs and expression.find('(') != -1:
         return
     arg_text = self.fetch_tip(expression)
     if not arg_text:
         return
     self.calltip = self._make_calltip_window()
     self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1])
 def paren_closed_event(self, event):
     # If it was a shortcut and not really a closing paren, quit.
     closer = self.text.get("insert-1c")
     if closer not in _openers:
         return
     hp = HyperParser(self.editwin, "insert-1c")
     if not hp.is_in_code():
         return
     indices = hp.get_surrounding_brackets(_openers[closer], True)
     if indices is None:
         self.warn_mismatched()
         return
     self.activate_restore()
     self.create_tag(indices)
     self.set_timeout()
Esempio n. 5
0
 def paren_closed_event(self, event):
     # If it was a shortcut and not really a closing paren, quit.
     closer = self.text.get("insert-1c")
     if closer not in _openers:
         return
     hp = HyperParser(self.editwin, "insert-1c")
     if not hp.is_in_code():
         return
     indices = hp.get_surrounding_brackets(_openers[closer], True)
     if indices is None:
         self.warn_mismatched()
         return
     self.activate_restore()
     self.create_tag(indices)
     self.set_timeout()
Esempio n. 6
0
 def open_calltip(self, evalfuncs):
     self._remove_calltip_window()
     hp = HyperParser(self.editwin, 'insert')
     sur_paren = hp.get_surrounding_brackets('(')
     if not sur_paren:
         return
     hp.set_index(sur_paren[0])
     expression = hp.get_expression()
     if not expression or not evalfuncs and expression.find('(') != -1:
         return
     arg_text = self.fetch_tip(expression)
     if not arg_text:
         return
     self.calltip = self._make_calltip_window()
     self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1])
Esempio n. 7
0
    def open_calltip(self, evalfuncs):
        self._remove_calltip_window()

        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets("(")
        if not sur_paren:
            return
        hp.set_index(sur_paren[0])
        name = hp.get_expression()
        if not name or (not evalfuncs and name.find("(") != -1):
            return
        arg_text = self.fetch_tip(name)
        if not arg_text:
            return
        self.calltip = self._make_calltip_window()
        self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1])
Esempio n. 8
0
 def paren_closed_event(self, event):
     closer = self.text.get('insert-1c')
     if closer not in _openers:
         return
     else:
         hp = HyperParser(self.editwin, 'insert-1c')
         if not hp.is_in_code():
             return
         indices = hp.get_surrounding_brackets(_openers[closer], True)
         if indices is None:
             self.warn_mismatched()
             return
         self.activate_restore()
         self.create_tag(indices)
         self.set_timeout()
         return
Esempio n. 9
0
 def paren_closed_event(self, event):
     closer = self.text.get('insert-1c')
     if closer not in _openers:
         return
     else:
         hp = HyperParser(self.editwin, 'insert-1c')
         if not hp.is_in_code():
             return
         indices = hp.get_surrounding_brackets(_openers[closer], True)
         if indices is None:
             self.warn_mismatched()
             return
         self.activate_restore()
         self.create_tag(indices)
         self.set_timeout()
         return
Esempio n. 10
0
    def open_calltip(self, evalfuncs):
        self._remove_calltip_window()

        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets('(')
        if not sur_paren:
            return
        hp.set_index(sur_paren[0])
        expression = hp.get_expression()
        if not expression:
            return
        if not evalfuncs and (expression.find('(') != -1):
            return
        argspec = self.fetch_tip(expression)
        if not argspec:
            return
        self.active_calltip = self._calltip_window()
        self.active_calltip.showtip(argspec, sur_paren[0], sur_paren[1])
Esempio n. 11
0
    def open_calltip(self, evalfuncs):
        self._remove_calltip_window()

        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets("(")
        if not sur_paren:
            return
        hp.set_index(sur_paren[0])
        expression = hp.get_expression()
        if not expression:
            return
        if not evalfuncs and (expression.find("(") != -1):
            return
        argspec = self.fetch_tip(expression)
        if not argspec:
            return
        self.active_calltip = self._calltip_window()
        self.active_calltip.showtip(argspec, sur_paren[0], sur_paren[1])
Esempio n. 12
0
    def open_calltip(self, evalfuncs):
        self._remove_calltip_window()

        # - 2016 9 28 --
        lt = self.text.get('insert linestart', 'insert')
        m = re.search(r'(\w+)<[^>]*', lt)

        if m:
            from idlelib.languages import _cppclassref
            if m.group(1) in _cppclassref.CPP_CLASSREF:
                arg_text = _cppclassref.CPP_CLASSREF[m.group(1)]
                if not arg_text:
                    return

                self.calltip = self._make_calltip_window()
##                print `self.text.index('insert-1c')`, `self.text.index('insert').split('.')[0]+'.end'`
                self.calltip.showtip(
                    arg_text,
                    self.text.index('insert-1c'),
                    self.text.index('insert').split('.')[0]+'.end',
                )
                return
        # ---

        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets('(')
        if not sur_paren:
            return

        hp.set_index(sur_paren[0])
        expression = hp.get_expression()
        if not expression or (not evalfuncs and expression.find('(') != -1):
            return
        arg_text = self.fetch_tip(expression)
        # - 2016 9 27 --
        if hasattr(self.editwin, 'ftype') and self.editwin.ftype.get() in ('C++/l',):
            e = ''
            if not arg_text:
                # treat as constructor
                lt = self.text.get('insert linestart', 'insert lineend')
##                print `lt`, 1
                if re.match(r'^[ \t]', lt, flags=re.MULTILINE):
                    e = lt.lstrip().split()[0]
                    if e == 'string':
                        e = 'basic_string'
                    arg_text = self.fetch_tip(e)

            if not arg_text:
                e = e.split('<')[0]
                if e == 'string':
                    e = 'basic_string'
                arg_text = self.fetch_tip(e)

            if not arg_text:
                # treat as member function
                if expression.count('.') != 1:
                    return # gives up

                name = expression.split('.')[0]
                func = expression.split('.')[1]
                # queue<int> q;  < hit this
                # q.push(1);     < skip this
                # q.front();     < when call here
                ln = int(sur_paren[0].split('.')[0])-1
                pat = re.compile(
                    (
                        r'\b{n}(?!\.)'
                    ).format(n=name)
                )
                lt = self.text.get('{}.0'.format(ln), '{}.end'.format(ln))
                m = pat.search(lt)
                while ln > 0 and not m:
                    lt = self.text.get('{}.0'.format(ln), '{}.end'.format(ln))
                    m = pat.search(lt)
                    ln -= 1

                if m:
                    pat = re.compile(
                        (
                            r'((?:{w}::)*{w}(?:<[^<>]*(?:<[^>]*>)*[^<>]*>)?)\s*'
                            r'{n}'
                        ).format(
                            n=name,
                            w=r'(?:[_A-Za-z]\w*)',
                        )
                    )
                    m2 = pat.search(lt)
                    if m2:
                        e = m2.group(1)
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip('{}::{}'.format(e, func))

                    if not arg_text:
                        e = lt.lstrip().split()[0]
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip(
                            '{}::{}'.format(e, func)
                        )
                    if not arg_text:
                        e = e.split('<')[0]
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip(
                            '{}::{}'.format(e, func)
                        )

##            print `e`
        # ---
        if not arg_text:
            return
        self.calltip = self._make_calltip_window()
        self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1])
Esempio n. 13
0
    def open_calltip(self, evalfuncs):
        self._remove_calltip_window()

        # - 2016 9 28 --
        lt = self.text.get('insert linestart', 'insert')
        m = re.search(r'(\w+)<[^>]*', lt)

        if m:
            from idlelib.languages import _cppclassref
            if m.group(1) in _cppclassref.CPP_CLASSREF:
                arg_text = _cppclassref.CPP_CLASSREF[m.group(1)]
                if not arg_text:
                    return

                self.calltip = self._make_calltip_window()
                ##                print `self.text.index('insert-1c')`, `self.text.index('insert').split('.')[0]+'.end'`
                self.calltip.showtip(
                    arg_text,
                    self.text.index('insert-1c'),
                    self.text.index('insert').split('.')[0] + '.end',
                )
                return
        # ---

        hp = HyperParser(self.editwin, "insert")
        sur_paren = hp.get_surrounding_brackets('(')
        if not sur_paren:
            return

        hp.set_index(sur_paren[0])
        expression = hp.get_expression()
        if not expression or (not evalfuncs and expression.find('(') != -1):
            return
        arg_text = self.fetch_tip(expression)
        # - 2016 9 27 --
        if hasattr(self.editwin,
                   'ftype') and self.editwin.ftype.get() in ('C++/l', ):
            e = ''
            if not arg_text:
                # treat as constructor
                lt = self.text.get('insert linestart', 'insert lineend')
                ##                print `lt`, 1
                if re.match(r'^[ \t]', lt, flags=re.MULTILINE):
                    e = lt.lstrip().split()[0]
                    if e == 'string':
                        e = 'basic_string'
                    arg_text = self.fetch_tip(e)

            if not arg_text:
                e = e.split('<')[0]
                if e == 'string':
                    e = 'basic_string'
                arg_text = self.fetch_tip(e)

            if not arg_text:
                # treat as member function
                if expression.count('.') != 1:
                    return  # gives up

                name = expression.split('.')[0]
                func = expression.split('.')[1]
                # queue<int> q;  < hit this
                # q.push(1);     < skip this
                # q.front();     < when call here
                ln = int(sur_paren[0].split('.')[0]) - 1
                pat = re.compile((r'\b{n}(?!\.)').format(n=name))
                lt = self.text.get('{}.0'.format(ln), '{}.end'.format(ln))
                m = pat.search(lt)
                while ln > 0 and not m:
                    lt = self.text.get('{}.0'.format(ln), '{}.end'.format(ln))
                    m = pat.search(lt)
                    ln -= 1

                if m:
                    pat = re.compile(
                        (r'((?:{w}::)*{w}(?:<[^<>]*(?:<[^>]*>)*[^<>]*>)?)\s*'
                         r'{n}').format(
                             n=name,
                             w=r'(?:[_A-Za-z]\w*)',
                         ))
                    m2 = pat.search(lt)
                    if m2:
                        e = m2.group(1)
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip('{}::{}'.format(e, func))

                    if not arg_text:
                        e = lt.lstrip().split()[0]
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip('{}::{}'.format(e, func))
                    if not arg_text:
                        e = e.split('<')[0]
                        if e == 'string':
                            e = 'basic_string'
                        arg_text = self.fetch_tip('{}::{}'.format(e, func))


##            print `e`
# ---
        if not arg_text:
            return
        self.calltip = self._make_calltip_window()
        self.calltip.showtip(arg_text, sur_paren[0], sur_paren[1])