-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclasses.py
More file actions
112 lines (94 loc) · 3.44 KB
/
classes.py
File metadata and controls
112 lines (94 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
""" Classes """
class NotADocument(Exception):
""" This exeption ocures when we pass not a document to cursor """
class UnvalidCharacter(Exception):
""" This exeption ocures when unvalid character is passed in document """
class EmptyDocDeleting(Exception):
""" This exeption ocures we try to delete character from empty document """
class Document:
""" Document class """
def __init__ (self):
""" Init document """
self.characters = []
self.cursor = Cursor(self)
self.filename = ''
def insert (self, character):
""" Insert character to document """
if not hasattr(character, "character"):
character = Character(character)
self.characters.append(character)
self.cursor.position = len(self.characters) - 1
def delete(self):
""" Delete character """
self.cursor.position = min(self.cursor.position, len(self.characters) - 1)
if len(self.characters) == 0:
raise EmptyDocDeleting
del self.characters[self.cursor.position]
def save(self):
""" Save document """
with open("test.txt", 'w') as file:
line = ""
for character in self.characters:
line += str(character)
file.write(line)
def forward(self):
""" Set cursor one step forward """
self.cursor.forward()
@property
def string(self):
""" Getter property which returns string representation of document characters """
return "".join((str(character) for character in self.characters))
def back(self):
""" Set cursor one step backward """
self.cursor.back()
class Cursor:
""" Cursor class """
def __init__ (self, document):
""" Init cursor """
if not isinstance(document, Document):
raise NotADocument
self.document = document
self.position= 0
def forward(self):
""" Set cursor one step forward """
self.position += 1
def back(self):
""" Set cursor one step backward """
self.position -= 1
def home(self):
""" Set cursor home """
while self.document.characters[self.position-1].character != '\n':
self.position -= 1
if self.position == 0:
# Got to beginning of file before newline break
break
def end(self):
""" Set character to the end """
while self.position< len(self.document.characters)\
and self.document.characters[self.position].character != '\n':
self.position += 1
class Character:
""" Character class """
def __init__(self, character,bold = False, italic = False, underline= False):
""" Init character """
if not isinstance(character, str):
raise UnvalidCharacter
if len(character) != 1:
raise UnvalidCharacter
self.character = character
self.bold = bold
self.italic = italic
self.underline = underline
def __str__(self):
""" Convert object inctance to string """
bold = "*" if self.bold else ''
italic = "/" if self.italic else ''
underline = "_" if self.underline else ''
return bold + italic + underline + self.character
document = Document()
document.insert("h")
document.insert("e")
document.insert(Character('l', bold=True, italic=True))
document.insert(Character('l', bold=True))
document.insert("o")
document.save()