Learning by doing: Reading books and trying to understand the (code) examples
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

85 lines
2.2 KiB

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