[ADD] поддержка LaTeX-математики: dollarmath plugin, math_inline, math_block

This commit is contained in:
Arseny
2026-07-16 09:23:50 +03:00
parent 876d6f28eb
commit 2917c3bca4
5 changed files with 23 additions and 0 deletions
+2
View File
@@ -3,6 +3,7 @@ from md2gost.handlers.heading import heading
from md2gost.handlers.hr import hr from md2gost.handlers.hr import hr
from md2gost.handlers.image import image from md2gost.handlers.image import image
from md2gost.handlers.lists import bullet_list, ordered_list from md2gost.handlers.lists import bullet_list, ordered_list
from md2gost.handlers.math import math_block
from md2gost.handlers.table import table from md2gost.handlers.table import table
from md2gost.handlers.text import paragraph from md2gost.handlers.text import paragraph
@@ -12,6 +13,7 @@ __all__ = [
"heading", "heading",
"image", "image",
"bullet_list", "bullet_list",
"math_block",
"ordered_list", "ordered_list",
"table", "table",
"paragraph", "paragraph",
+2
View File
@@ -50,6 +50,8 @@ def render_inline_tokens(tokens: list[Token]) -> str:
parts.append("}") parts.append("}")
elif tok.type in ("softbreak", "hardbreak"): elif tok.type in ("softbreak", "hardbreak"):
parts.append("~\\\\") parts.append("~\\\\")
elif tok.type == "math_inline":
parts.append(f"${tok.content}$")
else: else:
parts.append(escape_latex(tok.content) if tok.content else "") parts.append(escape_latex(tok.content) if tok.content else "")
return "".join(parts) return "".join(parts)
+15
View File
@@ -0,0 +1,15 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from markdown_it.token import Token
if TYPE_CHECKING:
from md2gost.render import Renderer
def math_block(r: Renderer, tok: Token | None = None) -> str:
tok = r.tokens[r.pos]
content = tok.content.strip()
r.pos += 1
return f"\\[\n{content}\n\\]"
+2
View File
@@ -1,4 +1,5 @@
from markdown_it import MarkdownIt from markdown_it import MarkdownIt
from mdit_py_plugins.dollarmath import dollarmath_plugin
from mdit_py_plugins.front_matter import front_matter_plugin from mdit_py_plugins.front_matter import front_matter_plugin
@@ -9,6 +10,7 @@ class Parser:
MarkdownIt("commonmark", {"breaks": True, "html": True}) MarkdownIt("commonmark", {"breaks": True, "html": True})
.enable("table") .enable("table")
.use(front_matter_plugin) .use(front_matter_plugin)
.use(dollarmath_plugin)
) )
self.tokens = self.md.parse(md_text) self.tokens = self.md.parse(md_text)
self.front_matter = self._extract_front_matter() self.front_matter = self._extract_front_matter()
+2
View File
@@ -8,6 +8,7 @@ from md2gost.handlers import (
heading, heading,
hr, hr,
image, image,
math_block,
ordered_list, ordered_list,
paragraph, paragraph,
table, table,
@@ -24,6 +25,7 @@ _BLOCK: dict[str, Callable[..., str]] = {
"ordered_list_open": ordered_list, "ordered_list_open": ordered_list,
"table_open": table, "table_open": table,
"hr": hr, "hr": hr,
"math_block": math_block,
} }
_INLINE: dict[str, Callable[..., str]] = { _INLINE: dict[str, Callable[..., str]] = {