from dataclasses import dataclass, field
from bebop.gemtext import parse_gemtext, Title
from bebop.metalines import generate_metalines
from bebop.links import Links
@dataclass
class Page:
"""Page-related data.
Attributes:
- metalines: lines ready to be rendered.
- links: Links instance, mapping IDs to links on the page; this data is
redundant as the links' URLs/IDs are already available in the
corresponding metalines, it is meant to be used as a quick map for link ID
lookup and disambiguation.
- title: optional page title.
"""
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, links, title = parse_gemtext(gemtext)
metalines = generate_metalines(elements, 80)
return Page(metalines, links, title)