示例#1
0
    def f(region):
        if not region.a == region.b:
            return region
        point = region.a

        (a_exp, b_exp) = shared.get_expression(view, point, direction)

        if shared.truthy(a_exp, b_exp):
            (anext_exp, bnext_exp) = reversed(
                shared.get_next_expression(
                    view,
                    shared.step(b_exp, -1 if direction == "backward" else -2,
                                direction), True,
                    shared.opposite_direction(direction)))
            if shared.truthy(anext_exp, bnext_exp):
                end_bracket = shared.get_char(
                    view, shared.step(b_exp, -1, direction), direction)

                view.erase(
                    edit,
                    sublime.Region(shared.step(b_exp, -1, direction), b_exp))
                target_point = anext_exp
                for (i, c) in shared.walk(
                        view,
                        shared.step(anext_exp,
                                    -1 if direction == "forward" else -2,
                                    direction),
                        shared.opposite_direction(direction)):
                    if not c.isspace():
                        target_point = shared.step(i, 1, direction)
                        break

                shared.insert(view, edit, target_point, end_bracket, direction)

        return point
	def f(region):
		if not region.a == region.b:
			return region

		point = region.a

		if shared.is_inside_string(view, point):
			(a, b) = shared.get_expression(view, point, direction)
			target_point = shared.step(b, -1, direction)
			if point == target_point:
				return shared.step(point, 1, direction)
			return shared.step(b, -1, direction)

		if direction == "backward":
			point -= 1

		(word_a, word_b) = shared.get_word(view, point, direction)
		if shared.truthy(word_b):
			return word_b

		(next_a, next_b) = shared.get_next_expression(view, point, False, direction)
		if shared.truthy(next_b):
			return next_b

		expr_point = point
		if direction == "backward":
			expr_point += 1

		(a, b) = shared.get_expression(view, expr_point, direction)
		if shared.truthy(b): return b

		if direction == "forward":
			return shared.step(point, 1, direction)
		else:
			return point
示例#3
0
	def f(region):
		if not region.a == region.b:
			return region
		point = region.a

		(a_exp, b_exp) = shared.get_expression(view, point, direction)

		if shared.truthy(a_exp, b_exp):
			(anext_exp, bnext_exp) = shared.get_next_expression(view, b_exp, True, direction)
			if shared.truthy(anext_exp, bnext_exp):
				end_bracket = shared.get_char(view, shared.step(b_exp, -1, direction), direction)
				view.erase(edit, sublime.Region(shared.step(b_exp, -1, direction), b_exp))
				shared.insert(view, edit, shared.step(bnext_exp, -1, direction), end_bracket, direction)

		return point
示例#4
0
    def f(region):
        if not region.a == region.b:
            return shared.erase_region(view, edit, region)

        point = region.a

        (lb, rb) = shared.get_expression(view, point)
        if shared.truthy(lb, rb):
            region = sublime.Region(lb, rb)
            if shared.is_expression_empty(view.substr(region)):
                shared.erase_region(view, edit, region)
                return lb
            elif expression:
                view.erase(edit, sublime.Region(lb + 1, rb - 1))
                return lb + 1
            else:
                view.erase(edit, sublime.Region(point, rb - 1))
                return point
        else:
            line_region = view.line(point)
            a = line_region.begin()
            if not expression:
                a = point
            return shared.erase_region(view, edit,
                                       sublime.Region(a, line_region.end()))
示例#5
0
def strict_delete_selection(view, edit, region):
	replace_char = str(chr(1))

	offset = region.begin()
	out = list(view.substr(region))
	point = region.begin()
	while point < region.end():
		if (shared.is_inside_comment(view, point) or
		    shared.is_inside_string(view, point)):
			out[point - offset] = replace_char
			point += 1
			continue

		(a, b) = shared.get_next_expression(view, point, True)
		if shared.truthy(a, b):
			if shared.is_inside_word(view.substr(a)):
				if a > region.end():
					break
				a = max(a, region.begin())
				b = min(b, region.end())
			if b > region.end():
				break
			if not a < region.begin():
				a_local = a - offset
				b_local = b - offset
				out[a_local:b_local] = list(replace_char * (b - a))
			point = b
		else:
			break

	out = "".join(out)
	out = out.replace(replace_char, "").strip()
	view.replace(edit, region, out)

	return region.begin()
