added table support and cleaned up a few other things
This commit is contained in:
parent
6fd3e868ac
commit
043cc2051c
112
uml.py
112
uml.py
|
@ -1,6 +1,7 @@
|
|||
from fileinput import input as finput
|
||||
import re
|
||||
|
||||
class UntitledError: pass
|
||||
class UntitledError(BaseException): pass
|
||||
class InternalError(UntitledError): pass
|
||||
class ParsingError(UntitledError): pass
|
||||
class MiscError(UntitledError): pass
|
||||
|
@ -11,8 +12,42 @@ class Element:
|
|||
else: self.data = data
|
||||
self.element = element
|
||||
def append(self, string, space=False):
|
||||
if space: self.data += " "
|
||||
self.data += string
|
||||
if type(data) == str:
|
||||
if space: self.data += " "
|
||||
self.data += string
|
||||
else: raise InternalError("Appending to object!")
|
||||
def set(self, data):
|
||||
self.data = data
|
||||
def __str__(self):
|
||||
return str((str(self.element), str(self.data)))
|
||||
def __repl__(self): return self.__str__()
|
||||
class Table:
|
||||
def __init__(self, data=None):
|
||||
if data == None: self.data = []
|
||||
else:
|
||||
self.data = []
|
||||
self.addrow(data)
|
||||
def addrow(self, data):
|
||||
if type(data) == str:
|
||||
buf = [i.rstrip().lstrip() for i in data.split("|")]
|
||||
if len(self.data) > 0:
|
||||
if len(self.data[-1]) == len(buf):
|
||||
self.data.append(buf)
|
||||
else:
|
||||
raise ParsingError("tables must have uniform dimensions throughout")
|
||||
else:
|
||||
self.data.append(buf)
|
||||
elif type(data) == list:
|
||||
if len(self.data) > 0:
|
||||
if len(self.data[-1]) == len(data):
|
||||
self.data.append(data)
|
||||
else:
|
||||
raise ParsingError("tables must have uniform dimensions throughout")
|
||||
else:
|
||||
self.data.append(data)
|
||||
def __str__(self):
|
||||
return str(self.data)
|
||||
def __repl__(self): return self.__str__()
|
||||
|
||||
def printchain(chain):
|
||||
for i in chain:
|
||||
|
@ -20,35 +55,50 @@ def printchain(chain):
|
|||
else: print(i.element)
|
||||
|
||||
chain = []
|
||||
for i in finput():
|
||||
i = i.rstrip()
|
||||
flags = {
|
||||
"TABLE_PREV": False,
|
||||
}
|
||||
def main():
|
||||
for i in finput():
|
||||
i = i.rstrip()
|
||||
|
||||
# ignore blank lines
|
||||
if len(i) == 0: continue
|
||||
# ignore blank lines
|
||||
if len(i) == 0: continue
|
||||
|
||||
# lines with text
|
||||
if i[0].isalpha(): chain.append(Element("p", i))
|
||||
# lines with text
|
||||
if i[0].isalpha(): chain.append(Element("p", i))
|
||||
|
||||
# we have a processing command
|
||||
if not i[0].isalpha():
|
||||
command = ""
|
||||
params = ""
|
||||
counter = 0
|
||||
for j in i:
|
||||
if not j.isalpha() \
|
||||
and not j == ' ':
|
||||
command += j
|
||||
else:
|
||||
if j == ' ':
|
||||
params = i[counter + 1:]
|
||||
# we have a processing command
|
||||
if not i[0].isalpha():
|
||||
command = ""
|
||||
params = ""
|
||||
counter = 0
|
||||
for j in i:
|
||||
if not j.isalpha() \
|
||||
and not j == ' ':
|
||||
command += j
|
||||
else:
|
||||
params = i[counter:]
|
||||
break
|
||||
counter += 1
|
||||
if command[0] == "#": chain.append(Element("h" + str(len(command)), params))
|
||||
elif command == "%": chain.append(Element("c", params))
|
||||
elif command == "*": chain.append(Element("l", params))
|
||||
elif command == "-": chain.append(Element("l", params))
|
||||
elif command == ">": chain.append(Element("q", params))
|
||||
elif command == "=": chain.append(Element("r", params))
|
||||
printchain(chain)
|
||||
if j == ' ':
|
||||
params = i[counter + 1:]
|
||||
else:
|
||||
params = i[counter:]
|
||||
break
|
||||
counter += 1
|
||||
if command[0] == "#": chain.append(Element("h" + str(len(command)), params))
|
||||
elif command == "%": chain.append(Element("c", params))
|
||||
elif command == "*": chain.append(Element("l", params))
|
||||
elif command == "-": chain.append(Element("l", params))
|
||||
elif command == ">": chain.append(Element("q", params))
|
||||
elif command == "=": chain.append(Element("r", params))
|
||||
elif command == "|":
|
||||
if flags["TABLE_PREV"]:
|
||||
chain[-1].data.addrow(params)
|
||||
continue
|
||||
else:
|
||||
chain.append(Element("t", Table(params)))
|
||||
flags["TABLE_PREV"] = True
|
||||
continue
|
||||
flags["TABLE_PREV"] = False
|
||||
printchain(chain)
|
||||
|
||||
if __name__ == "__main__": main()
|
||||
|
|
Loading…
Reference in New Issue