Major completion provider overhaul; pluigin load and pattern improvements; css overhaul/cleanup; source view state modes added
This commit is contained in:
94
plugins/depricated/search_replace/replace_mixin.py
Normal file
94
plugins/depricated/search_replace/replace_mixin.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# Python imports
|
||||
|
||||
# Lib imports
|
||||
|
||||
# Application imports
|
||||
|
||||
|
||||
|
||||
class ReplaceMixin:
|
||||
def replace(self, widget):
|
||||
replace_text = self._replace_entry.get_text()
|
||||
if self.find_text and replace_text:
|
||||
self._buffer.begin_user_action()
|
||||
|
||||
iter = self._buffer.get_start_iter()
|
||||
search_tag = self._tag_table.lookup(self.search_tag)
|
||||
|
||||
iter.forward_to_tag_toggle(search_tag)
|
||||
self._do_replace(iter, replace_text)
|
||||
self._active_src_view.scroll_to_iter( iter, 0.0, True, 0.0, 0.0 )
|
||||
|
||||
self._buffer.end_user_action()
|
||||
|
||||
def replace_all(self, widget):
|
||||
replace_text = self._replace_entry.get_text()
|
||||
if self.find_text:
|
||||
self._buffer.begin_user_action()
|
||||
|
||||
mark = self._buffer.get_insert()
|
||||
iter = self._buffer.get_start_iter()
|
||||
search_tag = self._tag_table.lookup(self.search_tag)
|
||||
|
||||
while iter.forward_to_tag_toggle(search_tag):
|
||||
self._do_replace(iter, replace_text)
|
||||
iter = self._buffer.get_start_iter()
|
||||
|
||||
self._buffer.end_user_action()
|
||||
|
||||
|
||||
def _do_replace(self, iter, text):
|
||||
start, end = self.get_start_end(iter)
|
||||
self.replace_in_buffer(start, end, text)
|
||||
|
||||
def replace_in_buffer(self, start, end, text):
|
||||
pos_mark = self._buffer.create_mark("find-replace", end, True)
|
||||
self._buffer.delete(start, end)
|
||||
replace_iter = self._buffer.get_iter_at_mark(pos_mark)
|
||||
self._buffer.insert(replace_iter, text)
|
||||
|
||||
def get_start_end(self, iter):
|
||||
start = iter.copy()
|
||||
end = None
|
||||
|
||||
while True:
|
||||
iter.forward_char()
|
||||
tags = iter.get_tags()
|
||||
valid = False
|
||||
for tag in tags:
|
||||
if tag.props.name and self.search_tag in tag.props.name:
|
||||
valid = True
|
||||
break
|
||||
|
||||
if valid:
|
||||
continue
|
||||
|
||||
end = iter.copy()
|
||||
break
|
||||
|
||||
return start, end
|
||||
|
||||
# NOTE: Below, lovingly taken from Hamad Al Marri's Gamma text editor.
|
||||
# Link: https://gitlab.com/hamadmarri/gamma-text-editor
|
||||
def is_whole_word(self, match_start, match_end):
|
||||
is_prev_a_char = True
|
||||
is_next_a_char = True
|
||||
|
||||
prev_iter = match_start.copy()
|
||||
next_iter = match_end.copy()
|
||||
if not prev_iter.backward_char():
|
||||
is_prev_a_char = False
|
||||
else:
|
||||
c = prev_iter.get_char()
|
||||
is_prev_a_char = (c.isalpha() or c.isdigit())
|
||||
|
||||
if not next_iter:
|
||||
is_next_a_char = False
|
||||
else:
|
||||
c = next_iter.get_char()
|
||||
is_next_a_char = (c.isalpha() or c.isdigit())
|
||||
|
||||
is_word = (not is_prev_a_char and not is_next_a_char)
|
||||
|
||||
# Note: Both must be false to be a word...
|
||||
return is_word
|
||||
Reference in New Issue
Block a user