Single Page Builds#

New in version 0.16.0.

Sphinx, and thus MyST-Parser, is built on top of the Docutils package. MyST-Parser offers a renderer, parser and CLI-interface for working directly with Docutils, independent of Sphinx, as described below.

Note

Since these tools are independent of Sphinx, this means they cannot parse any Sphinx or Sphinx extensions specific roles or directives.

On installing MyST-Parser, the following CLI-commands are made available:

  • myst-docutils-html: converts MyST to HTML

  • myst-docutils-html5: converts MyST to HTML5

  • myst-docutils-latex: converts MyST to LaTeX

  • myst-docutils-xml: converts MyST to docutils-native XML

  • myst-docutils-pseudoxml: converts MyST to pseudo-XML (to visualise the AST structure)

Each command can be piped stdin or take a file path as an argument:

$ myst-docutils-html --help
$ echo "Hello World" | myst-docutils-html
$ myst-docutils-html hello-world.md

The commands are based on the Docutils Front-End Tools, and so follow the same argument and options structure, included many of the MyST specific options detailed in Configuration.

Shared Docutils CLI Options
Usage
=====
  myst-docutils-<writer> [options] [<source> [<destination>]]

Options
=======
General Docutils Options
------------------------
--title=TITLE           Specify the document title as metadata.
--generator, -g         Include a "Generated by Docutils" credit and link.
--no-generator          Do not include a generator credit.
--date, -d              Include the date at the end of the document (UTC).
--time, -t              Include the time & date (UTC).
--no-datestamp          Do not include a datestamp of any kind.
--source-link, -s       Include a "View document source" link.
--source-url=<URL>      Use <URL> for a source link; implies --source-link.
--no-source-link        Do not include a "View document source" link.
--toc-entry-backlinks   Link from section headers to TOC entries.  (default)
--toc-top-backlinks     Link from section headers to the top of the TOC.
--no-toc-backlinks      Disable backlinks to the table of contents.
--footnote-backlinks    Link from footnotes/citations to references. (default)
--no-footnote-backlinks
                        Disable backlinks from footnotes and citations.
--section-numbering     Enable section numbering by Docutils.  (default)
--no-section-numbering  Disable section numbering by Docutils.
--strip-comments        Remove comment elements from the document tree.
--leave-comments        Leave comment elements in the document tree. (default)
--strip-elements-with-class=<class>
                        Remove all elements with classes="<class>" from the
                        document tree. Warning: potentially dangerous; use
                        with caution. (Multiple-use option.)
--strip-class=<class>   Remove all classes="<class>" attributes from elements
                        in the document tree. Warning: potentially dangerous;
                        use with caution. (Multiple-use option.)
--report=<level>, -r <level>
                        Report system messages at or higher than <level>:
                        "info" or "1", "warning"/"2" (default), "error"/"3",
                        "severe"/"4", "none"/"5"
--verbose, -v           Report all system messages.  (Same as "--report=1".)
--quiet, -q             Report no system messages.  (Same as "--report=5".)
--halt=<level>          Halt execution at system messages at or above <level>.
                        Levels as in --report.  Default: 4 (severe).
--strict                Halt at the slightest problem.  Same as "--halt=info".
--exit-status=<level>   Enable a non-zero exit status for non-halting system
                        messages at or above <level>.  Default: 5 (disabled).
--debug                 Enable debug-level system messages and diagnostics.
--no-debug              Disable debug output.  (default)
--warnings=<file>       Send the output of system messages to <file>.
--traceback             Enable Python tracebacks when Docutils is halted.
--no-traceback          Disable Python tracebacks.  (default)
--input-encoding=<name[:handler]>, -i <name[:handler]>
                        Specify the encoding and optionally the error handler
                        of input text.  Default: <auto-detect>:strict.
--input-encoding-error-handler=INPUT_ENCODING_ERROR_HANDLER
                        Specify the error handler for undecodable characters.
                        Choices: "strict" (default), "ignore", and "replace".
--output-encoding=<name[:handler]>, -o <name[:handler]>
                        Specify the text encoding and optionally the error
                        handler for output.  Default: utf-8:strict.
--output-encoding-error-handler=OUTPUT_ENCODING_ERROR_HANDLER
                        Specify error handler for unencodable output
                        characters; "strict" (default), "ignore", "replace",
                        "xmlcharrefreplace", "backslashreplace".
--error-encoding=<name[:handler]>, -e <name[:handler]>
                        Specify text encoding and optionally error handler for
                        error output.  Default: utf-8:backslashreplace.
--error-encoding-error-handler=ERROR_ENCODING_ERROR_HANDLER
                        Specify the error handler for unencodable characters
                        in error output.  Default: backslashreplace.
--language=<name>, -l <name>
                        Specify the language (as BCP 47 language tag).
                        Default: en.
--record-dependencies=<file>
                        Write output file dependencies to <file>.
--config=<file>         Read configuration settings from <file>, if it exists.
--version, -V           Show this program's version number and exit.
--help, -h              Show this help message and exit.

MyST options
------------
--myst-commonmark-only=<boolean>
                        Use strict CommonMark parser (default: False)
--myst-gfm-only=<boolean>
                        Use strict Github Flavoured Markdown parser (default:
                        False)
--myst-enable-extensions=<comma-delimited>
                        Enable syntax extensions
--myst-disable-syntax=<comma-delimited>
                        Disable Commonmark syntax elements
--myst-all-links-external=<boolean>
                        Parse all links as simple hyperlinks (default: False)
