Files
md2gost/md2gost/handlers/heading.py
T

63 lines
1.5 KiB
Python

from __future__ import annotations
from markdown_it.token import Token
from md2gost.handlers.inline import render_inline
from md2gost.registry import block
UNNUMBERED = {
"АННОТАЦИЯ",
"ПЕРЕЧЕНЬ ПРИНЯТЫХ СОКРАЩЕНИЙ",
"ВВЕДЕНИЕ",
"ЗАКЛЮЧЕНИЕ",
"СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ",
}
TOC_HEADING = "СОДЕРЖАНИЕ"
NEWPAGE_BEFORE = {
"ВВЕДЕНИЕ",
"ЗАКЛЮЧЕНИЕ",
"СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ",
}
@block("heading_open")
def heading(r, tok: Token) -> str:
level = int(tok.tag[1])
inline_tok = r.tokens[r.pos + 1]
text = render_inline(inline_tok)
r.pos += 2
upper = text.upper()
if upper == TOC_HEADING:
r.pending_toc = True
return ""
r.current_heading = upper
if upper in UNNUMBERED:
prefix = ""
if upper in NEWPAGE_BEFORE:
prefix = "\\clearpage\n"
toc_entry = ""
if upper in NEWPAGE_BEFORE:
toc_entry = (
f"\n\\phantomsection\\addcontentsline{{toc}}{{section}}{{{text}}}"
)
return (
f"{prefix}"
f"{{\\fontsize{{14pt}}{{18pt}}\\selectfont \\bfseries \\centering {text}\\par}}"
f"{toc_entry}"
)
if level == 1:
return f"\\section{{{text}}}"
elif level == 2:
return f"\\subsection{{{text}}}"
elif level == 3:
return f"\\subsubsection{{{text}}}"
else:
return f"\\textbf{{{text}}}"