diff --git a/src/window.py b/src/window.py
index 48e6836..472639f 100644
--- a/src/window.py
+++ b/src/window.py
@@ -217,8 +217,11 @@ class AlpacaWindow(Adw.ApplicationWindow):
normal_text = text[pos:]
if normal_text.strip():
parts.append({"type": "normal", "text": normal_text.strip()})
- bold_pattern = re.compile(r'\*\*(.*?)\*\*') #**text**
- code_pattern = re.compile(r'`(.*?)`') #`text`
+ bold_pattern = re.compile(r'\*\*(.*?)\*\*') #"**text**"
+ code_pattern = re.compile(r'`(.*?)`') #"`text`"
+ h1_pattern = re.compile(r'^#\s(.*)$') #"# text"
+ h2_pattern = re.compile(r'^##\s(.*)$') #"## text"
+ markup_pattern = re.compile(r'<(b|u|tt|span.*)>(.*?)<\/(b|u|tt|span)>') #heh butt span, I'm so funny
for part in parts:
if part['type'] == 'normal':
message_text = Gtk.TextView(
@@ -239,10 +242,23 @@ class AlpacaWindow(Adw.ApplicationWindow):
footer = "\n\n" + part['text'].split('\n')[-1] + ""
part['text'] = '\n'.join(part['text'].split("\n")[:-1])
+ part['text'] = part['text'].replace("\n* ", "\n• ")
+ part['text'] = GLib.markup_escape_text(part['text'])
part['text'] = code_pattern.sub(r'\1', part['text'])
part['text'] = bold_pattern.sub(r'\1', part['text'])
- message_buffer.insert_markup(message_buffer.get_end_iter(), part['text'], len(part['text']))
- #message_buffer.insert(message_buffer.get_end_iter(), part['text'])
+ part['text'] = h1_pattern.sub(r'\1', part['text'])
+ part['text'] = h2_pattern.sub(r'\1', part['text'])
+
+ position = 0
+ for match in markup_pattern.finditer(part['text']):
+ start, end = match.span()
+ if position < start:
+ message_buffer.insert(message_buffer.get_end_iter(), part['text'][position:start])
+ message_buffer.insert_markup(message_buffer.get_end_iter(), match.group(0), len(match.group(0)))
+ position = end
+
+ if position < len(part['text']):
+ message_buffer.insert(message_buffer.get_end_iter(), part['text'][position:])
if footer: message_buffer.insert_markup(message_buffer.get_end_iter(), footer, len(footer))