Broken project to implement a cross-protocol browser in textual
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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()