From b13d3ab3e9a1a314ea5e97e5221b3708f1841e87 Mon Sep 17 00:00:00 2001 From: randomuser Date: Wed, 30 Jun 2021 00:14:07 -0500 Subject: [PATCH] add paragraph and table rendering support --- uml.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/uml.py b/uml.py index 0a2ce6d..77c1ed4 100644 --- a/uml.py +++ b/uml.py @@ -21,6 +21,7 @@ class Element: 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 = [] @@ -54,6 +55,63 @@ def printchain(chain): if not i.data == None: print(i.data, i.element) else: print(i.element) +def renderer(chain): + for i in chain: + rendered = False + if i.element == "h1": + rendered = True + print("+" + (len(i.data) + 2) * "-" + "+") + print("| " + i.data + " |") + print("+" + (len(i.data) + 2) * "-" + "+") + elif i.element == "h2": + rendered = True + print(" " + i.data + " ") + print("=" * (len(i.data) + 2)) + elif i.element == "h3": + rendered = True + print(" " + i.data + " ") + print("-" * (len(i.data) + 2)) + elif "h" in i.element: + raise ParsingError("you cannot have more than three levels of headers") + elif i.element == "p": + rendered = True + isplit = i.data.split(' ') + buf = "" + + for i in isplit: + if (len(i) + len(buf) + 1) <= 63: + if not len(buf) == 0: buf += " " + buf += i + else: + print(buf) + buf = "" + buf += i + print(buf) + elif i.element == "t": + buf = [0] * len(i.data.data[0]) + for j in i.data.data: + c = 0 + for k in j: + if len(k) > buf[c]: buf[c] = len(k) + c += 1 + width = 0 + for j in buf: + width += j + width += 2 * len(i.data.data[0]) + 1 + print("+" + "-" * width + "+") + # don't ask + for j in range(len(i.data.data)): + c = 0 + for k in range(len(i.data.data[j])): + if len(i.data.data[j][k]) < buf[c]: + i.data.data[j][k] = i.data.data[j][k].ljust(buf[c], " ") + cbuf = "" + for j in i.data.data: + cbuf = "| " + ' | '.join(j) + " |" + print(cbuf) + print("+" + "-" * width + "+") + if rendered: print() + chain = [] flags = { "TABLE_PREV": False, @@ -99,6 +157,8 @@ def main(): flags["TABLE_PREV"] = True continue flags["TABLE_PREV"] = False - printchain(chain) + continue +# printchain(chain) + renderer(chain) if __name__ == "__main__": main()