Bebop/bebop/page.py
dece d6bcd1f706 page: split page/page_pad modules
Also add title to Page but really this needs a big cleanup.
2021-03-18 01:55:31 +01:00

28 lines
895 B
Python

from dataclasses import dataclass, field
from bebop.gemtext import parse_gemtext, Title
from bebop.rendering import generate_metalines
from bebop.links import Links
@dataclass
class Page:
"""Page-related data."""
metalines: list = field(default_factory=list)
links: Links = field(default_factory=Links)
title: str = ""
@staticmethod
def from_gemtext(gemtext: str):
"""Produce a Page from a Gemtext file or string."""
elements = parse_gemtext(gemtext)
metalines = generate_metalines(elements, 80)
links = Links.from_metalines(metalines)
# TODO this is horrible; merge parsing with page generation directly
title = ""
for element in elements:
if isinstance(element, Title) and element.level == 1:
title = element.text
break
return Page(metalines, links, title)