Expose tokens in markdown api, update article rendering
This commit is contained in:
+8
-10
@@ -1,6 +1,6 @@
|
|||||||
from typing import cast
|
from typing import cast
|
||||||
from markdown_it import MarkdownIt
|
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 import highlight as pygments_highlight
|
||||||
from pygments.formatters import HtmlFormatter
|
from pygments.formatters import HtmlFormatter
|
||||||
from pygments.lexers import get_lexer_by_name
|
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})
|
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:
|
if not tokens or tokens[0].type != "paragraph_open" or tokens[0].hidden:
|
||||||
raise MarkdownError(
|
raise MarkdownError(
|
||||||
"Body does not start with a paragraph; set 'summary' in frontmatter"
|
"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")
|
raise MarkdownError("Content has no paragraph to use as summary")
|
||||||
|
|
||||||
|
|
||||||
def parse(body: str, include_summary: bool = True) -> tuple[Markup, Markup | None]:
|
def render(tokens: list[Token]) -> Markup:
|
||||||
tokens = md.parse(body)
|
return Markup(md.renderer.render(tokens, md.options, {}))
|
||||||
if include_summary:
|
|
||||||
summary = extract_summary(tokens)
|
|
||||||
else:
|
def parse(body: str) -> list[Token]:
|
||||||
summary = None
|
return md.parse(body)
|
||||||
content = Markup(md.renderer.render(tokens, md.options, {}))
|
|
||||||
return content, summary
|
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ class Article(Content):
|
|||||||
self.title: str = meta["title"]
|
self.title: str = meta["title"]
|
||||||
|
|
||||||
def write(self) -> None:
|
def write(self) -> None:
|
||||||
content, summary = md.parse(self.read_body(), self.summary is None)
|
tokens = md.parse(self.read_body())
|
||||||
if summary is not None:
|
if self.summary is None:
|
||||||
self.summary = summary
|
self.summary = md.render_summary(tokens)
|
||||||
|
content = md.render(tokens)
|
||||||
|
|
||||||
template = self.site.jinja_env.get_template("article.html")
|
template = self.site.jinja_env.get_template("article.html")
|
||||||
html = template.render(page=self, content=content, site=self.site)
|
html = template.render(page=self, content=content, site=self.site)
|
||||||
|
|||||||
Reference in New Issue
Block a user