Skip to main content

rst2gemtext - Converts reStructuredText to Gemtext (Gemini markup format)

GitHub License Discord Github Actions Black

rst2gemtext aims to convert reStructuredText markup to Gemtext, the markup format used by Gemini. It can be used both as a Python library or as a CLI tool.

This project is currently work in progress.

Requirements

  • Python >= 3.10

  • docutils

  • pygments

Installation

pip install rst2gemtext

Usage

Command Line Interface (CLI)

Example:

rst2gemtext input.rst output.gmi

Usage:

usage: rst2gemtext [-h] [--print-xml] input_rst output_gemtext

Converts reStructuredText to Gemtext (Gemini markup format)

positional arguments:
  input_rst       the reStructuredText file to convert
  output_gemtext  the output Gemtext file

options:
  -h, --help      show this help message and exit
  --print-xml     print the reStructuredText DOM as XML for debugging purpose

Inaccurate output? Report bugs to https://github.com/flozz/rst2gemtext/issues

Python Library

Example: Converting a reStructuredText string to a Gemtext string:

import rst2gemtext
output_gemtext = rst2gemtext.convert("my restructured text string")

Example: Converting a reStructuredText file to a Gemtext file:

import rst2gemtext

with open("input.rst", "r") as input_file:
    input_rst = input_file.read()

output_gemtext = rst2gemtext.convert(input_rst)

with open("output.gmi", "w") as output_file:
    output_file.write(output_gemtext)

Contributing

Questions

If you have any question, you can:

Bugs

Please open an issue on GitHub with as much information as possible if you found a bug:

  • Your operating system / Linux distribution (and its version)

  • How you installed the software

  • All the logs and message outputted by the software

  • etc.

If the issue is about the outputted Gemtext (wrong markup, unsupported reStructuredText feature,…), please provide:

  • An example reStructuedText document that generates the wrong output or that contains the unsupported syntax

  • The wrong Gemtext output (the one currently generated by rst2gemtext)

  • The expected Gemtext output

Pull requests

Please consider filing a bug before starting to work on a new feature; it will allow us to discuss the best way to do it. It is obviously unnecessary if you just want to fix a typo or small errors in the code.

Please note that your code must follow the coding style defined by the pep8 and pass tests. Black and Flake8 are used on this project to enforce the coding style.

Run the tests

You must install Nox first:

pip3 install nox

Then you can check for lint error:

nox --session lint

and run the tests:

nox --session test

You can use following commands to run the tests only on a certain Python version (the corresponding Python interpreter must be installed on your machine):

nox --session test-3.10
nox --session test-3.11
nox --session test-3.12
nox --session test-3.13
nox --session test-3.14

You can also fix coding style errors automatically with:

nox -s black_fix

Support this project

Want to support this project?

Changelog

  • [NEXT] (changes on master, but not released yet):

    • Nothing yet ;)

  • v0.7.1:

    • feat(table): Added support for csv-tables with irregular column counts across rows (@eeshsaxena, #23)

  • v0.7.0:

    • feat(table): Handled docutils csv-table directive and draw ASCII-art table from it (@Dryusdan, @flozz, #22)

    • feat(table): Handled docutils list-table directive and draw ASCII-art table from it (@Dryusdan, @flozz, #22)

  • v0.6.0:

    • feat(label): Handled label nodes (@flozz)

    • feat(footnote): Handled footnote and footnote_reference nodes (@flozz)

    • misc(deps): Added Python 3.14 support (@flozz)

    • misc(deps)!: Removed Python 3.9 support (@flozz)

  • v0.5.0:

    • feat(attribution_node): Added support for attribution nodes used by the epigraph directive (#8, @flozz)

    • fix: Fixed ImportError with docutils >= 0.22 (#7, @flozz)

    • Fix(image_node): Merge image link and its target link if both are identical (#6, @flozz)

    • misc(packaging): Modernized packaging: replaced setup.py and setuptools by pyproject.toml and flit (@flozz)

  • v0.4.0:

    • feat: Skip topic nodes as the ToC will not be generated (@flozz)

    • fix: Fixed bad link list deduplication when a non-breaking space is used in anchor text (@flozz)

    • fix: Fixed troncated tables when multiline content is present in the last row (@flozz)

    • misc(deps): Added Python 3.12, 3.13 support (@flozz)

    • misc(deps)!: Removed Python 3.7, 3.8 support (@flozz)

  • v0.3.1:

    • fix: Fixed truncated tables when last row contains bullet lists (@flozz, #1)

  • v0.3.0:

    • feat: Handle admonitons (admonition, attention, caution, danger, error, hint, important, note, tip and warning nodes) (@flozz)

  • v0.2.0:

    • feat: Pass the source file name to docutils to allow the include directive to work (@flozz)

    • feat: Added a basic support of the table (and associated) nodes (@flozz)

  • v0.1.0:

    • Initial release.

    • Supported rst nodes:

      • block_quote

      • bullet_list

      • caption

      • comment

      • emphasis

      • enumerated_list

      • figure

      • image

      • list_item

      • literal

      • literal_block

      • paragraph

      • raw

      • reference

      • section

      • strong

      • substitution_definition

      • substitution_reference

      • system_message

      • target

      • Text

      • title

      • transition

Metadata

Release files for rst2gemtext 0.7.1

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

Source distribution (sdist)

Source distribution for rst2gemtext 0.7.1
File Size Uploaded
rst2gemtext-0.7.1.tar.gz 26.2 kB Details

Built distribution (wheel)

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

Total release size: 50.8 kB

Release files / rst2gemtext-0.7.1.tar.gz

Download URL rst2gemtext-0.7.1.tar.gz
Size 26.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d833abb6012b21855ce7c88cfab7db07f299dbe293dbcdff91c267c9049e09b2
BLAKE2b-256 checksum
How to use checksums
5486eac6f55aa2044845688f202afed164f1c7a40e01dac630d4e9db68e63ead
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / rst2gemtext-0.7.1-py3-none-any.whl

Download URL rst2gemtext-0.7.1-py3-none-any.whl
Size 24.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dfbb3609790eabad2ae29b3778be2937a7918848bff1a8fa89ab0c9abf5d12c4
BLAKE2b-256 checksum
How to use checksums
ab3d19e7053790979b447a0c6b58a5c25ee604ad3a0c81933268c684b63b2e9b
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

This release

0.7.1 This release

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

1 release file

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