Browse Source

added error handling for: invalid filename (empty string), file save error, delete error; back() & forward() now safe in range of 0 .. characters list length; some minor refactoring

master
T. Meissner 10 years ago
parent
commit
cd9bc2dd75
1 changed files with 31 additions and 11 deletions
  1. +31
    -11
      python_3_oop/chapter05/editor.py

+ 31
- 11
python_3_oop/chapter05/editor.py View File

@ -1,9 +1,12 @@
class Document:
def __init__(self):
def __init__(self, filename):
self.characters = []
self.cursor = Cursor(self)
self.filename = ""
if len(filename) == 0:
raise FileNameInvalid("Invalid filename")
else:
self.filename = filename
def insert(self, character):
if not hasattr(character, 'character'):
@ -12,12 +15,18 @@ class Document:
self.cursor.forward()
def delete(self):
del self.characters[self.cursor.position]
try:
del self.characters[self.cursor.position]
except IndexError:
print("No character to delete")
def save(self):
f = open(self.filename, "w")
f.write("".join(self.characters))
f.close()
try:
f = open(self.filename, "w")
f.write(self.string)
f.close()
except IOError:
print("Could not safe file")
@property
def string(self):
@ -31,14 +40,16 @@ class Cursor:
self.position = 0
def forward(self):
self.position += 1
if self.position < len(self.document.characters):
self.position += 1
def back(self):
self.position -= 1
if self.position > 0:
self.position -= 1
def home(self):
while self.document.characters[self.position - 1].character != "\n":
self.position -= 1
self.back()
if self.position == 0:
# got to beginning of file before newline
break
@ -46,12 +57,14 @@ class Cursor:
def end(self):
while (self.position < len(self.document.characters) and
self.document.characters[self.position].character != "\n"):
self.position += 1
self.forward()
class Character:
def __init__(self, character, bold=False, italic=False, underline=False):
assert len(character) == 1
if len(character) != 1:
raise CharacterLength("Please insert a single character")
self.character = character
self.bold = bold
self.italic = italic
@ -63,3 +76,10 @@ class Character:
underline = "_" if self.underline else ''
return bold + italic + underline + self.character
class FileNameInvalid(Exception):
pass
class CharacterLength(Exception):
pass

Loading…
Cancel
Save