diff --git a/app/lib/babycode.py b/app/lib/babycode.py
new file mode 100644
index 0000000..817deed
--- /dev/null
+++ b/app/lib/babycode.py
@@ -0,0 +1,66 @@
+from .babycode_parser import Parser
+from markupsafe import escape
+import re
+
+def tag_code(children, attr):
+ is_inline = children.find('\n') == -1
+ if is_inline:
+ return f"{children}
"
+ else:
+ t = children.strip()
+ button = f""
+ return f"
{button}{t}
"
+
+def tag_list(children):
+ list_body = re.sub(r" +\n", "
", children.strip())
+ list_body = re.sub(r"\n\n+", "\1", list_body)
+ return " ".join([f"{x}" for x in list_body.split("\1") if x])
+
+TAGS = {
+ "b": lambda children, attr: f"{children}",
+ "i": lambda children, attr: f"{children}",
+ "s": lambda children, attr: f"{children}",
+ "img": lambda children, attr: f"",
+ "url": lambda children, attr: f"{children}",
+ "quote": lambda children, attr: f"{children}
",
+ "code": tag_code,
+ "ul": lambda children, attr: f"",
+ "ol": lambda children, attr: f"{tag_list(children)}
",
+}
+
+TEXT_ONLY = ["code"]
+
+def break_lines(text):
+ text = re.sub(r" +\n", "
", text)
+ text = re.sub(r"\n\n+", "
", text)
+ return text
+
+def babycode_to_html(s):
+ subj = escape(s.strip().replace('\r\n', '\n').replace('\r', '\n'))
+ parser = Parser(subj)
+ parser.valid_bbcode_tags = TAGS.keys()
+ parser.bbcode_tags_only_text_children = TEXT_ONLY
+
+ elements = parser.parse()
+ out = ""
+ def fold(element, nobr):
+ if isinstance(element, str):
+ if nobr:
+ return element
+ return break_lines(element)
+
+ match element['type']:
+ case "bbcode":
+ c = ""
+ for child in element['children']:
+ _nobr = element['name'] == "code" or element['name'] == "ul" or element['name'] == "ol"
+ c = c + fold(child, _nobr)
+ res = TAGS[element['name']](c, element['attr'])
+ return res
+ case "link":
+ return f"{element['url']}"
+ case "rule":
+ return "
"
+ for e in elements:
+ out = out + fold(e, False)
+ return out
diff --git a/app/lib/babycode_parser.py b/app/lib/babycode_parser.py
index 4a2b8c3..124f384 100644
--- a/app/lib/babycode_parser.py
+++ b/app/lib/babycode_parser.py
@@ -161,7 +161,7 @@ class Parser:
if len(children) == 0:
children.append(ch)
else:
- children[1] = children[1] + ch
+ children[0] = children[0] + ch
else:
element = self.parse_element(children)