Skip to main content

My Converter Bot · md2gost

Русский · English

CI PyPI Python License

A Markdown to DOCX converter that follows GOST 7.32-2017 (the Russian standard for research and student reports), plus a Telegram bot for study routine: send a .md and get a report ready to submit, send a project .zip and get a .txt with the folder tree and file contents. The converter is installable on its own as the md2gost package on PyPI. The bot speaks Russian.

Status: personal project, maintained · bot @my_convbot · package md2gost

Pages of a report built with md2gost

Stack: Python 3.9+ · python-docx · aiogram 3 · Docker

md2gost — Markdown → DOCX per GOST

pip install md2gost
md2gost report.md                 # writes report.docx next to it
md2gost report.md -o out.docx --no-heading-numbers

What it does to the document:

  • margins: left 30 mm, right 15, top and bottom 20; Times New Roman 14 pt, 1.5 line spacing, 1.25 cm first-line indent, justified text
  • page numbers at the bottom center, none on the title page
  • section numbering 1., 1.1., 1.1.1.; structural elements ("Введение", "Заключение", "Список литературы" and others) unnumbered, uppercase, centered
  • a page break before every second-level section
  • bulleted lists with dashes and nesting, numbered lists as 1) with numbering restarted per list
  • tables with a "Таблица N" caption on the top left, code blocks and inline code in a monospace font, quotes, footnotes [^1], bold and italic

Command-line options: --font, --size, --spacing, --no-heading-numbers, --no-page-numbers, --number-title-page. From Python:

from md2gost import DocumentSettings, MarkdownToDocxConverter

settings = DocumentSettings()
settings.auto_numbering_headings = True
MarkdownToDocxConverter(settings).convert("report.md", "report.docx")

The Markdown parser is custom and line-based: nested tables and lists inside tables are not supported.

The bot

Send Get
.md a GOST-formatted .docx (the same md2gost, with heading numbers)
project .zip a .txt: folder tree and contents of text files with line numbers, handy for an LLM or a report appendix

Files up to 20 MB. Archives are checked before extraction: at most 5000 files and 200 MB unpacked. Service folders (.git, node_modules, __pycache__, build…) and binary files are skipped. Conversion runs in a separate thread, so the bot never freezes on big files.

git clone https://github.com/EDeev/my_converterbot.git && cd my_converterbot
cp .env.example .env      # BOT_TOKEN from @BotFather
docker compose up -d

Prebuilt image: docker pull ghcr.io/edeev/my_converterbot or docker pull dcr.deev.su/edeev/my_converterbot. Without Docker: pip install -r requirements.txt, then BOT_TOKEN=… python bot.py.

rep_to_txt.py also works on its own: python rep_to_txt.py path/to/project.

Development

pip install -r requirements-dev.txt
ruff check --select E9,F,B . && pytest

CI tests the package on Python 3.9, 3.12 and 3.13 and builds it. On v* tags the package is published to PyPI and the bot's Docker image to GitHub Packages and dcr.deev.su.

License

MIT — see LICENSE.

Author

Egor Deev — GitHub · Telegram · egor@deev.space

Metadata

Release files for md2gost 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for md2gost 1.0.0
File Size Uploaded
md2gost-1.0.0.tar.gz 14.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for md2gost 1.0.0
File Interpreter ABI Platform
md2gost-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 27.9 kB

Release files / md2gost-1.0.0.tar.gz

Download URL md2gost-1.0.0.tar.gz
Size 14.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9a35294dc071408f49b40c594ffe061874851b0a2531eb449d07c2778ded5a11
BLAKE2b-256 checksum
How to use checksums
d27e211f3368634a041a3f020cab58a5b96f6cead5e9987f246c4bf26b6621cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / md2gost-1.0.0-py3-none-any.whl

Download URL md2gost-1.0.0-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
94b48d1203d0e05156c8d78bd3af5cb928400084d62d32669c743bf5292202aa
BLAKE2b-256 checksum
How to use checksums
580d1ac0a0017e02d440e7493d4dbc6d11613a34f33885e3a03dd697369e43db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page