markdown_renderer.py
markdown_renderer.py
import os
class String:
def __init__(self, string, indent = 0, bullet = False):
self.string = string
self.indent = indent
self.bullet = bullet
self.prefixes = ""
self.italics = False
self.underline = False
self.bold = False
self.colour = False
self.highlight = False
self.sub_element = None
class Tag:
def construct(self, data):
pass
class Data(Tag):
def construct(self, data) -> None:
self.data = data # line of data
class Element(Tag):
def construct(self, data):
self.data = data
def execute(self, *args):
self.data = Tag.execute(self)
for index in range(len(self.data)):
if isinstance(self.data[index], str):
self.data[index] = String(self.data[index])
prev = self.data[0]
for index in range(1, len(self.data)):
prev.sub_element = self.data[index]
prev = self.data[index]
return [self.data[0]]
class Bold(Tag):
def construct(self, data) -> None:
self.data = data
class Main(Tag):
def construct(self, data) -> None:
self.data = data
#self.contains_multiple_tags = True
#print(lines)
#os.system("clear")
for line in lines:
if isinstance(line, String):
line.render()
#print(list(line.string))
else:
print()
#print(list(line))
class Colour(Tag):
def construct(self, data) -> None:
self.data = data
class Highlight(Tag):
def construct(self, data) -> None:
self.data = data
class Bullet(Tag):
def construct(self, data):
self.data = data
class Underline(Tag):
def construct(self, data):
self.data = data
class Italic(Tag):
def construct(self, data):
self.data =data
class Parser:
# parser function <- block of markdown
# parses recursively until just a data block
# data blocks contain one line
def parse(self):
index, tag, data = self.get_tag(self.string, self.last_index)
self.last_index = max(self.last_index, index)
return tag.execute(data)
#g = []
file = None
skip = True
macro_ = False
lines = []
macros = []
for index, arg in enumerate(sys.argv):
if skip:
skip = False
continue
if arg == "-f":
file = open(sys.argv[index + 1], "r")
lines = file.readlines()
file.close()
if file == None:
raise Exception("Need a file")
if macro_:
for line in macros:
macro, m = line.strip().split(":=")
macro = macro.strip()
m = m.strip()
if macro[0] == '\'' and macro[-1] == '\'':
macro = macro[1:-1]
for index, line in enumerate(lines):
if macro in list(map(str.lower, line.replace(',', ' ').replace('.',
' ').replace('<', ' ').replace('>', ' ').split())):
#print(macro)
lines[index] = lines[index].replace(macro, m)
lines[index] = lines[index].replace(macro[0].upper() +
macro[1:], m.replace(macro, macro[0].upper() + macro[1:]))
end_tag = ""
def i(x):
if x == "\n":
return "\n"
else:
return x
#print(lines)
lines = "".join(list(map(i, lines)))
#print(lines)
Main(lines).execute()