==========================================
:Author: Andrey Makarov :Version: |nimversion|
.. default-role:: code .. include:: rstcommon.rst .. contents::
Both Markdown
:idx: (md) and reStructuredText
:idx: (RST) are markup
languages whose goal is to typeset texts with complex structure,
formatting and references using simple plaintext representation.
Usage (to convert Markdown into HTML):
nim md2html markdown_rst.md
Output:
You're reading it!
The md2tex
:option: command is invoked identically to md2html
:option:,
but outputs a .tex
file instead of .html
.
These tools embedded into Nim compiler; the compiler can output the result to HTML [#html] or Latex [#latex].
[#html] commands nim doc
:cmd: for *.nim
files and
nim rst2html
:cmd: for *.rst
files
[#latex] commands nim doc2tex
:cmd: for *.nim
and
nim rst2tex
:cmd: for *.rst
.
Full list of supported commands:
=================== ====================== ============ ==============
command runs on... input format output format
=================== ====================== ============ ==============
nim md2html
:cmd: standalone md files .md
.html
HTML
nim md2tex
:cmd: same same .tex
LaTeX
nim rst2html
:cmd: standalone rst files .rst
.html
HTML
nim rst2tex
:cmd: same same .tex
LaTeX
nim doc
:cmd: documentation comments .nim
.html
HTML
nim doc2tex
:cmd: same same .tex
LaTeX
nim jsondoc
:cmd: same same .json
JSON
=================== ====================== ============ ==============
If you are new to Markdown/RST please consider reading the following:
1) [Markdown Basic Syntax] 2) a long specification of Markdown: [CommonMark Spec] 3) a short [quick introduction] to RST 4) an [RST reference]: a comprehensive cheatsheet for RST 5) a more formal 50-page [RST specification].
A large subset is implemented with some [limitations] and [additional Nim-specific features].
Supported standard RST features:
image
, figure
for including images and videoscode
contents
(table of contents), container
, raw
include
replace
and image
inline literals
, hyperlink references (including embedded URI),
substitution references, standalone hyperlinks,
internal links (inline and outline):literal:
, :strong:
,
emphasis
, :sub:
/:subscript:
, :sup:
/:superscript:
(see [RST roles list] for description).code-block
[cmp:Sphinx], title
,
index
[cmp:Sphinx]predefined roles
:nim:
(default), :c:
(C programming language),
:python:
, :yaml:
, :java:
, :cpp:
(C++), :csharp
(C#).
That is every language that highlite supports.
They turn on appropriate syntax highlighting in inline code... Note:: default role for Nim files is :nim:
,
for ``*.rst`` it's currently ``:literal:``.
:cmd:
for commands and common shells syntax:console:
the same for interactive sessions
(commands should be prepended by $
):program:
for executable names [cmp:Sphinx]
(one can just use :cmd:
on single word):option:
for command line options [cmp:Sphinx]:tok:
, a role for highlighting of programming language tokenstriple emphasis (bold and italic) using ***
:idx:
role for `interpreted text` to include the link to this
text into an index (example: [Nim index]).
double slash //
in option lists serves as a prefix for any option that
starts from a word (without any leading symbols like -
, --
, /
):
//compile compile the project //doc generate documentation
Here the dummy //
will disappear, while options compile
:option:
and doc
:option: will be left in the final document.
[cmp:Sphinx] similar but different from the directives of Python [Sphinx directives] and [Sphinx roles] extensions
Optional additional features, by default turned on:
Markdown code blocks. For them the same additional arguments as for RST
code blocks can be provided (e.g. test
or number-lines
) but with
a one-line syntax like this:
nim test number-lines=10
echo "ok"
Markdown links
Markdown headlines
Markdown block quotes
using 1
as auto-enumerator in enumerated lists like RST #
(auto-enumerator 1
can not be used with #
in the same list)
.. Note:: By default Nim has roSupportMarkdown
and
roSupportRawDirective
turned on.
.. warning:: Using Nim-specific features can cause other RST implementations to fail on your document.
Currently we do not aim at 100% Markdown or RST compatibility in inline markup recognition rules because that would provide very little user value. This parser has 2 modes for inline markup:
1) Markdown-like mode which is enabled by roPreferMarkdown
option
(turned on by default).
.. Note:: RST features like directives are still turned on
2) Compatibility mode which is RST rules.
.. Note:: in both modes the parser interpretes text between single
backticks (code) identically:
backslash does not escape; the only exception: ``\`` folowed by `
does escape so that we can always input a single backtick ` in
inline code. However that makes impossible to input code with
``\`` at the end in *single* backticks, one must use *double*
backticks:
`\` -- WRONG
``\`` -- GOOD
So single backticks can always be input: `\`` will turn to ` code
.. Attention:: We don't support some obviously poor design choices of Markdown (or RST).
no support for the rule of 2 spaces causing a line break in Markdown (use RST "line blocks" syntax for making line breaks)
interpretation of Markdown block quotes is also slightly different, e.g. case
>>> foo
> bar
>>baz
is a single 3rd-level quote foo bar baz
in original Markdown, while
in Nim we naturally see it as 3rd-level quote foo
+ 1st level bar
+
2nd level baz
:
foo bar baz
parsed-literal
, sidebar
, topic
, math
, rubric
,
epigraph
, highlights
, pull-quote
, compound
,
table
, csv-table
, list-table
, section-numbering
,
header
, footer
, meta
, class
role
directives and no custom interpreted text rolesnim doc
:cmd: command and idiosyncrasies of documentation markup in
.nim
files and Nim programming language projects... _Markdown Basic Syntax: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax .. _CommonMark Spec: https://spec.commonmark.org/0.30 .. _quick introduction: https://docutils.sourceforge.io/docs/user/rst/quickstart.html .. _RST reference: https://docutils.sourceforge.io/docs/user/rst/quickref.html .. _RST specification: https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html .. _RST directives list: https://docutils.sourceforge.io/docs/ref/rst/directives.html .. _RST roles list: https://docutils.sourceforge.io/docs/ref/rst/roles.html .. _Nim index: https://nim-lang.org/docs/theindex.html .. _Sphinx directives: https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html .. _Sphinx roles: https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html