def find_next_lone_bracket(view, start, items, unbalanced=0):
# TODO: Extract common functionality from here and the % motion instead of
# duplicating code.
new_start = start
for i in range(unbalanced or 1):
next_closing_bracket = find_in_range(
view,
items[1],
start=new_start,
end=view.size(),
flags=sublime.IGNORECASE
)
if next_closing_bracket is None:
# Unbalanced items; nothing we can do.
return
while view.substr(next_closing_bracket.begin() - 1) == '\\':
next_closing_bracket = find_in_range(view, items[1],
start=next_closing_bracket.end(),
end=view.size(),
flags=sublime.IGNORECASE)
if next_closing_bracket is None:
return
new_start = next_closing_bracket.end()
if view.substr(start) == items[0][-1]:
start += 1
nested = 0
while True:
next_opening_bracket = find_in_range(view, items[0],
start=start,
end=next_closing_bracket.b,
flags=sublime.IGNORECASE)
if not next_opening_bracket:
break
nested += 1
start = next_opening_bracket.end()
if nested > 0:
return find_next_lone_bracket(view, next_closing_bracket.end(),
items,
nested)
else:
return next_closing_bracket
评论列表
文章目录