acrn-hypervisor/doc/developer-guides/graphviz.rst
David B. Kinder e2d3653976 doc: continue doc restructuring
Changing the folder structure will cause too many broken links for
external references (from other sites). So, let's put the content back
where it was before the reorg, and instead use the new persona-based
navigation to point to documents in the original locations.

Also, introduce redirects for some documents that no longer exits.

Signed-off-by: David B. Kinder <david.b.kinder@intel.com>
2019-08-01 14:07:22 -07:00

119 lines
3.1 KiB
ReStructuredText

.. _graphviz-examples:
Drawings using graphviz
#######################
We support using the Sphinx `graphviz extension`_ for creating simple
graphs and line drawings using the dot language. The advantage of using
graphviz for drawings is that source for a drawing is a text file that
can be edited and maintained in the repo along with the documentation.
.. _graphviz extension: http://graphviz.gitlab.io
These source ``.dot`` files are generally kept separate from the document itself,
and included by using a graphviz directive:
.. code-block:: none
.. graphviz:: images/boot-flow.dot
:name: boot-flow-example
:align: center
:caption: ACRN Hypervisor Boot Flow
Where the boot-flow.dot file contains the drawing commands:
.. literalinclude:: images/boot-flow.dot
and the generated output would appear as this:
.. graphviz:: images/boot-flow.dot
:name: boot-flow-example
:align: center
:caption: ACRN Hypervisor Boot Flow
Let's look at some more examples and then we'll get into more details
about the dot language and drawing options.
Simple directed graph
*********************
For simple drawings with shapes and lines, you can put the graphviz
commands in the content block for the directive. For example for a
simple directed graph (digraph) with two nodes connected by an arrow,
you can write:
.. code-block:: none
.. graphviz::
digraph {
"a" -> "b"
}
and get this:
.. graphviz::
digraph {
"a" -> "b"
}
You can change the graph layout (from top-to-bottom to left-to-right), node
shapes (rectangles, circles, house, star, etc.), style (filled, rounded),
and colors, along with the text displayed in the node, and the resulting
image placement on the page (centered):
.. literalinclude:: images/circle-square.dot
.. graphviz:: images/circle-square.dot
:align: center
You can use the `standard HTML color names`_ or use RGB values for
colors, as shown.
.. _standard HTML color names:
https://www.w3schools.com/colors/colors_hex.asp
Adding edge labels
******************
Here's an example of a drawing with labels on the edges (arrows)
between nodes. We also show how to change the default attributes for all
nodes and edges within this graph:
.. literalinclude:: images/node-shape-edges.dot
.. graphviz:: images/node-shape-edges.dot
:align: center
Tables
******
For nodes with a ``record`` shape attribute, the text of the label is
presented in a table format: a vertical bar ``|`` starts a new row or
column and curly braces ``{ ... }`` specify a new row (if you're in a
column) or a new column (if you're in a row). For example:
.. literalinclude:: images/record.dot
.. graphviz:: images/record.dot
:align: center
Note that you can also specify the horizontal alignment of text using escape
sequences ``\n``, ``\l`` and ``\r`` that divide the label into lines, centered,
left-justified, and right-justified, respectively.
Finite-State Machine
********************
Here's an example of using graphviz for defining a finite-state machine
for pumping gas:
.. literalinclude:: images/gaspump.dot
.. graphviz:: images/gaspump.dot
:align: center