parent
8dfa9bccd6
commit
6d0116c45f
|
@ -109,17 +109,6 @@ class Application(object):
|
||||||
self.mode_extensions = {}
|
self.mode_extensions = {}
|
||||||
self.mode_detection = {}
|
self.mode_detection = {}
|
||||||
|
|
||||||
# ok, now let's load all the "standard" modes
|
|
||||||
mode.install(self)
|
|
||||||
names = ('about', 'blame', 'c', 'console', 'consolemini', 'css', 'diff',
|
|
||||||
'dir', 'elisp', 'hex', 'html', 'java', 'javascript', 'lisp',
|
|
||||||
'make', 'mini', 'mutt', 'nasm', 'ocaml', 'perl', 'python',
|
|
||||||
'replace', 'rst', 'scheme', 'search', 'sh', 'sql', 'tt',
|
|
||||||
'text', 'text2', 'which', 'xml', 'cheetah', 'colortext',
|
|
||||||
'latex', 'insertmini', 'conf')
|
|
||||||
for name in names:
|
|
||||||
exec("import mode.%s; mode.%s.install(self)" % (name, name))
|
|
||||||
|
|
||||||
# initialize our methods
|
# initialize our methods
|
||||||
self.methods = {}
|
self.methods = {}
|
||||||
names = ('method', 'method.svn', 'method.cvs', 'method.search',
|
names = ('method', 'method.svn', 'method.cvs', 'method.search',
|
||||||
|
@ -133,6 +122,17 @@ class Application(object):
|
||||||
if hasattr(cls, '_is_method') and cls._is_method:
|
if hasattr(cls, '_is_method') and cls._is_method:
|
||||||
self.methods[cls._name()] = cls()
|
self.methods[cls._name()] = cls()
|
||||||
|
|
||||||
|
# ok, now let's load all the "standard" modes
|
||||||
|
mode.install(self)
|
||||||
|
names = ('about', 'blame', 'c', 'console', 'consolemini', 'css', 'diff',
|
||||||
|
'dir', 'elisp', 'hex', 'html', 'java', 'javascript', 'lisp',
|
||||||
|
'make', 'mini', 'mutt', 'nasm', 'ocaml', 'perl', 'python',
|
||||||
|
'replace', 'rst', 'scheme', 'search', 'sh', 'sql', 'tt',
|
||||||
|
'text', 'text2', 'which', 'xml', 'cheetah', 'colortext',
|
||||||
|
'latex', 'insertmini', 'conf')
|
||||||
|
for name in names:
|
||||||
|
exec("import mode.%s; mode.%s.install(self)" % (name, name))
|
||||||
|
|
||||||
# create all the insert methods for the character ranges we like
|
# create all the insert methods for the character ranges we like
|
||||||
for c in string.letters + string.digits + string.punctuation:
|
for c in string.letters + string.digits + string.punctuation:
|
||||||
obj = method.InsertString(c)
|
obj = method.InsertString(c)
|
||||||
|
|
155
mode/python.py
155
mode/python.py
|
@ -179,83 +179,6 @@ class PythonTabber(tab.StackTabber):
|
||||||
self._append(token.string, currlvl + w)
|
self._append(token.string, currlvl + w)
|
||||||
return currlvl
|
return currlvl
|
||||||
|
|
||||||
class Python(mode.Fundamental):
|
|
||||||
modename = 'Python'
|
|
||||||
extensions = ['.py']
|
|
||||||
detection = ['python']
|
|
||||||
tabbercls = PythonTabber
|
|
||||||
grammar = PythonGrammar
|
|
||||||
opentokens = ('delimiter',)
|
|
||||||
opentags = {'(': ')', '[': ']', '{': '}'}
|
|
||||||
closetokens = ('delimiter',)
|
|
||||||
closetags = {')': '(', ']': '[', '}': '{'}
|
|
||||||
colors = {
|
|
||||||
'python_keyword': ('cyan', 'default'),
|
|
||||||
'python_reserved': ('magenta', 'default'),
|
|
||||||
'python_builtin': ('cyan', 'default'),
|
|
||||||
'functionname': ('blue', 'default'),
|
|
||||||
'classname': ('green', 'default'),
|
|
||||||
'rawstring.start': ('green', 'default'),
|
|
||||||
'rawstring.null': ('green', 'default'),
|
|
||||||
'rawstring.escaped': ('green', 'default'),
|
|
||||||
'rawstring.end': ('green', 'default'),
|
|
||||||
'system_identifier': ('cyan', 'default'),
|
|
||||||
}
|
|
||||||
config = {
|
|
||||||
'python.lib': '.',
|
|
||||||
}
|
|
||||||
def __init__(self, w):
|
|
||||||
mode.Fundamental.__init__(self, w)
|
|
||||||
# tag matching
|
|
||||||
self.add_bindings('close-paren', (')',))
|
|
||||||
self.add_bindings('close-brace', ('}',))
|
|
||||||
self.add_bindings('close-bracket', (']',))
|
|
||||||
# add python-specific methods
|
|
||||||
self.add_action(PythonInitFunctions())
|
|
||||||
self.add_action(PythonListFunctions())
|
|
||||||
self.add_action_and_bindings(PythonGotoFunction(), ('C-c M-g',))
|
|
||||||
self.add_action_and_bindings(PythonCheckSyntax(), ('C-c s',))
|
|
||||||
self.add_action_and_bindings(PythonDictCleanup(), ('C-c h',))
|
|
||||||
self.add_action_and_bindings(PythonInsertTripleSquotes(), ('C-c M-\'',))
|
|
||||||
self.add_action_and_bindings(PythonInsertTripleDquotes(), ('C-c M-"',))
|
|
||||||
# other python
|
|
||||||
self.functions = None
|
|
||||||
def build_function_map(self):
|
|
||||||
b = self.window.buffer
|
|
||||||
scope_stack = []
|
|
||||||
self.functions = {}
|
|
||||||
for i in range(0, len(b.lines)):
|
|
||||||
if regex.whitespace.match(b.lines[i]):
|
|
||||||
continue
|
|
||||||
m = regex.python_indent.match(b.lines[i])
|
|
||||||
assert m
|
|
||||||
lvl = len(m.group(1))
|
|
||||||
while scope_stack:
|
|
||||||
if lvl <= scope_stack[-1][0]:
|
|
||||||
scope_stack.pop(-1)
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
m = regex.python_scope.match(b.lines[i])
|
|
||||||
if m:
|
|
||||||
(ws, typ, name) = m.groups()
|
|
||||||
lvl = len(ws)
|
|
||||||
if scope_stack:
|
|
||||||
prefix = '.'.join([x[1] for x in scope_stack])
|
|
||||||
self.functions['%s.%s' % (prefix, name)] = i
|
|
||||||
else:
|
|
||||||
self.functions[name] = i
|
|
||||||
scope_stack.append((len(ws), name))
|
|
||||||
def get_functions(self):
|
|
||||||
if self.functions is None:
|
|
||||||
self.build_function_map()
|
|
||||||
return self.functions
|
|
||||||
def get_function_names(self):
|
|
||||||
functions = self.get_functions()
|
|
||||||
pairs = [[functions[key], key] for key in functions]
|
|
||||||
pairs.sort()
|
|
||||||
names = [x[1] for x in pairs]
|
|
||||||
return names
|
|
||||||
|
|
||||||
class PythonInitFunctions(method.Method):
|
class PythonInitFunctions(method.Method):
|
||||||
'''Jump to a function defined in this module'''
|
'''Jump to a function defined in this module'''
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
|
@ -390,4 +313,82 @@ class PythonInsertTripleDquotes(method.Method):
|
||||||
for i in range(0, 3):
|
for i in range(0, 3):
|
||||||
w.backward()
|
w.backward()
|
||||||
|
|
||||||
|
class Python(mode.Fundamental):
|
||||||
|
modename = 'Python'
|
||||||
|
extensions = ['.py']
|
||||||
|
detection = ['python']
|
||||||
|
tabbercls = PythonTabber
|
||||||
|
grammar = PythonGrammar
|
||||||
|
opentokens = ('delimiter',)
|
||||||
|
opentags = {'(': ')', '[': ']', '{': '}'}
|
||||||
|
closetokens = ('delimiter',)
|
||||||
|
closetags = {')': '(', ']': '[', '}': '{'}
|
||||||
|
colors = {
|
||||||
|
'python_keyword': ('cyan', 'default'),
|
||||||
|
'python_reserved': ('magenta', 'default'),
|
||||||
|
'python_builtin': ('cyan', 'default'),
|
||||||
|
'functionname': ('blue', 'default'),
|
||||||
|
'classname': ('green', 'default'),
|
||||||
|
'rawstring.start': ('green', 'default'),
|
||||||
|
'rawstring.null': ('green', 'default'),
|
||||||
|
'rawstring.escaped': ('green', 'default'),
|
||||||
|
'rawstring.end': ('green', 'default'),
|
||||||
|
'system_identifier': ('cyan', 'default'),
|
||||||
|
}
|
||||||
|
config = {
|
||||||
|
'python.lib': '.',
|
||||||
|
}
|
||||||
|
methods = [PythonInitFunctions, PythonListFunctions, PythonGotoFunction,
|
||||||
|
PythonCheckSyntax, PythonDictCleanup, PythonInsertTripleSquotes,
|
||||||
|
PythonInsertTripleDquotes]
|
||||||
|
def __init__(self, w):
|
||||||
|
mode.Fundamental.__init__(self, w)
|
||||||
|
# tag matching
|
||||||
|
self.add_bindings('close-paren', (')',))
|
||||||
|
self.add_bindings('close-brace', ('}',))
|
||||||
|
self.add_bindings('close-bracket', (']',))
|
||||||
|
# add python-specific methods
|
||||||
|
self.add_bindings('python-goto-function', ('C-c M-g',))
|
||||||
|
self.add_bindings('python-check-syntax', ('C-c s',))
|
||||||
|
self.add_bindings('python-dict-cleanup', ('C-c h',))
|
||||||
|
self.add_bindings('python-insert-triple-squotes', ('C-c M-\'',))
|
||||||
|
self.add_bindings('python-insert-triple-dquotes', ('C-c M-"',))
|
||||||
|
# other python
|
||||||
|
self.functions = None
|
||||||
|
def build_function_map(self):
|
||||||
|
b = self.window.buffer
|
||||||
|
scope_stack = []
|
||||||
|
self.functions = {}
|
||||||
|
for i in range(0, len(b.lines)):
|
||||||
|
if regex.whitespace.match(b.lines[i]):
|
||||||
|
continue
|
||||||
|
m = regex.python_indent.match(b.lines[i])
|
||||||
|
assert m
|
||||||
|
lvl = len(m.group(1))
|
||||||
|
while scope_stack:
|
||||||
|
if lvl <= scope_stack[-1][0]:
|
||||||
|
scope_stack.pop(-1)
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
m = regex.python_scope.match(b.lines[i])
|
||||||
|
if m:
|
||||||
|
(ws, typ, name) = m.groups()
|
||||||
|
lvl = len(ws)
|
||||||
|
if scope_stack:
|
||||||
|
prefix = '.'.join([x[1] for x in scope_stack])
|
||||||
|
self.functions['%s.%s' % (prefix, name)] = i
|
||||||
|
else:
|
||||||
|
self.functions[name] = i
|
||||||
|
scope_stack.append((len(ws), name))
|
||||||
|
def get_functions(self):
|
||||||
|
if self.functions is None:
|
||||||
|
self.build_function_map()
|
||||||
|
return self.functions
|
||||||
|
def get_function_names(self):
|
||||||
|
functions = self.get_functions()
|
||||||
|
pairs = [[functions[key], key] for key in functions]
|
||||||
|
pairs.sort()
|
||||||
|
names = [x[1] for x in pairs]
|
||||||
|
return names
|
||||||
|
|
||||||
install = Python.install
|
install = Python.install
|
||||||
|
|
Loading…
Reference in New Issue