Source code for httk.serve.web.renderers.httkweb_compat
from pathlib import Path
from docutils.core import publish_doctree, publish_from_doctree
from docutils.writers.html5_polyglot import Writer
from ._frontmatter import split_front_matter
from .base import RenderResult
from .rst import RstRenderer
[docs]
class HttkwebCompatRenderer:
"""
Minimal compatibility renderer for legacy .httkweb files.
Old .httkweb pages typically have YAML-like front matter bounded by dashes,
followed by text that is close to reStructuredText.
"""
[docs]
def render(self, source_path: Path) -> RenderResult:
source = source_path.read_text(encoding="utf-8")
metadata, body = split_front_matter(source)
document = publish_doctree(
body,
source_path=str(source_path),
settings_overrides={
"raw_enabled": False,
"file_insertion_enabled": False,
},
)
line_offset = len(source.splitlines()) - len(body.splitlines())
widgets = RstRenderer()._extract_widgets(document, source_path, line_offset=line_offset)
writer = Writer()
publish_from_doctree(
document,
writer=writer,
settings_overrides={"raw_enabled": False, "file_insertion_enabled": False},
)
html = writer.parts.get("html_body", "")
return RenderResult(html=html, metadata=dict(metadata), widgets=widgets)