parent
e7c656de45
commit
7d2720f497
|
@ -127,10 +127,12 @@ sub build_resource_manager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foo()
|
sub blah {
|
||||||
unless(1);
|
foo()
|
||||||
|
unless(1);
|
||||||
|
}
|
||||||
|
|
||||||
print 'hi\n';
|
print 'hi\n';
|
||||||
|
|
||||||
# this gets an array of hash references, each of which represents a userdata alias
|
# this gets an array of hash references, each of which represents a userdata alias
|
||||||
# it stores the result in $self->{aliases}
|
# it stores the result in $self->{aliases}
|
||||||
|
|
11
method.py
11
method.py
|
@ -517,6 +517,17 @@ class InsertSpace(Method):
|
||||||
'''Insert space into buffer at the cursor'''
|
'''Insert space into buffer at the cursor'''
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
w.insert_string_at_cursor(' ')
|
w.insert_string_at_cursor(' ')
|
||||||
|
class GetIndentionLevel(Method):
|
||||||
|
'''Calculate the indention level for this line'''
|
||||||
|
def _execute(self, w, **vargs):
|
||||||
|
cursor = w.logical_cursor()
|
||||||
|
if not w.mode.tabber:
|
||||||
|
w.application.set_error('No tabber available')
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
i = w.mode.tabber.get_level(cursor.y)
|
||||||
|
w.application.set_error('Indention level: %r' % i)
|
||||||
|
|
||||||
class InsertTab(Method):
|
class InsertTab(Method):
|
||||||
'''Insert tab into buffer, or tabbify line, depending on mode'''
|
'''Insert tab into buffer, or tabbify line, depending on mode'''
|
||||||
def _execute(self, w, **vargs):
|
def _execute(self, w, **vargs):
|
||||||
|
|
|
@ -94,7 +94,7 @@ class PerlGrammar(Grammar):
|
||||||
|
|
||||||
# some basic stuff
|
# some basic stuff
|
||||||
#PatternRule(name=r'delimiter', pattern=r",|;|->|=>|=|\?|(?<!:):(?!=:)"),
|
#PatternRule(name=r'delimiter', pattern=r",|;|->|=>|=|\?|(?<!:):(?!=:)"),
|
||||||
PatternRule(name=r'delimiter', pattern=r"[=\?(){}\[\]]|->|=>|(?<!:):(?!=:)"),
|
PatternRule(name=r'delimiter', pattern=r"[,;=\?(){}\[\]]|->|=>|(?<!:):(?!=:)"),
|
||||||
PatternRule(name=r'operator', pattern=r"\+=|-=|\*=|/=|//=|%=|&=\|\^=|>>=|<<=|\*\*="),
|
PatternRule(name=r'operator', pattern=r"\+=|-=|\*=|/=|//=|%=|&=\|\^=|>>=|<<=|\*\*="),
|
||||||
PatternRule(name=r'operator', pattern=r"\+|<=>|<>|<<|<=|<|-|>>|>=|>|\*\*|&|\*|\||/|\^|==|//|~|=~|!~|!=|%|!|\."),
|
PatternRule(name=r'operator', pattern=r"\+|<=>|<>|<<|<=|<|-|>>|>=|>|\*\*|&|\*|\||/|\^|==|//|~|=~|!~|!=|%|!|\."),
|
||||||
PatternRule(name=r'bareword', pattern=r'(?:[a-zA-Z_][a-zA-Z_0-9]*::)*[a-zA-Z_][a-zA-Z_0-9]*')
|
PatternRule(name=r'bareword', pattern=r'(?:[a-zA-Z_][a-zA-Z_0-9]*::)*[a-zA-Z_][a-zA-Z_0-9]*')
|
||||||
|
|
103
tab2.py
103
tab2.py
|
@ -16,7 +16,7 @@ class Tabber:
|
||||||
def get_next_left_token(self, y, i):
|
def get_next_left_token(self, y, i):
|
||||||
tokens = self.get_tokens(y)
|
tokens = self.get_tokens(y)
|
||||||
assert i >= 0 and i < len(tokens)
|
assert i >= 0 and i < len(tokens)
|
||||||
for j in range(0, i):
|
for j in range(1, i):
|
||||||
m = regex.whitespace.match(tokens[i - j].string)
|
m = regex.whitespace.match(tokens[i - j].string)
|
||||||
if not m:
|
if not m:
|
||||||
return tokens[i - j]
|
return tokens[i - j]
|
||||||
|
@ -112,37 +112,104 @@ class StackTabber(Tabber):
|
||||||
s = token.string
|
s = token.string
|
||||||
|
|
||||||
if token.name == self.mode.closetoken and s in self.mode.closetags:
|
if token.name == self.mode.closetoken and s in self.mode.closetags:
|
||||||
currlvl = self._handle_open_token(currlvl, y, i)
|
|
||||||
elif token.name == self.mode.opentoken and s in self.mode.opentags:
|
|
||||||
currlvl = self._handle_close_token(currlvl, y, i)
|
currlvl = self._handle_close_token(currlvl, y, i)
|
||||||
|
elif token.name == self.mode.opentoken and s in self.mode.opentags:
|
||||||
|
currlvl = self._handle_open_token(currlvl, y, i)
|
||||||
else:
|
else:
|
||||||
currlvl = self._handle_other_token(currlvl, y, i)
|
currlvl = self._handle_other_token(currlvl, y, i)
|
||||||
return currlvl
|
return currlvl
|
||||||
|
|
||||||
def _handle_open_token(self, currlvl, y, i):
|
def _handle_open_token(self, currlvl, y, i):
|
||||||
token = self.get_token(y, i)
|
|
||||||
s1 = token.string
|
|
||||||
if not self.markers:
|
|
||||||
raise Exception, "unmatched closing token %r" % s1
|
|
||||||
s2 = self.markers[-1].name
|
|
||||||
if s1 == self.mode.opentags[s2]:
|
|
||||||
del self.markers[-1]
|
|
||||||
if self.is_leftmost_token(y, i):
|
|
||||||
currlvl = self.get_curr_level()
|
|
||||||
else:
|
|
||||||
raise Exception, "mismatched closing tag %r vs %r" % (s2, s1)
|
|
||||||
return currlvl
|
|
||||||
def _handle_close_token(self, currlvl, y, i):
|
|
||||||
token = self.get_token(y, i)
|
token = self.get_token(y, i)
|
||||||
rtoken = self.get_next_right_token(y, i)
|
rtoken = self.get_next_right_token(y, i)
|
||||||
if rtoken is None:
|
if rtoken is None:
|
||||||
level = self.get_curr_level() + 4
|
level = self.get_curr_level() + 4
|
||||||
else:
|
else:
|
||||||
level = rtoken.x
|
level = rtoken.x
|
||||||
self.markers.append(Marker(token.string, level))
|
self._append(token.string, level)
|
||||||
|
return currlvl
|
||||||
|
def _handle_close_token(self, currlvl, y, i):
|
||||||
|
token = self.get_token(y, i)
|
||||||
|
s1 = token.string
|
||||||
|
if not self.markers:
|
||||||
|
raise Exception, "unmatched closing token %r" % s1
|
||||||
|
s2 = self.markers[-1].name
|
||||||
|
if s1 == self.mode.opentags[s2]:
|
||||||
|
self._pop()
|
||||||
|
if self.is_leftmost_token(y, i):
|
||||||
|
currlvl = self.get_curr_level()
|
||||||
|
#else:
|
||||||
|
# raise Exception, "hmmmm: %r" % self.get_next_left_token(y, i)
|
||||||
|
else:
|
||||||
|
raise Exception, "mismatched closing tag %r vs %r" % (s2, s1)
|
||||||
return currlvl
|
return currlvl
|
||||||
def _handle_other_token(self, currlvl, y, i):
|
def _handle_other_token(self, currlvl, y, i):
|
||||||
return currlvl
|
return currlvl
|
||||||
|
|
||||||
|
def _append(self, name, level):
|
||||||
|
self.markers.append(Marker(name, level))
|
||||||
|
def _pop(self):
|
||||||
|
self.markers.pop(-1)
|
||||||
|
def _opt_append(self, name, level):
|
||||||
|
if self.markers and self.markers[-1].name == name:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
self._append(name, level)
|
||||||
|
def _opt_pop(self, *names):
|
||||||
|
if self.markers and self.markers[-1].name in names:
|
||||||
|
self.markers.pop(-1)
|
||||||
|
|
||||||
class PerlTabber(StackTabber):
|
class PerlTabber(StackTabber):
|
||||||
pass
|
def is_base(self, y):
|
||||||
|
if y == 0:
|
||||||
|
return True
|
||||||
|
highlighter = self.mode.window.buffer.highlights[self.mode.name()]
|
||||||
|
if not highlighter.tokens[y]:
|
||||||
|
return False
|
||||||
|
t = highlighter.tokens[y][0]
|
||||||
|
if t.name == 'keyword' and t.string == 'sub':
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
def _handle_open_token(self, currlvl, y, i):
|
||||||
|
currlvl = StackTabber._handle_open_token(self, currlvl, y, i)
|
||||||
|
return currlvl
|
||||||
|
def _handle_close_token(self, currlvl, y, i):
|
||||||
|
self._opt_pop('cont')
|
||||||
|
currlvl = StackTabber._handle_close_token(self, currlvl, y, i)
|
||||||
|
token = self.get_token(y, i)
|
||||||
|
if token.string == '}':
|
||||||
|
self._opt_pop('cont')
|
||||||
|
elif self.is_rightmost_token(y, i):
|
||||||
|
self._opt_append('cont', currlvl + 4)
|
||||||
|
return currlvl
|
||||||
|
def _handle_other_token(self, currlvl, y, i):
|
||||||
|
token = self.get_token(y, i)
|
||||||
|
fqname = token.fqname()
|
||||||
|
if fqname == 'delimiter' and token.string == ';':
|
||||||
|
self._opt_pop('cont')
|
||||||
|
elif fqname == 'heredoc.start':
|
||||||
|
self._opt_append('heredoc', None)
|
||||||
|
elif fqname == 'heredoc.end':
|
||||||
|
self._opt_pop('heredoc')
|
||||||
|
self._opt_pop('cont')
|
||||||
|
elif fqname == 'pod.start':
|
||||||
|
self._opt_append('pod', None)
|
||||||
|
elif fqname == 'pod.end':
|
||||||
|
self._opt_pop('pod')
|
||||||
|
currlvl = 0
|
||||||
|
elif fqname == 'string.start':
|
||||||
|
self._opt_append('string', None)
|
||||||
|
elif fqname == 'string.end':
|
||||||
|
self._opt_pop('string')
|
||||||
|
if self.is_rightmost_token(y, i):
|
||||||
|
self._opt_append('cont', currlvl + 4)
|
||||||
|
if self.is_rightmost_token(y, i):
|
||||||
|
if(not fqname.startswith('pod') and
|
||||||
|
not fqname.startswith('heredoc') and
|
||||||
|
not fqname.startswith('string') and
|
||||||
|
not fqname.startswith('endblock') and
|
||||||
|
not fqname == 'comment' and
|
||||||
|
not fqname == 'null' and
|
||||||
|
token.string not in ('}', ';', '(', '{', '[', ',')):
|
||||||
|
self._opt_append('cont' % fqname, currlvl + 4)
|
||||||
|
return currlvl
|
||||||
|
|
|
@ -54,8 +54,6 @@ class PerlTabber(tab.TokenStackTabber):
|
||||||
self.stack_pop_all_const("cont")
|
self.stack_pop_all_const("cont")
|
||||||
else:
|
else:
|
||||||
pass
|
pass
|
||||||
elif s == "=" and next_token is None:
|
|
||||||
self.stack_append_const("cont")
|
|
||||||
elif s == ";":
|
elif s == ";":
|
||||||
self.stack_pop_all_const("cont")
|
self.stack_pop_all_const("cont")
|
||||||
elif name == "heredoc":
|
elif name == "heredoc":
|
||||||
|
|
Loading…
Reference in New Issue