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()
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()
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()
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()
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 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])
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
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
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])
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])
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])
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])