示例#6
0
def strict_delete_selection(view, edit, region):
    replace_char = str(chr(1))

    offset = region.begin()
    out = list(view.substr(region))
    point = region.begin()
    while point < region.end():
        if (shared.is_inside_comment(view, point)
                or shared.is_inside_string(view, point)):
            out[point - offset] = replace_char
            point += 1
            continue

        (a, b) = shared.get_next_expression(view, point, True)
        if shared.truthy(a, b):
            if shared.is_inside_word(view.substr(a)):
                if a > region.end():
                    break
                a = max(a, region.begin())
                b = min(b, region.end())
            if b > region.end():
                break
            if not a < region.begin():
                a_local = a - offset
                b_local = b - offset
                out[a_local:b_local] = list(replace_char * (b - a))
            point = b
        else:
            break

    out = "".join(out)
    out = out.replace(replace_char, "").strip()
    view.replace(edit, region, out)

    return region.begin()
示例#7
0
	def f(region):
		if not region.a == region.b:
			return region

		point = region.begin()

		if (shared.is_inside_string(view, point) or
		    shared.is_inside_comment(view, point)):
			view.insert(edit, point, right_bracket)
			return point + 1

		(lb, rb) = shared.find_enclosing_brackets(
			view, region.begin(), left_bracket, right_bracket)

		if shared.truthy(rb):
			return paredit_close_remove_spaces(view, edit, rb)
		elif shared.truthy(lb):
			view.insert(edit, point, right_bracket)
			return point + 1
		else:
			return region
示例#8
0
	def f(region):
		if not region.a == region.b:
			return insert_brackets(view, edit, lbracket, rbracket, region)

		point = region.a

		(lb, rb) = shared.get_next_expression(view, point)
		if shared.truthy(lb, rb):
			return insert_brackets(view, edit, lbracket, rbracket,
				sublime.Region(lb, rb))

		return point
示例#9
0
def remove_empty_expression(view, edit, point, fail_direction):
	(lb, rb) = shared.get_expression(view, point)

	if shared.truthy(lb, rb):
		expr_region = sublime.Region(lb, rb)
		expression = view.substr(expr_region)
		if shared.is_expression_empty(expression):
			return shared.erase_region(view, edit, expr_region)
		else:
			return sublime.Region(point + fail_direction, point + fail_direction)
	else:
		return point
示例#10
0
    def f(region):
        if not region.a == region.b:
            return region

        point = region.begin()

        if (shared.is_inside_string(view, point)
                or shared.is_inside_comment(view, point)):
            view.insert(edit, point, right_bracket)
            return point + 1

        (lb, rb) = shared.find_enclosing_brackets(view, region.begin(),
                                                  left_bracket, right_bracket)

        if shared.truthy(rb):
            return paredit_close_remove_spaces(view, edit, rb)
        elif shared.truthy(lb):
            view.insert(edit, point, right_bracket)
            return point + 1
        else:
            return region
示例#11
0
    def f(region):
        if not region.a == region.b:
            return region
        point = region.a

        (a_exp, b_exp) = shared.get_expression(view, point, direction)

        if shared.truthy(a_exp, b_exp):
            (anext_exp,
             bnext_exp) = shared.get_next_expression(view, b_exp, True,
                                                     direction)
            if shared.truthy(anext_exp, bnext_exp):
                end_bracket = shared.get_char(
                    view, shared.step(b_exp, -1, direction), direction)
                view.erase(
                    edit,
                    sublime.Region(shared.step(b_exp, -1, direction), b_exp))
                shared.insert(view, edit, shared.step(bnext_exp, -1,
                                                      direction), end_bracket,
                              direction)

        return point
示例#12
0
def remove_empty_expression(view, edit, point, fail_direction):
    (lb, rb) = shared.get_expression(view, point)

    if shared.truthy(lb, rb):
        expr_region = sublime.Region(lb, rb)
        expression = view.substr(expr_region)
        if shared.is_expression_empty(expression):
            return shared.erase_region(view, edit, expr_region)
        else:
            return sublime.Region(point + fail_direction,
                                  point + fail_direction)
    else:
        return point
示例#13
0
	def f(region):
		if not region.a == region.b:
			return region

		point = region.a

		(lb, rb) = shared.get_expression(view, point)
		if shared.truthy(lb, rb):
			view.erase(edit, sublime.Region(point, rb))
			view.erase(edit, sublime.Region(lb, lb + 1))
			return point - 1
		else:
			return point
示例#14
0
    def f(region):
        if not region.a == region.b:
            return region
        point = region.a

        if is_forward:
            (lw, rw) = shared.get_next_word(view, point)
        else:
            (lw, rw) = shared.get_previous_word(view, point)

        if shared.truthy(lw, rw):
            return shared.erase_region(view, edit, sublime.Region(lw, rw))

        return region