--myst-links-external-new-tab=<boolean>
                        Open all external links in a new tab (default: False)
--myst-url-schemes=<comma-delimited>|<yaml-dict>
                        URI schemes that are converted to external links
                        (default: http,https,mailto,ftp)
--myst-fence-as-directive=<comma-delimited>
                        Interpret a code fence as a directive, for certain
                        language names. This can be useful for fences like dot
                        and mermaid, and interoperability with other Markdown
                        renderers.
--myst-number-code-blocks=<comma-delimited>
                        Add line numbers to code blocks with these languages
--myst-title-to-header=<boolean>
                        Convert a `title` field in the front-matter to a H1
                        header (default: False)
--myst-heading-anchors=<int>
                        Heading level depth to assign HTML anchors (default:
                        0)
--myst-heading-slug-func=<str>
                        Function for creating heading anchors, or a python
                        import path e.g. `my_package.my_module.my_function`
                        (default: (default: 'None'))
--myst-html-meta=<yaml-dict>
                        HTML meta tags
--myst-footnote-transition=<boolean>
                        Place a transition before any footnotes (default:
                        True)
--myst-words-per-minute=<int>
                        For reading speed calculations (default: 200)
--myst-substitutions=<yaml-dict>
                        Substitutions mapping
--myst-linkify-fuzzy-links=<boolean>
                        Recognise URLs without schema prefixes (default: True)
--myst-dmath-allow-labels=<boolean>
                        Parse `$$...$$ (label)` (default: True)
--myst-dmath-allow-space=<boolean>
                        Allow initial/final spaces in `$ ... $` (default:
                        True)
--myst-dmath-allow-digits=<boolean>
                        Allow initial/final digits `1$ ...$2` (default: True)
--myst-dmath-double-inline=<boolean>
                        Parse inline `$$ ... $$` (default: False)
--myst-enable-checkboxes=<boolean>
                        Enable checkboxes (default: False)
--myst-suppress-warnings=<comma-delimited>
                        A list of warning types to suppress warning messages
--myst-highlight-code-blocks=<boolean>
                        Syntax highlight code blocks with pygments (default:
                        True)
--myst-inventories=<yaml-dict>
                        Mapping of key to (url, inv file), for intra-project
                        referencing

Generic Parser Options
----------------------
--no-file-insertion     Disable directives that insert the contents of an
                        external file; replaced with a "warning" system
                        message.
--file-insertion-enabled
                        Enable directives that insert the contents of an
                        external file. (default)
--no-raw                Disable the "raw" directive; replaced with a "warning"
                        system message.
--raw-enabled           Enable the "raw" directive. (default)
--line-length-limit=<length>
                        Maximal number of characters in an input line. Default
                        10 000.

reStructuredText Parser Options
-------------------------------
--pep-references        Recognize and link to standalone PEP references (like
                        "PEP 258").
--pep-base-url=<URL>    Base URL for PEP references (default
                        "https://peps.python.org/").
--pep-file-url-template=<URL>
                        Template for PEP file part of URL. (default
                        "pep-%04d")
--rfc-references        Recognize and link to standalone RFC references (like
                        "RFC 822").
--rfc-base-url=<URL>    Base URL for RFC references (default
                        "https://tools.ietf.org/html/").
--tab-width=<width>     Set number of spaces for tab expansion (default 8).
--trim-footnote-reference-space
                        Remove spaces before footnote references.
--leave-footnote-reference-space
                        Leave spaces before footnote references.
--syntax-highlight=<format>
                        Token name set for parsing code with Pygments: one of
                        "long", "short", or "none" (no parsing). Default is
                        "long".
--smart-quotes=<yes/no/alt>
                        Change straight quotation marks to typographic form:
                        one of "yes", "no", "alt[ernative]" (default "no").
--smartquotes-locales=<language:quotes[,language:quotes,...]>
                        Characters to use as "smart quotes" for <language>.
--word-level-inline-markup
                        Inline markup recognized at word boundaries only
                        (adjacent to punctuation or whitespace). Force
                        character-level inline markup recognition with "\ "
                        (backslash + space). Default.
--character-level-inline-markup
                        Inline markup recognized anywhere, regardless of
                        surrounding characters. Backslash-escapes must be used
                        to avoid unwanted markup recognition. Useful for East
                        Asian languages. Experimental.

New in version 0.19.0: myst-suppress-warnings replicates the functionality of sphinxโ€™s suppress_warnings for myst. warnings in the docutils CLI.

The CLI commands can also utilise the docutils.conf configuration file to configure the behaviour of the CLI commands. For example:

# These entries affect all processing:
[general]
myst-enable-extensions: deflist,linkify
myst-footnote-transition: no
myst-substitutions:
    key1: value1
    key2: value2

# These entries affect specific HTML output:
[html writers]
embed-stylesheet: no

[html5 writer]
stylesheet-dirs: path/to/html5_polyglot/
stylesheet-path: minimal.css, responsive.css

You can also use the myst_parser.parsers.docutils_.Parser class programmatically with the Docutils publisher API:

from docutils.core import publish_string
from myst_parser.docutils_ import Parser

source = "hallo world\n: Definition"
output = publish_string(
    source=source,
    writer_name="html5",
    settings_overrides={
        "myst_enable_extensions": ["deflist"],
        "embed_stylesheet": False,
    },
    parser=Parser(),
)

Finally, you can include MyST Markdown files within a RestructuredText file, using the include directive:

.. include:: include.md
   :parser: myst_parser.docutils_

Important

The parser option requires docutils>=0.17