0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Diagram templates

When working with large codebases, it is often necessary to create diagram configurations for a large number of classes or groups of classes.

Diagram templates feature makes this easier, by allowing to define (or use one of the builtin) templates and generate using them any number of diagram configurations. Diagram templates can be defined using Jinja like template syntax (current renderer implementation is inja).

Diagram template syntax

Diagram templates are defined as part of the configuration file using the following YAML node:

diagram_templates:
# Name of the template
parents_hierarchy_tmpl:
# Description of the template
description: Generate class parents inheritance diagram
# Diagram type
type: class
# Template definition - it has to be valid YAML after it is rendered
template: |
{{ diagram_name }}:
type: class
{% if exists("glob") %}
glob: [{{ glob }}]
{% endif %}
{% if exists("using_namespace") %}
using_namespace: {{ using_namespace }}
{% endif %}
include:
parents: [{{ class_name }}]
namespaces: [{{ namespace_names }}]
relationships:
- inheritance
exclude:
access: [public, protected, private]
plantuml:
before:
- left to right direction

Adding templates to the configuration file

Diagram templates can be added directly to the .clang-uml configuration file, under a diagram_templates: key. However, for practical reasons it is better to keep diagram template definitions in a separate Yaml file, and reference it in the configuration file using include! directive, e.g.:

diagram_templates:
include!: .clang-uml-templates

Adding diagram to configuration from a template

To add a new diagram definition to the configuration file based on the template, simply call the clang-uml using the following options:

clang-uml --add-diagram-from-template parents_hierarchy_tmpl \
--template-var class_name=clanguml::config::include_diagram \
--template-var namespace_names=clanguml \
--template-var diagram_name=abcd \
--template-var "glob=src/config/*.cc" \
--template-var using_namespace=clanguml::config

To see what variables are necessary to provide for a template, the template can be printed from the command line using the following command:

clang-uml --show-template parents_hierarchy_tmpl

Builtin templates

clang-uml has some predefined templates, which can be used directly. If the users configuration file defines another template with a name which already exists as built-in template it will override the predefined templates.

Currently, the following templates are built-in:

  • parents_hierarchy_tmpl - generate inheritance hierarchy diagram including parents of a specified class
  • subclass_hierarchy_tmpl - generate inheritance hierarchy diagram including c children of a specified class
  • class_context_tmpl - generate diagram including all classes in direct relationship (of any kind) with a specific class