1
0
Fork 0
mirror of https://github.com/EDeev/converterbot.git synced 2026-10-07 20:49:33 +03:00

md2gost: пакет и командная строка

pip install md2gost → md2gost report.md [-o out.docx] с параметрами шрифта, размера,
интервала и нумерации; также python -m md2gost.
This commit is contained in:
Деев Егор Викторович 2026-10-05 23:24:29 +00:00
parent 18e1a99ed8
commit 7b8e3ce61a
4 changed files with 102 additions and 0 deletions

6
md2gost/__init__.py Normal file
View file

@ -0,0 +1,6 @@
"""md2gost — Markdown в DOCX по ГОСТ 7.32-2017"""
from .converter import DocumentSettings, MarkdownToDocxConverter
__version__ = "1.0.0"
__all__ = ["DocumentSettings", "MarkdownToDocxConverter", "__version__"]

5
md2gost/__main__.py Normal file
View file

@ -0,0 +1,5 @@
import sys
from .cli import main
sys.exit(main())

47
md2gost/cli.py Normal file
View file

@ -0,0 +1,47 @@
import argparse
import sys
from pathlib import Path
from . import __version__
from .converter import DocumentSettings, MarkdownToDocxConverter
def build_parser():
parser = argparse.ArgumentParser(
prog="md2gost",
description="Конвертирует Markdown в DOCX, оформленный по ГОСТ 7.32-2017: поля, шрифт, интервалы, "
"нумерация страниц и заголовков, таблицы, списки, сноски, список литературы.",
)
parser.add_argument("input", type=Path, help="файл .md")
parser.add_argument("-o", "--output", type=Path, help="куда сохранить .docx (по умолчанию — рядом с .md)")
parser.add_argument("--font", default="Times New Roman", help="шрифт (по умолчанию Times New Roman)")
parser.add_argument("--size", type=int, default=14, help="размер основного текста, пт (по умолчанию 14)")
parser.add_argument("--spacing", type=float, default=1.5, help="межстрочный интервал (по умолчанию 1.5)")
parser.add_argument("--no-heading-numbers", action="store_true", help="не нумеровать заголовки")
parser.add_argument("--no-page-numbers", action="store_true", help="не нумеровать страницы")
parser.add_argument("--number-title-page", action="store_true", help="ставить номер и на первой странице")
parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
return parser
def main(argv=None):
args = build_parser().parse_args(argv)
if not args.input.is_file():
print(f"md2gost: файл не найден: {args.input}", file=sys.stderr)
return 1
settings = DocumentSettings()
settings.font_name = args.font
settings.font_size = args.size
settings.line_spacing = args.spacing
settings.auto_numbering_headings = not args.no_heading_numbers
settings.page_numbering = not args.no_page_numbers
settings.exclude_title_page_numbering = not args.number_title_page
output = MarkdownToDocxConverter(settings).convert(str(args.input), str(args.output) if args.output else None)
print(output)
return 0
if __name__ == "__main__":
sys.exit(main())

44
pyproject.toml Normal file
View file

@ -0,0 +1,44 @@
[build-system]
requires = ["hatchling>=1.24"]
build-backend = "hatchling.build"
[project]
name = "md2gost"
dynamic = ["version"]
description = "Markdown to DOCX formatted per GOST 7.32-2017 (Russian standard for reports)"
readme = "README.en.md"
license = "MIT"
license-files = ["LICENSE"]
authors = [{ name = "Egor Deev", email = "egor@deev.space" }]
requires-python = ">=3.9"
dependencies = ["python-docx>=1.1"]
keywords = ["markdown", "docx", "gost", "word", "report", "converter"]
classifiers = [
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
"Environment :: Console",
"Natural Language :: Russian",
"Topic :: Office/Business :: Office Suites",
"Topic :: Text Processing :: Markup :: Markdown",
]
[project.urls]
Homepage = "https://github.com/EDeev/my_converterbot"
Issues = "https://github.com/EDeev/my_converterbot/issues"
Bot = "https://t.me/my_convbot"
[project.scripts]
md2gost = "md2gost.cli:main"
[tool.hatch.version]
path = "md2gost/__init__.py"
[tool.hatch.build.targets.wheel]
packages = ["md2gost"]
[tool.hatch.build.targets.sdist]
include = ["md2gost", "tests/test_md2gost.py", "README.md", "README.en.md", "LICENSE"]
[tool.ruff]
target-version = "py39"
line-length = 120