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
|
from textual.widgets import Button, Static
from textual.app import ComposeResult
from textual.containers import Container
class Gemtext(Static):
"""Gemtext 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")
if line.startswith("=>"):
path = line[2:].lstrip().split(' ')[0]
text = ' '.join(line[2:].lstrip().split(' ')[1:])
self.mount(Button(text or path, 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))
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()
|