Ejemplo n.º 1
0
    def f(region):
        if not region.begin() == region.end():
            if shared.is_strict_mode():
                return strict_delete_selection(view, edit, region)
            else:
                return shared.erase_region(view, edit, region)

        point = region.begin()

        if is_forward:
            direction = 1
            next_char = view.substr(point)
            skip_char_type = "lbracket"
        else:
            direction = -1
            next_char = view.substr(point - 1)
            skip_char_type = "rbracket"

        next_char_type = shared.char_type(next_char)

        if shared.is_inside_comment(view, point):
            pass  # pass to else below
        elif next_char_type == "string":
            if shared.is_inside_string(view, point):
                if ((not is_forward) and (point - 2 >= 0)
                        and view.substr(point - 2) == "\\"):
                    return shared.erase_region(
                        view, edit, sublime.Region(point, point - 2))
                else:
                    return remove_empty_expression(view, edit, point,
                                                   direction)
            else:
                return region.begin() + direction
        elif shared.is_inside_string(view, point):
            # Same purpose as is_inside_comment above
            # but has to be tested after the elif above.
            if (is_forward and (point + 2 < view.size()) and view.substr(
                    sublime.Region(point, point + 2)) == "\\\""):
                return shared.erase_region(view, edit,
                                           sublime.Region(point, point + 2))
            else:
                pass
        elif next_char_type == skip_char_type:
            return region.begin() + direction
        elif next_char_type:
            return remove_empty_expression(view, edit, point, direction)

        # else
        return standard_delete(view, edit, point, is_forward)
Ejemplo n.º 2
0
	def f(region):
		if not region.begin() == region.end():
			if shared.is_strict_mode():
				return strict_delete_selection(view, edit, region)
			else:
				return shared.erase_region(view, edit, region)

		point = region.begin()

		if is_forward:
			direction = 1
			next_char = view.substr(point)
			skip_char_type = "lbracket"
		else:
			direction = -1
			next_char = view.substr(point - 1)
			skip_char_type = "rbracket"

		next_char_type = shared.char_type(next_char)

		if shared.is_inside_comment(view, point):
			pass # pass to else below
		elif next_char_type == "string":
			if shared.is_inside_string(view, point):
				if ((not is_forward) and
				    (point - 2 >= 0) and
				    view.substr(point - 2) == "\\"):
					return shared.erase_region(view, edit, sublime.Region(point, point - 2))
				else:
					return remove_empty_expression(view, edit, point, direction)
			else:
				return region.begin() + direction
		elif shared.is_inside_string(view, point):
			# Same purpose as is_inside_comment above
			# but has to be tested after the elif above.
			if (is_forward and
			    (point + 2 < view.size()) and
			    view.substr(sublime.Region(point, point + 2)) == "\\\""):
				return shared.erase_region(
					view, edit, sublime.Region(point, point + 2))
			else:
				pass
		elif next_char_type == skip_char_type: return region.begin() + direction
		elif next_char_type:
			return remove_empty_expression(view, edit, point, direction)

		# else
		return standard_delete(view, edit, point, is_forward)
Ejemplo n.º 3
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
Ejemplo n.º 4
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()
Ejemplo n.º 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()
Ejemplo n.º 6
0
	def f(region):
		s = region.begin()
		e = region.end()

		if s == e:
			if shared.is_inside_string(view, s):
				view.insert(edit, s, "\\\"")
				return s + 2
			else:
				view.insert(edit, s, "\"\"")
				return s + 1
		else:
			view.insert(edit, s, "\"")
			view.insert(edit, e + 1, "\"")
			return sublime.Region(s + 1, e + 1)
Ejemplo n.º 7
0
    def f(region):
        s = region.begin()
        e = region.end()

        if s == e:
            if view.substr(s) == "\"":
                return s + 1
            elif shared.is_inside_string(view, s):
                view.insert(edit, s, "\\\"")
                return s + 2
            else:
                view.insert(edit, s, "\"\"")
                return s + 1
        else:
            view.insert(edit, s, "\"")
            view.insert(edit, e + 1, "\"")
            return sublime.Region(s + 1, e + 1)
Ejemplo n.º 8
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 rb:
			return paredit_close_remove_spaces(view, edit, rb)
		else:
			return region
Ejemplo n.º 9
0
    def f(region):
        begin = region.begin()
        end = region.end()

        if shared.is_strict_mode():
            text = view.substr(region)
            if not (shared.bracket_count(text, "(", ")") == 0
                    and shared.bracket_count(text, "[", "]") == 0
                    and shared.bracket_count(text, "{", "}") == 0):
                return region

        view.insert(edit, begin, left_bracket)

        if not (begin == end and (shared.is_inside_string(view, begin)
                                  or shared.is_inside_comment(view, begin))):
            view.insert(edit, end + 1, right_bracket)

        return begin + 1
Ejemplo n.º 10
0
	def f(region):
		begin = region.begin()
		end = region.end()

		if shared.is_strict_mode():
			text = view.substr(region)
			if not (shared.bracket_count(text, "(", ")") == 0 and
			        shared.bracket_count(text, "[", "]") == 0 and
			        shared.bracket_count(text, "{", "}") == 0):
				return region

		view.insert(edit, begin, left_bracket)

		if not (begin == end and
		        (shared.is_inside_string(view, begin) or
		         shared.is_inside_comment(view, begin))):
			view.insert(edit, end + 1, right_bracket)

		return begin + 1
Ejemplo n.º 11
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
Ejemplo n.º 12
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