|
|
- 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
|