music-kraken-core/music_kraken/objects/formatted_text.py

59 lines
1.3 KiB
Python
Raw Normal View History

2024-04-09 10:21:03 +00:00
import mistune
from markdownify import markdownify as md
2023-02-03 14:21:59 +00:00
def plain_to_markdown(plain: str) -> str:
return plain.replace("\n", " \n")
2024-04-09 10:21:03 +00:00
class FormattedText:
html = ""
2023-02-03 14:21:59 +00:00
def __init__(
self,
markdown: str = None,
html: str = None,
plain: str = None,
) -> None:
2024-04-09 10:21:03 +00:00
if html is not None:
self.html = html
elif markdown is not None:
self.html = mistune.markdown(markdown)
elif plain is not None:
self.html = mistune.markdown(plain_to_markdown(plain))
2023-03-13 13:28:28 +00:00
@property
def is_empty(self) -> bool:
2024-04-10 16:18:52 +00:00
return self.html == ""
def __eq__(self, other) -> False:
if type(other) != type(self):
return False
if self.is_empty and other.is_empty:
return True
2024-05-08 19:06:40 +00:00
return self.html == other.html
2024-04-09 10:21:03 +00:00
@property
def markdown(self) -> str:
2024-04-19 12:05:05 +00:00
return md(self.html).strip()
2024-05-21 14:47:38 +00:00
@markdown.setter
def markdown(self, value: str) -> None:
self.html = mistune.markdown(value)
@property
def plain(self) -> str:
md = self.markdown
return md.replace("\n\n", "\n")
2024-05-21 14:47:38 +00:00
@plain.setter
def plain(self, value: str) -> None:
self.html = mistune.markdown(plain_to_markdown(value))
2024-04-09 10:21:03 +00:00
def __str__(self) -> str:
return self.markdown
plaintext = plain
2024-04-09 10:21:03 +00:00