Skip to main content

Markdown and reStructuredText in a single file.

Project description

M2R2

PyPI PyPI version Documentation Python package


M2R2 converts a markdown file including reStructuredText (rst) markups to a valid rst format.

M2R: the original

M2R2 is a fork of m2r which hasn't been updated for a long time and there's been no response from the author about a PR fixing a serious issue that broke several pipelines using sphinx3. Every m2r config should work out of the box. I've changed some of the tooling for what I'm mostly using now. Below goes the original readme, changing only what's needed to work with m2r2.

Why another converter?

I wanted to write sphinx document in markdown, since it's widely used now and easy to write code blocks and lists. However, converters using pandoc or recommonmark do not support many rst markups and sphinx extensions. For example, rst's reference link like see `ref`_ (this is very convenient in long document in which same link appears multiple times) will be converted to a code block in HTML like see <code>ref</code>_, which is not expected.

Features

  • Basic markdown and some extensions (see below)
    • inline/block-level raw html
    • fenced-code block
    • tables
    • footnotes ([^1])
  • Inline- and Block-level rst markups
    • single- and multi-line directives (.. directive::)
    • inline-roles (:code:`print(1)` ...)
    • ref-link (see `ref`_)
    • footnotes ([#fn]_)
    • math extension inspired by recommonmark
  • Sphinx extension
    • add markdown support for sphinx
    • mdinclude directive to include markdown from md or rst files
    • option to parse relative links into ref and doc directives (m2r_parse_relative_links)
  • Pure python implementation
    • pandoc is not required

Installation

Python 2.7 or Python 3.4+ is required.

pip install m2r2

Or,

python3 -m pip install m2r2

Usage

Command Line

m2r2 command converts markdown file to rst format.

m2r2 your_document.md [your_document2.md ...]

Then you will find your_document.rst in the same directory.

Programmatic Use

Import m2r2.convert function and call it with markdown text. Then it will return converted text.

from m2r2 import convert
rst = convert('# Title\n\nSentence.')
print(rst)
# Title
# =====
#
# Sentence.

Or, use parse_from_file function to load markdown file and obtain converted text.

from m2r2 import parse_from_file
output = parse_from_file('markdown_file.md')

This is an example of setup.py to write README in markdown, and publish it to PyPI as rst format.

readme_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'README.md')
try:
    from m2r2 import parse_from_file
    readme = parse_from_file(readme_file)
except ImportError:
    # m2r2 may not be installed in user environment
    with open(readme_file) as f:
        readme = f.read()
setup(
    ...,
    long_description=readme,
    ...,
)

Sphinx Integration

In your conf.py, add the following lines.

extensions = [
    ...,
    'm2r2',
]

# source_suffix = '.rst'
source_suffix = ['.rst', '.md']

Write index.md and run make html.

When m2r2 extension is enabled on sphinx and .md file is loaded, m2r2 converts to rst and pass to sphinx, not making new .rst file.

mdinclude directive

Like .. include:: file directive, .. mdinclude:: file directive inserts markdown file at the line.

Note: do not use .. include:: file directive to include markdown file even if in the markdown file, please use .. mdinclude:: file instead.

Restrictions

  • In the rst's directives, markdown is not available. Please write in rst.
  • Column alignment of tables is not supported. (rst does not support this feature)
  • Heading with overline-and-underline is not supported.
    • Heading with underline is OK
  • Rst heading marks are currently hard-coded and unchangeable.
    • H1: =, H2: -, H3: ^, H4: ~, H5: ", H6: #

If you find any bug or unexpected behaviour, please report it to Issues.

Example

See example document and its source code.

Note from the original author: I'm using m2r for writing user guide of WDOM. So you can see it as another example. Its HTML is here, and its source code is here.

Demo editor

Note: This hasn't received any updates.

Demo editor of m2r is available. If you are interested in m2r, please try it.

https://github.com/miyakogi/m2rdemo

Dev install

Please install the dev dependencies and pre-commit hooks with:

pip install -r requirements-dev.txt
pre-commit install

Acknowledgement

m2r is written as an extension of mistune, which is highly extensible pure-python markdown parser. Without the mistune, I couldn't write this. Thank you!

Licence

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

m2r2-0.2.5.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

m2r2-0.2.5-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file m2r2-0.2.5.tar.gz.

File metadata

  • Download URL: m2r2-0.2.5.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for m2r2-0.2.5.tar.gz
Algorithm Hash digest
SHA256 9da08226c7ff0a60c4fce62ad5b60c761d7fd6e8c20bd2b7f9c246bce4dc0685
MD5 f705e957cd13c82ac6c1a8cfd09f050a
BLAKE2b-256 628b2d5df9e75acb9a6d57661ea7b592297be758f832e3f2cdc1d86135da495e

See more details on using hashes here.

File details

Details for the file m2r2-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: m2r2-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 10.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.8.3

File hashes

Hashes for m2r2-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 2fe7e03c41e1d2052b9cf3e76359bbfe64960b8fee9d69dfc1fc6e35ccff01e7
MD5 15d4cad75322dafd9479b8a40d48e5de
BLAKE2b-256 b4b1b26f53614f1f6efd9ec4729990c49b483983284346e517216b13643b7bcf

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page