49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
|
|
import re
|
|
|
|
from .data import Message
|
|
|
|
|
|
def normalize_line(line: str) -> str:
|
|
line = re.sub(r'(<[\w ]+>)', r'`\1`', line)
|
|
line = re.sub(r'(\$\$\$)', r'`\1`', line)
|
|
return line.strip()
|
|
|
|
def format_message_as_citation(out: list[str], msg: Message) -> None:
|
|
out.append(f'{msg.sent_at.date()} {msg.sent_at.time()} [[{msg.sender}]]:')
|
|
out.append('\n')
|
|
for line in msg.text.strip().split('\n'):
|
|
out.append(f'> {normalize_line(line)}\n')
|
|
del line
|
|
out.append('\n')
|
|
|
|
|
|
def format_message_as_table(out: list[str], msg: Message) -> None:
|
|
out.append(f'| {msg.sent_at} | [[{msg.sender}]] | ')
|
|
for line in msg.text.split('\n'):
|
|
out.append(f'{line}')
|
|
del line
|
|
out.append('|\n')
|
|
|
|
|
|
def format_messages(messages: list[Message], title: str) -> str:
|
|
out = ['# ', title, '\n\n']
|
|
|
|
as_table = False
|
|
|
|
for msg_idx, msg in enumerate(messages):
|
|
if msg_idx == 0 or messages[msg_idx - 1].sent_at.date() != msg.sent_at.date():
|
|
out.append('---\n')
|
|
out.append(f'## [[{msg.sent_at.date()}]]\n\n')
|
|
if as_table:
|
|
out.append('| sent at | sender | text |\n')
|
|
out.append('| ------- | ------ | ---- |\n')
|
|
|
|
if as_table:
|
|
format_message_as_table(out, msg)
|
|
else:
|
|
format_message_as_citation(out, msg)
|
|
del msg
|
|
|
|
return ''.join(out)
|