From 74c1b89b728d7d1013b714adf39737cd27e045f3 Mon Sep 17 00:00:00 2001 From: Zach DeCook Date: Sat, 14 Jan 2023 09:07:07 -0500 Subject: mime: Support plaintext format as well --- mime/gemtext.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ mime/plaintext.py | 16 ++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 mime/gemtext.py create mode 100644 mime/plaintext.py (limited to 'mime') diff --git a/mime/gemtext.py b/mime/gemtext.py new file mode 100644 index 0000000..9436d3f --- /dev/null +++ b/mime/gemtext.py @@ -0,0 +1,47 @@ +from textual.widgets import Button, Static +from textual.app import ComposeResult +from textual.containers import Container +from rich.text import Text + +class Gemtext(Static): + """Gemtext widget.""" + inPre = False + + def __init__(self, fp, id): + super().__init__(id=id) + self.addlines(fp) + + def addlines(self, fp): + for lin in fp: + line = lin + if type(line) is bytes: + line = line.decode("UTF-8") + line = line.rstrip("\r\n") + if line.startswith("```"): + self.inPre = not self.inPre + if self.inPre: + self.inPre = Preformatted() + self.mount(self.inPre) + elif self.inPre: + self.inPre.mount(Static(line, markup=False)) + elif line.startswith("=>"): + path = line[2:].lstrip().split(' ')[0] + text = ' '.join(line[2:].lstrip().split(' ')[1:]) + self.mount(Button(Text(text or path,overflow="fold"), name=path)) + elif line.startswith("#"): + count = line.split(' ')[0][0:3].count("#") + w = Static(line.lstrip("#"), markup=False, classes="header h"+str(count)) + self.mount(w) + else: + self.mount(Static(line, markup=False)) + +class Preformatted(Container): + pass + +if __name__ == "__main__": + from textual.app import App + class Test(App): + def compose(self) -> ComposeResult: + yield Gemtext(txt="#title\n=> /href link text\nworld star hiphop", id="yo") + app = Test() + app.run() diff --git a/mime/plaintext.py b/mime/plaintext.py new file mode 100644 index 0000000..ff548e5 --- /dev/null +++ b/mime/plaintext.py @@ -0,0 +1,16 @@ +from textual.widgets import Static + +class Plaintext(Static): + """Plaintext widget.""" + + def __init__(self, fp, id): + super().__init__(id=id) + self.addlines(fp) + + def addlines(self, fp): + for lin in fp: + line = lin + if type(line) is bytes: + line = line.decode("UTF-8") + line = line.rstrip("\r\n") + self.mount(Static(line, markup=False)) -- cgit 1.4.1