Coding style
- Cleanup and optimize text widget. - max_line_length is fully calculated less often.
This commit is contained in:
parent
59314ad325
commit
d0a73b89b6
1 changed files with 21 additions and 17 deletions
|
|
@ -87,37 +87,41 @@ class Text:
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.lines)
|
return len(self.lines)
|
||||||
|
|
||||||
def __getitem__(self, line_index):
|
|
||||||
return self.lines[line_index]
|
|
||||||
|
|
||||||
@functools.lru_cache(maxsize=5000)
|
|
||||||
def _convert_line(self, line, max_line_length):
|
|
||||||
return expand_str(line).ljust(max_line_length)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
if type(key) == int:
|
|
||||||
self._replace_lines(slice(key, key + 1), [value])
|
|
||||||
else: # slice
|
|
||||||
self._replace_lines(key, value)
|
|
||||||
|
|
||||||
@functools.cached_property
|
@functools.cached_property
|
||||||
def max_line_length(self):
|
def max_line_length(self):
|
||||||
return max(len(expand_str(line)) for line in self.lines)
|
return max(len(expand_str(line)) for line in self.lines)
|
||||||
|
|
||||||
def _replace_lines(self, slice_, new_lines):
|
def _new_line(self, line):
|
||||||
self.lines[slice_] = new_lines
|
self.max_line_length = max(self.max_line_length, len(expand_str(line)))
|
||||||
|
|
||||||
|
def __getitem__(self, line_index):
|
||||||
|
return self.lines[line_index]
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
if type(key) == int:
|
||||||
|
if len(expand_str(self.lines[key])) != self.max_line_length:
|
||||||
|
self.lines[key] = value
|
||||||
|
self._new_line(value)
|
||||||
|
return
|
||||||
|
self.lines[key] = value
|
||||||
with contextlib.suppress(AttributeError):
|
with contextlib.suppress(AttributeError):
|
||||||
del self.max_line_length
|
del self.max_line_length
|
||||||
|
|
||||||
def insert(self, index, line):
|
def insert(self, index, line):
|
||||||
self._replace_lines(slice(index, index), [line])
|
self.lines.insert(index, line)
|
||||||
|
self._new_line(line)
|
||||||
|
|
||||||
def append(self, line):
|
def append(self, line):
|
||||||
self.insert(len(self.lines), line)
|
self.lines.append(line)
|
||||||
|
self._new_line(line)
|
||||||
|
|
||||||
def get_text(self):
|
def get_text(self):
|
||||||
return "\n".join(self)
|
return "\n".join(self)
|
||||||
|
|
||||||
|
@functools.lru_cache(maxsize=5000)
|
||||||
|
def _convert_line(self, line, max_line_length):
|
||||||
|
return expand_str(line).ljust(max_line_length)
|
||||||
|
|
||||||
def appearance(self):
|
def appearance(self):
|
||||||
return [self._convert_line(line, self.max_line_length) for line in self.lines]
|
return [self._convert_line(line, self.max_line_length) for line in self.lines]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue