Skip to main content

An mdformat plugin for `mkdocs`.

Project description

mdformat-mkdocs

Build Status PyPI version

An mdformat plugin for mkdocs and packages commonly used with MkDocs (mkdocs-material, mkdocstrings, and python-markdown)

Supports:

  • Indents are converted to four-spaces instead of two
    • Note: when specifying --align-semantic-breaks-in-lists, the nested indent for ordered lists is three, but is otherwise a multiple of four
  • Unordered list bullets are converted to dashes (-) instead of *
  • By default, ordered lists are standardized on a single digit (1. or 0.) unless --number is specified, then mdformat-mkdocs will apply consecutive numbering to ordered lists for consistency with mdformat
  • MkDocs-Material Admonitions*
    • *Note: mdformat-admon will format the same admonitions, but for consistency with the mkdocs styleguide, an extra space will be added by this package (#22)
  • MkDocs-Material Content Tabs*
    • *Note: the markup (HTML) rendered by this plugin is sufficient for formatting but not for viewing in a browser. Please open an issue if you have a need to generate valid HTML.
  • mkdocstrings Anchors (autorefs)
  • mkdocstrings Cross-References
  • Python Markdown "Abbreviations"*
    • *Note: the markup (HTML) rendered for abbreviations is not useful for rendering. If important, I'm open to contributions because the implementation could be challenging
  • Python Markdown "Snippets"*
    • *Note: the markup (HTML) renders the plain text without implementing the snippet logic. I'm open to contributions if anyone needs full support for snippets

See the example test files, ./tests/pre-commit-test.md and ./tests/format/fixtures.md

mdformat Usage

Add this package wherever you use mdformat and the plugin will be auto-recognized. No additional configuration necessary. For additional information on plugins, see the official mdformat documentation here

Tip: this package specifies an "extra" ('recommended') for plugins that work well with typical documentation managed by mkdocs:

Pre-Commit

repos:
  - repo: https://github.com/executablebooks/mdformat
    rev: 0.7.19
    hooks:
      - id: mdformat
        additional_dependencies:
          - mdformat-mkdocs
          # Or
          # - "mdformat-mkdocs[recommended]"

pipx/uv

pipx install mdformat
pipx inject mdformat mdformat-mkdocs

Or with uv:

uv tool run --from mdformat-mkdocs mdformat

HTML Rendering

To generate HTML output, any of the plugins can be imported from mdit_plugins. For more guidance on MarkdownIt, see the docs: https://markdown-it-py.readthedocs.io/en/latest/using.html#the-parser

from markdown_it import MarkdownIt

from mdformat_mkdocs.mdit_plugins import (
    material_admon_plugin,
    material_content_tabs_plugin,
    mkdocstrings_autorefs_plugin,
    mkdocstrings_crossreference_plugin,
    pymd_abbreviations_plugin,
)

md = MarkdownIt()
md.use(material_admon_plugin)
md.use(material_content_tabs_plugin)
md.use(mkdocstrings_autorefs_plugin)
md.use(mkdocstrings_crossreference_plugin)
md.use(pymd_abbreviations_plugin)

text = "- Line 1\n    - `bash command`\n    - Line 3"
md.render(text)
# <ul>
# <li>Line 1
# <ul>
# <li><code>bash command</code></li>
# <li>Line 3</li>
# </ul>
# </li>
# </ul>

Configuration

mdformat-mkdocs adds the CLI arguments:

  • --align-semantic-breaks-in-lists to optionally align line breaks in numbered lists to 3-spaces. If not specified, the default of 4-indents is followed universally.

    # with: mdformat
    1. Semantic line feed where the following line is
        three spaces deep
    
    # vs. "mdformat --align-semantic-breaks-in-lists"
    1. Semantic line feed where the following line is
       three spaces deep
    
  • --ignore-missing-references if set, do not escape link references when no definition is found. This is required when references are dynamic, such as with python mkdocstrings

You can also use the toml configuration (https://mdformat.readthedocs.io/en/stable/users/configuration_file.html):

# .mdformat.toml

[plugin.mkdocs]
align_semantic_breaks_in_lists = true
ignore_missing_references = true

Contributing

See CONTRIBUTING.md

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

mdformat_mkdocs-4.4.0.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mdformat_mkdocs-4.4.0-py3-none-any.whl (33.1 kB view details)

Uploaded Python 3

File details

Details for the file mdformat_mkdocs-4.4.0.tar.gz.

File metadata

  • Download URL: mdformat_mkdocs-4.4.0.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.4

File hashes

Hashes for mdformat_mkdocs-4.4.0.tar.gz
Algorithm Hash digest
SHA256 168b97c6b500973757d36a95bc6e3c0d162a00dcc82479aa37d0e90a0a6fdfe8
MD5 7091531b9ded8e77bab784e9213f6207
BLAKE2b-256 67b9bdf8e3882e31e3e9b574811eb91c5ac7eff8a823190f8d63c87fd2522501

See more details on using hashes here.

File details

Details for the file mdformat_mkdocs-4.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mdformat_mkdocs-4.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 03f2c40100140c3f2c11afcbcb63c4246f71f8b8ba5255dd74576649c556ee28
MD5 b5deca60a80c8fe7e543cadeb30a3886
BLAKE2b-256 4d6063851b380e29ae6d7860a3b772833df52aa01d265d6cf4e710a0e943b500

See more details on using hashes here.

Supported by

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