0.6.0
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
src
package_diagram
generators
mermaid
package_diagram_generator.h
Go to the documentation of this file.
1
/**
2
* @file src/package_diagram/generators/mermaid/package_diagram_generator.h
3
*
4
* Copyright (c) 2021-2025 Bartek Kryza <bkryza@gmail.com>
5
*
6
* Licensed under the Apache License, Version 2.0 (the "License");
7
* you may not use this file except in compliance with the License.
8
* You may obtain a copy of the License at
9
*
10
* http://www.apache.org/licenses/LICENSE-2.0
11
*
12
* Unless required by applicable law or agreed to in writing, software
13
* distributed under the License is distributed on an "AS IS" BASIS,
14
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
* See the License for the specific language governing permissions and
16
* limitations under the License.
17
*/
18
#pragma once
19
20
#include "
common/generators/mermaid/generator.h
"
21
#include "
common/generators/nested_element_stack.h
"
22
#include "
common/model/package.h
"
23
#include "
common/model/relationship.h
"
24
#include "
config/config.h
"
25
#include "
package_diagram/model/diagram.h
"
26
#include "
package_diagram/visitor/translation_unit_visitor.h
"
27
#include "
util/util.h
"
28
29
#include <filesystem>
30
#include <fstream>
31
#include <iostream>
32
#include <sstream>
33
34
namespace
clanguml
{
35
namespace
package_diagram {
36
namespace
generators {
37
namespace
mermaid
{
38
39
using
diagram_config
=
clanguml::config::package_diagram
;
40
using
diagram_model
=
clanguml::package_diagram::model::diagram
;
41
42
template
<
typename
C,
typename
D>
43
using
common_generator
=
clanguml::common::generators::mermaid::generator<C, D>
;
44
45
using
clanguml::common::model::access_t
;
46
using
clanguml::common::model::package
;
47
using
clanguml::common::model::relationship_t
;
48
using namespace
clanguml::util
;
49
50
/**
51
* @brief Package diagram MermaidJS generator
52
*/
53
class
generator
:
public
common_generator
<diagram_config, diagram_model> {
54
public
:
55
generator
(
diagram_config
&
config
,
diagram_model
&
model
);
56
57
using
common_generator
<
diagram_config
,
diagram_model
>
::generate
;
58
59
/**
60
* @brief Main generator method.
61
*
62
* This method is called first and coordinates the entire diagram
63
* generation.
64
*
65
* @param ostr Output stream.
66
*/
67
void
generate_diagram
(std::ostream &ostr)
const override
;
68
69
/**
70
* @brief Generate the diagram type
71
*
72
* @param ostr Output stream
73
*/
74
void
generate_diagram_type
(std::ostream &ostr)
const override
;
75
76
/**
77
* @brief Generate relationships originating from package `p`
78
*
79
* @param p Diagram element
80
* @param parent Output stream
81
*/
82
void
generate_relationships
(
const
package
&p, std::ostream &ostr)
const
;
83
84
/**
85
* @brief Generate diagram package element
86
*
87
* @param p Package diagram element
88
* @param parent Output stream
89
*/
90
void
generate
(
const
package
&e, std::ostream &ostr)
const
;
91
92
/**
93
* @brief Generate package elements grouped using `together` MermaidJS tag
94
*
95
* @param ostr Output stream
96
*/
97
void
generate_groups
(std::ostream &ostr)
const
;
98
99
/**
100
* @brief Generate notes attached to packages
101
*
102
* @param ostr Output stream
103
* @param element Element with a note
104
*/
105
void
generate_notes
(std::ostream &ostr,
106
const
common::model::diagram_element
&element)
const override
;
107
108
private
:
109
mutable
uint64_t
note_id_
{0UL};
110
mutable
common::generators::nested_element_stack<common::model::package>
111
together_group_stack_
;
112
};
113
114
}
// namespace mermaid
115
}
// namespace generators
116
}
// namespace package_diagram
117
}
// namespace clanguml
Copyright © 2022-present
Bartek Kryza
Generated by
1.9.7