Untitled
unknown
plain_text
a year ago
2.0 kB
10
Indexable
class Memento:
def __init__(self, state: str):
self._state = state
def get_state(self) -> str:
return self._state
class TextEditor:
def __init__(self):
self._content = ""
def add_text(self, text: str) -> None:
self._content += text
def delete_text(self, num_chars: int) -> None:
self._content = self._content[:-num_chars]
def save(self) -> Memento:
return Memento(self._content)
def restore(self, memento: Memento) -> None:
self._content = memento.get_state()
def get_text(self) -> str:
return self._content
class Caretaker:
def __init__(self, editor: TextEditor):
self._editor = editor
self._history = []
self._redo_stack = []
def save(self) -> None:
self._history.append(self._editor.save())
self._redo_stack.clear() # Clear redo stack on new save
def undo(self) -> None:
if not self._history:
return
# Save current state for redo
self._redo_stack.append(self._editor.save())
# Restore last saved state
memento = self._history.pop()
self._editor.restore(memento)
def redo(self) -> None:
if not self._redo_stack:
return
# Save current state for undo
self._history.append(self._editor.save())
# Restore last undone state
memento = self._redo_stack.pop()
self._editor.restore(memento)
# Example Usage:
editor = TextEditor()
caretaker = Caretaker(editor)
editor.add_text("Hello")
caretaker.save()
editor.add_text(" World")
caretaker.save()
editor.delete_text(5)
caretaker.save()
print(editor.get_text()) # Output: "Hello"
caretaker.undo()
print(editor.get_text()) # Output: "Hello World"
caretaker.undo()
print(editor.get_text()) # Output: "Hello"
caretaker.redo()
print(editor.get_text()) # Output: "Hello World"
Editor is loading...
Leave a Comment