示例#15
0
	def f(region):
		if not region.a == region.b:
			return region
		point = region.a

		(a_exp, b_exp) = shared.get_expression(view, point, direction)

		if shared.truthy(a_exp, b_exp):
			(anext_exp, bnext_exp) = reversed(shared.get_next_expression(
				view, shared.step(b_exp, -1 if direction == "backward" else -2, direction), True, shared.opposite_direction(direction)))
			if shared.truthy(anext_exp, bnext_exp):
				end_bracket = shared.get_char(view, shared.step(b_exp, -1, direction), direction)

				view.erase(edit, sublime.Region(shared.step(b_exp, -1, direction), b_exp))
				target_point = anext_exp
				for (i, c) in shared.walk(view, shared.step(anext_exp, -1 if direction == "forward" else -2, direction), shared.opposite_direction(direction)):
					if not c.isspace():
						target_point = shared.step(i, 1, direction)
						break

				shared.insert(view, edit, target_point, end_bracket, direction)

		return point
示例#16
0
	def f(region):
		if not region.a == region.b:
			return region
		point = region.a

		if is_forward:
			(lw, rw) = shared.get_next_word(view, point)
		else:
			(lw, rw) = shared.get_previous_word(view, point)

		if shared.truthy(lw, rw):
			return shared.erase_region(view, edit, sublime.Region(lw, rw))

		return region
示例#17
0
    def f(region):
        if not region.a == region.b:
            return region

        point = region.a

        if shared.is_inside_string(view, point):
            (a, b) = shared.get_expression(view, point, direction)
            target_point = shared.step(b, -1, direction)
            if point == target_point:
                return shared.step(point, 1, direction)
            return shared.step(b, -1, direction)

        if direction == "backward":
            point -= 1

        (word_a, word_b) = shared.get_word(view, point, direction)
        if shared.truthy(word_b):
            return word_b

        (next_a, next_b) = shared.get_next_expression(view, point, False,
                                                      direction)
        if shared.truthy(next_b):
            return next_b

        expr_point = point
        if direction == "backward":
            expr_point += 1

        (a, b) = shared.get_expression(view, expr_point, direction)
        if shared.truthy(b): return b

        if direction == "forward":
            return shared.step(point, 1, direction)
        else:
            return point
示例#18
0
	def f(region):
		if not region.a == region.b:
			return region
		point = region.a

		(lb, rb) = shared.get_expression(view, point)

		if shared.truthy(lb, rb):
			lc = view.substr(lb)
			rc = view.substr(rb - 1)
			if lc == "\"":
				spaces_start = point
			else:
				spaces_start = shared.remove_spaces(view, edit, point)
			return insert_split_brackets(view, edit, lc, rc, spaces_start)

		return point
示例#19
0
    def f(region):
        if not region.a == region.b:
            return region
        point = region.a

        (lb, rb) = shared.get_expression(view, point)

        if shared.truthy(lb, rb):
            lc = view.substr(lb)
            rc = view.substr(rb - 1)
            if lc == "\"":
                spaces_start = point
            else:
                spaces_start = shared.remove_spaces(view, edit, point)
            return insert_split_brackets(view, edit, lc, rc, spaces_start)

        return point
示例#20
0
	def f(region):
		if not region.a == region.b:
			return region

		point = region.a

		(lb, rb) = shared.get_expression(view, point)
		if shared.truthy(lb, rb):
			(lexp, rexp) = shared.get_next_expression(view, point)
			
			lexp = lexp or point
			rexp = rexp or point

			view.erase(edit, sublime.Region(rexp, rb))
			view.erase(edit, sublime.Region(lb, lexp))
			return lb
		else:
			return point
示例#21
0
	def f(region):
		if not region.a == region.b:
			return shared.erase_region(view, edit, region)

		point = region.a

		(lb, rb) = shared.get_expression(view, point)
		if shared.truthy(lb, rb):
			region = sublime.Region(lb, rb)
			if shared.is_expression_empty(view.substr(region)):
				shared.erase_region(view, edit, region)
				return lb
			elif expression:
				view.erase(edit, sublime.Region(lb + 1, rb - 1))
				return lb + 1
			else:
				view.erase(edit, sublime.Region(point, rb - 1))
				return point
		else:
			line_region = view.line(point)
			a = line_region.begin()
			if not expression:
				a = point
			return shared.erase_region(view, edit, sublime.Region(a, line_region.end()))