|
|
- class Document:
-
- def __init__(self):
- self.characters = []
- self.cursor = Cursor(self)
- self.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):
- del self.characters[self.cursor.position]
-
- def save(self):
- f = open(self.filename, "w")
- f.write("".join(self.characters))
- f.close()
-
- @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):
- self.position += 1
-
- def back(self):
- self.position -= 1
-
- def home(self):
- while self.document.characters[self.position - 1].character != "\n":
- self.position -= 1
- 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.position += 1
-
- class Character:
-
- def __init__(self, character, bold=False, italic=False, underline=False):
- assert len(character) == 1
- 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
-
|