Expose tokens in markdown api, update article rendering
This commit is contained in:
+8
-10
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user