Init
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import argparse
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from md2gost.parser import Parser
|
||||
from md2gost.render import Renderer
|
||||
|
||||
|
||||
def main():
|
||||
cli = argparse.ArgumentParser(
|
||||
prog="md2gost",
|
||||
description="Markdown → LaTeX конвертер по ГОСТ Р 7.0.5-2008",
|
||||
)
|
||||
cli.add_argument("input", type=Path, help="путь к .md файлу")
|
||||
cli.add_argument(
|
||||
"-o", "--output", type=Path, default=Path("."),
|
||||
help="выходная директория (по умолчанию текущая)",
|
||||
)
|
||||
cli.add_argument(
|
||||
"--no-pdf", action="store_true",
|
||||
help="только .tex, без компиляции в PDF",
|
||||
)
|
||||
args = cli.parse_args()
|
||||
|
||||
if not args.input.exists():
|
||||
print(f"ошибка: {args.input} не найден", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
args.output.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
md_text = args.input.read_text(encoding="utf-8")
|
||||
parser = Parser(md_text)
|
||||
renderer = Renderer(parser.tokens, parser.front_matter)
|
||||
latex = renderer.render()
|
||||
|
||||
tex_path = args.output / args.input.with_suffix(".tex").name
|
||||
tex_path.write_text(latex, encoding="utf-8")
|
||||
print(f"→ {tex_path}")
|
||||
|
||||
if not args.no_pdf:
|
||||
pdf_path = args.output / args.input.with_suffix(".pdf").name
|
||||
result = subprocess.run(
|
||||
["xelatex", "-interaction=nonstopmode", "-output-directory", str(args.output), str(tex_path)],
|
||||
capture_output=True, text=True,
|
||||
)
|
||||
if not pdf_path.exists():
|
||||
print(result.stdout[-2000:], file=sys.stderr)
|
||||
sys.exit(1)
|
||||
print(f"→ {pdf_path}")
|
||||
if result.returncode != 0:
|
||||
print(" (предупреждения xelatex, PDF собран)", file=sys.stderr)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user