blob: 8133cb3a59df2f35844e3f04bcb1fb5d6abb6e56 [file] [log] [blame]
How to write sparse documentation
=================================
Introduction
------------
The documentation for Sparse is written in plain text augmented with
either `reStructuredText`_ (.rst) or `MarkDown`_ (.md) markup. These
files can be organized hierarchically, allowing a good structuring
of the documentation.
Sparse uses `Sphinx`_ to format this documentation in several formats,
like HTML or PDF.
All documentation related files are in the ``Documentation/`` directory.
In this directory you can use ``make html`` or ``make man`` to generate
the documentation in HTML or manpage format. The generated files can then
be found in the ``build/`` sub-directory.
The root of the documentation is the file ``index.rst`` which mainly
lists the names of the files with real documentation.
.. _Sphinx: http://www.sphinx-doc.org/
.. _reStructuredText: http://docutils.sourceforge.net/rst.html
.. _MarkDown: https://en.wikipedia.org/wiki/Markdown
.. _rest-markup:
Minimal reST cheatsheet
-----------------------
Basic inline markup is:
* ``*italic*`` gives *italic*
* ``**bold**`` gives **bold**
* ````mono```` gives ``mono``
Headings are created by underlining the title with a punctuation
character; it can also be optionally overlined::
#############
Major heading
#############
Minor heading
-------------
Any punctuation character can be used and the levels are automatically
determined from their nesting. However, the convention is to use:
* ``#`` with overline for parts
* ``*`` with overline for chapters
* ``=`` for sections
* ``-`` for subsections
* ``^`` for subsubsections
Lists can be created like this::
* this is a bulleted list
* with the second item
on two lines
* nested lists are supported
* subitem
* another subitem
* and here is the fourth item
#. this is an auto-numbered list
#. with two items
1. this is an explicitly numbered list
2. with two items
Definition lists are created with a simple indentation, like::
term, concept, whatever
Definition, must be indented and
continue here.
It can also have several paragraphs.
Literal blocks are introduced with ``::``, either at the end of the
preceding paragraph or on its own line, and indented text::
This is a paragraph introducing a literal block::
This is the literal block.
It can span several lines.
It can also consist of several paragraphs.
Code examples with syntax highlighting use the *code-block* directive.
For example::
.. code-block:: c
int foo(int a)
{
return a + 1;
}
will give:
.. code-block:: c
int foo(int a)
{
return a + 1;
}
Autodoc
-------
.. highlight:: none
.. c:autodoc:: Documentation/sphinx/cdoc.py
For example, a doc-block like::
///
// increment a value
//
// @val: the value to increment
// @return: the incremented value
//
// This function is to be used to increment a
// value.
//
// It's strongly encouraged to use this
// function instead of open coding a simple
// ``++``.
int inc(int val)
will be displayed like this:
.. c:function:: int inc(int val)
:noindex:
:param val: the value to increment
:return: the incremented value
This function is to be used to increment a
value.
It's strongly encouraged to use this
function instead of open coding a simple
``++``.
Intermediate Representation
---------------------------
.. c:autodoc:: Documentation/sphinx/ir.py