parent
2f685cb23a
commit
630077cbad
|
@ -3,7 +3,7 @@ import buffer, default, dirutil, regex, util, window
|
|||
from point import Point
|
||||
from method import Method, Argument
|
||||
|
||||
num_re = re.compile(r'(?:-?[1-9][0-9]*|0x[0-9A-Fa-f]+|0[0-7]+|0)')
|
||||
num_re = re.compile(r'(?:-?[1-9][0-9]*|0[xX][0-9A-Fa-f]+|0[0-7]+|0)')
|
||||
|
||||
def find_next_number(w, offset=0):
|
||||
b = w.buffer
|
||||
|
@ -12,10 +12,16 @@ def find_next_number(w, offset=0):
|
|||
while y < len(b.lines):
|
||||
m = num_re.search(b.lines[y], x)
|
||||
if m:
|
||||
return (Point(m.start(), y), Point(m.end(), y))
|
||||
if m.group(0).lower().startswith('0x'):
|
||||
base = 16
|
||||
elif m.group(0).startswith('0'):
|
||||
base = 8
|
||||
else:
|
||||
base = 10
|
||||
return (Point(m.start(), y), Point(m.end(), y), base)
|
||||
x = 0
|
||||
y += 1
|
||||
return (None, None)
|
||||
return (None, None, None)
|
||||
def find_prev_number(w, offset=0):
|
||||
b = w.buffer
|
||||
x, y = w.logical_cursor().xy()
|
||||
|
@ -32,15 +38,14 @@ def find_prev_number(w, offset=0):
|
|||
return (None, None)
|
||||
|
||||
def get_converter(s):
|
||||
if s.startswith('0x'):
|
||||
return hex
|
||||
if s.startswith('0x') or s.startswith('0X'):
|
||||
return lambda x: '0x%02x' % x
|
||||
elif s.startswith('0') and len(s) > 1:
|
||||
return oct
|
||||
else:
|
||||
return str
|
||||
|
||||
class GotoPrevNumber(Method):
|
||||
'''Move the cursor to the start of the word to the right'''
|
||||
def _execute(self, w, **vargs):
|
||||
(p1, p2) = find_prev_number(w, -1)
|
||||
if p1 is not None:
|
||||
|
@ -48,18 +53,18 @@ class GotoPrevNumber(Method):
|
|||
|
||||
class GotoNextNumber(Method):
|
||||
def _execute(self, w, **vargs):
|
||||
(p1, p2) = find_next_number(w, 1)
|
||||
(p1, p2, base) = find_next_number(w, 1)
|
||||
if p1 is not None:
|
||||
w.goto(p2.add(-1, 0))
|
||||
|
||||
class Increment(Method):
|
||||
'''Increment the next number'''
|
||||
def _execute(self, w, **vargs):
|
||||
(p1, p2) = find_next_number(w)
|
||||
(p1, p2, base) = find_next_number(w)
|
||||
if p1 is None:
|
||||
return
|
||||
s = w.buffer.lines[p1.y][p1.x:p2.x]
|
||||
num = int(s)
|
||||
num = int(s, base)
|
||||
conv = get_converter(s)
|
||||
w.set_error('found %r' % num)
|
||||
w.delete(p1, p2)
|
||||
|
@ -70,11 +75,11 @@ class Increment(Method):
|
|||
class Decrement(Method):
|
||||
'''Decrement the next number'''
|
||||
def _execute(self, w, **vargs):
|
||||
(p1, p2) = find_next_number(w)
|
||||
(p1, p2, base) = find_next_number(w)
|
||||
if p1 is None:
|
||||
return
|
||||
s = w.buffer.lines[p1.y][p1.x:p2.x]
|
||||
num = int(s)
|
||||
num = int(s, base)
|
||||
conv = get_converter(s)
|
||||
w.set_error('found %r' % num)
|
||||
w.delete(p1, p2)
|
||||
|
|
Loading…
Reference in New Issue