diff --git a/omicron/ssg/markdown.py b/omicron/ssg/markdown.py index dc9ab38..c7e9ea0 100644 --- a/omicron/ssg/markdown.py +++ b/omicron/ssg/markdown.py @@ -1,6 +1,6 @@ from typing import cast from markdown_it import MarkdownIt -from markdown_it.token import Token +from markdown_it.token import Token as Token from pygments import highlight as pygments_highlight from pygments.formatters import HtmlFormatter from pygments.lexers import get_lexer_by_name @@ -32,7 +32,7 @@ def highlight(code: str, lang: str, attrs: str) -> str: md = MarkdownIt(options_update={"highlight": highlight}) -def extract_summary(tokens: list[Token]) -> Markup: +def render_summary(tokens: list[Token]) -> Markup: if not tokens or tokens[0].type != "paragraph_open" or tokens[0].hidden: raise MarkdownError( "Body does not start with a paragraph; set 'summary' in frontmatter" @@ -43,11 +43,9 @@ def extract_summary(tokens: list[Token]) -> Markup: raise MarkdownError("Content has no paragraph to use as summary") -def parse(body: str, include_summary: bool = True) -> tuple[Markup, Markup | None]: - tokens = md.parse(body) - if include_summary: - summary = extract_summary(tokens) - else: - summary = None - content = Markup(md.renderer.render(tokens, md.options, {})) - return content, summary +def render(tokens: list[Token]) -> Markup: + return Markup(md.renderer.render(tokens, md.options, {})) + + +def parse(body: str) -> list[Token]: + return md.parse(body) diff --git a/omicron/ssg/output/article.py b/omicron/ssg/output/article.py index 068ceca..63ae7e9 100644 --- a/omicron/ssg/output/article.py +++ b/omicron/ssg/output/article.py @@ -29,9 +29,10 @@ class Article(Content): self.title: str = meta["title"] def write(self) -> None: - content, summary = md.parse(self.read_body(), self.summary is None) - if summary is not None: - self.summary = summary + tokens = md.parse(self.read_body()) + if self.summary is None: + self.summary = md.render_summary(tokens) + content = md.render(tokens) template = self.site.jinja_env.get_template("article.html") html = template.render(page=self, content=content, site=self.site)