#####################################
Documentation Contribution Guidelines
#####################################

The Trusted Firmware-M project uses `Sphinx`_ to generated the Official
Documentation from `Restructed Text`_ `.rst` source files,

The aim is to align as much as possible with the official
`Python Documentation Guidelines`_ while keeping the consistency with the
already existing files.

The guidance below is provided as a help. It is not meant to be a definitive
list.

********
Overview
********

The following short-list provides a quick summary of the rules.

- If the patch modifies a present file, the file's style should be followed
- If creating a new file,
  :doc:`integration guide </docs/integration_guide/tfm_integration_guide>` can be used as a reference.
- When a new style is to be expressed, consult the `Python Documentation Guidelines`_

*************
List of rules
*************
The following rules should be considered:

#. H1 document title headers should be expressed by # with over-line
   (rows on top and bottom) of the text
#. Only ONE H1 header should allowed per document, ideally placed
   on top of the page.
#. H2 headers should be expressed by * with over-line
#. H2 header's text should be UNIQUE in per document basis
#. H3 headers should be expressed by an underline of '='
#. H4 headers should be expressed by an underline of '-'
#. H3 and H4 headers have no limitation about naming.
   They can have similar names on the same document, as long as
   they have different parents.
#. H5 headers should be expressed by an underline of '^'
#. H5 headers will be rendered in document body but not in
   menus on the navigation bar
#. Do not use more than 5 levels of heading
#. When writing guides, which are expected to be able to be readable by
   command line tools, it would be best practice to add long complicated
   tables, and UML diagrams in the bottom of the page and using internal
   references(auto-label)
#. No special formatting should be allowed in Headers
   (code, underline, strike-through etc)
#. Long URLs and external references should be placed at the bottom of the
   page and referenced in the body of the document
#. New introduced terms and abbreviations should be added to Glossary and
   directly linked by the `:term:` notation across all documents using it.


**********************
Platform Documentation
**********************

The Documentation Build system provides an interface with the platform directory
allowing maintainers to bundle platform specific documentation. **This behaviour
needs to be explicitly enabled for each platform's space** by
modifying the `platform/ext/index.rst` (responsible for generating the
:doc:`Platform Index File </platform/ext/index>`) and adding a table of
contents entry for the corresponding platform space.

The format and structure of this entry is not strictly defined, and allows
flexible control of the platform's documentation space. In most cases it can be
set to recursively match all documents under that directory.

.. code-block:: restructuredtext

    .. toctree::
        :maxdepth: 4
        :caption: PLATFORM_X_CAPTION
        :glob:

        target/PLATFORM_X/**

****************
Common Use Cases
****************

The section below describes with examples, a rule compliant implementation
for most common documentation elements.

Headers
=======


.. code-block:: restructuredtext

    ###################
    Document Title (H1)
    ###################

    ******************
    Chapter Ttitle(H2)
    ******************

    Chapter Section (H3)
    ====================

    Chapter Sub-Section (H4)
    ------------------------

    Subsection of Chapter sub-section (H5)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Code Blocks
===========


The recommendation for code content, is to use the explicit code-block directive,
ideally with a defined lexer for the language the block contains.

A list of compatible lexers can be found at `Pygments Lexers`_

.. code-block:: restructuredtext

    .. code-block:: bash

        ls
        pwd

    .. code-block:: doscon

        dir

    .. code-block:: c

        static struct rn_object_t;

    .. code-block:: python3

        print("Hello TF-M")


Restructured Text supports implicit code-blocks by indenting a section of text,
surrounded by new lines. While this formatting is
allowed, it should be avoided if possible.

.. code-block:: restructuredtext

    The quick brown fox jumps over the lazy dog

        ls
        pwd

.. Note::

    Mixing two different code-block formats in the same document will break
    the whole document's rendering. When editing an existing document, please
    follow the existing format.

    **New documents should always use the explicit format.**

Tables
======

For adding new tables the `table::` notation should be used.

.. code-block:: restructuredtext

    .. table:: Components table
       :widths: auto

       +--------------+--------------+-------------+
       | **Title A**  | **Title B**  | **Title C** |
       +==============+==============+=============+
       | Text A       | Text B       | Text C      |
       +--------------+--------------+-------------+


While the equivalent simple table code will render correctly in the output, it
will not be added to the index (So it cannot be referenced if needed)

.. code-block:: restructuredtext

   +--------------+--------------+-------------+
   | **Title A**  | **Title B**  | **Title C** |
   +==============+==============+=============+
   | Text A       | Text B       | Text C      |
   +--------------+--------------+-------------+

Other types of tables such as list-tables and csv-tables are also permitted, as
seen on :doc:`/docs/getting_started/tfm_getting_started` and
:doc:`/docs/releases/1.0`


External Links
==============

External links should be placed in the bottom of a document.

.. code-block:: restructuredtext

    The quick brown fox jumps over the lazy dog according to `Link_A`_

    .. _Link_A: https://www.aaa.org
    .. _Link_B: https://www.bbb.org

    --------------

    *Copyright (c) XYZ *

Creating in-line links is permitted, but should be avoided if possible. It
should be only used for consistency purposes or for a small ammount
of short links.

.. code-block:: restructuredtext

    The quick brown fox jumps over the lazy dog according to `Link_A <https://www.aaa.org>`_

If for the purposes of content, a link is to be referenced by multiple
labels, internal linking is the recommended approach.

.. code-block:: restructuredtext

    The quick brown fox jumps over the lazy dog according to `Link_A_New`_

    .. _Link_A: https://www.aaa.org
    .. _Link_A_New: `Link_A`_

    --------------

    *Copyright (c) XYZ *


Document Links
==============

A document included in the documentation can be referenced by the `doc:` notation

.. code-block:: restructuredtext

    :doc:`integration guide </docs/integration_guide/tfm_integration_guide>`

The path is relative to the root of the Trusted Firmware-M code.

Reference specific section of a document
========================================

In order to reference a specific section of a document, up to level 4 headers
(if they are included in the index), the `ref:` keyword can be used

.. code-block:: restructuredtext

    :ref:`docs/getting_started/tfm_getting_started:Tool & Dependency overview`

This can also be used to quickly scroll to the specific section of the current
document. This technique can be used to add complex table in the bottom of a
document and create clickable quick access references to it for improved user
experience.


Glossary term
=============

For technical terms and abbreviations, the recommended guidance is to add an
entry to the :doc:`/docs/glossary` and refer to it, using the `term:`
directive


.. code-block:: restructuredtext

    HAL
    Hardware Abstraction Layer
        Interface to abstract hardware-oriented operations and provides a set of
        APIs to the upper layers.

    .....

    As described in the design document :term:`HAL` abstracts the
    hardware-oriented and platform specific
    .......

.. Note::

   The ":term:" directive does not work when used in special formatting.
   Using \*:term:`HAL`\* **will not link to the glossary term**.

References
==========

#. `Sphinx`_
#. `Restructed Text`_
#. `Python Documentation Guidelines`_
#. `Pygments Lexers`_

.. _Sphinx: https://www.sphinx-doc.org/en/master/
.. _Restructed Text: https://docutils.sourceforge.io/rst.html
.. _Python Documentation Guidelines: https://devguide.python.org/documenting/#style-guide
.. _Pygments Lexers: https://pygments.org/docs/lexers/

--------------

*Copyright (c) 2020-2021, Arm Limited. All rights reserved.*
