0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Public Member Functions | List of all members
clanguml::include_diagram::generators::mermaid::generator Class Reference

Include diagram MermaidJS generator. More...

Detailed Description

Include diagram MermaidJS generator.

Definition at line 51 of file include_diagram_generator.h.

#include <include_diagram_generator.h>

Public Member Functions

 generator (diagram_config &config, diagram_model &model)
 
void generate_diagram (std::ostream &ostr) const override
 Main generator method.
 
void generate_diagram_type (std::ostream &ostr) const override
 Generate the diagram type.
 
void generate_relationships (const source_file &p, std::ostream &ostr) const
 Generate relationships originating from source_file f
 
void generate (const source_file &e, std::ostream &ostr) const
 Generate diagram element.
 
- Public Member Functions inherited from clanguml::common::generators::mermaid::generator< ConfigType, DiagramType >
 generator (ConfigType &config, DiagramType &model)
 Constructor.
 
 ~generator () override=default
 
void generate (std::ostream &ostr) const override
 Generate diagram.
 
virtual void generate_diagram (std::ostream &ostr) const =0
 Generate diagram specific part.
 
void generate_mermaid_directives (std::ostream &ostr, const std::vector< std::string > &directives) const
 Generate MermaidJS directives from config file.
 
virtual void generate_diagram_type (std::ostream &ostr) const =0
 Generate the diagram type.
 
virtual void generate_notes (std::ostream &ostr, const model::diagram_element &element) const
 Generate diagram notes.
 
void generate_metadata (std::ostream &ostr) const
 Generate comment with diagram metadata.
 
void generate_title (std::ostream &ostr) const
 Generate diagram title.
 
template<typename E >
void generate_link (std::ostream &ostr, const E &e) const
 Generate hyper link to element.
 
void print_debug (const common::model::source_location &e, std::ostream &ostr) const
 Print debug information in diagram comments.
 
- Public Member Functions inherited from clanguml::common::generators::generator< ConfigType, DiagramType >
 generator (ConfigType &config, DiagramType &model)
 Constructor.
 
virtual ~generator ()=default
 
virtual void generate (std::ostream &ostr) const =0
 Generate diagram.
 
const ConfigType & config () const
 Get reference to diagram config.
 
const DiagramType & model () const
 Get reference to diagram model.
 
template<typename E >
inja::json element_context (const E &e) const
 
std::optional< std::pair< std::string, std::string > > get_link_pattern (const common::model::source_location &sl) const
 
std::optional< std::pair< std::string, std::string > > get_tooltip_pattern (const common::model::source_location &sl) const
 
void init_context ()
 Initialize diagram Jinja context.
 
void update_context () const
 Update diagram Jinja context.
 
void init_env ()
 
const inja::json & context () const
 
inja::Environment & env () const
 

Additional Inherited Members

- Protected Attributes inherited from clanguml::common::generators::mermaid::generator< ConfigType, DiagramType >
std::set< std::string > m_generated_aliases
 
- Protected Attributes inherited from clanguml::common::generators::generator< ConfigType, DiagramType >
inja::json m_context
 
inja::Environment m_env
 

Constructor & Destructor Documentation

◆ generator()

clanguml::include_diagram::generators::mermaid::generator::generator ( diagram_config config,
diagram_model model 
)

Definition at line 27 of file include_diagram_generator.cc.

28 : common_generator<diagram_config, diagram_model>{config, model}
29{
30}

Member Function Documentation

◆ generate()

void clanguml::include_diagram::generators::mermaid::generator::generate ( const source_file e,
std::ostream &  ostr 
) const

Generate diagram element.

Parameters
eSource file diagram element
parentOutput stream

Definition at line 62 of file include_diagram_generator.cc.

63{
65 LOG_DBG("Generating directory {}", f.name());
66
67 ostr << indent(1) << "subgraph " << f.alias() << "[" << f.name()
68 << "]\n";
69
70 util::for_each(f, [this, &ostr](const auto &file) {
71 generate(dynamic_cast<const source_file &>(*file), ostr);
72 });
73
74 ostr << indent(1) << "end" << '\n';
75
76 m_generated_aliases.emplace(f.alias());
77 }
78 else {
79 LOG_DBG("Generating file {}", f.name());
80
81 ostr << indent(1) << f.alias() << "[" << f.name() << "]\n";
82
83 m_generated_aliases.emplace(f.alias());
84 }
85
86 if (config().generate_links) {
88 }
89}

◆ generate_diagram()

void clanguml::include_diagram::generators::mermaid::generator::generate_diagram ( std::ostream &  ostr) const
overridevirtual

Main generator method.

This method is called first and coordinates the entire diagram generation.

Parameters
ostrOutput stream.

Implements clanguml::common::generators::mermaid::generator< ConfigType, DiagramType >.

Definition at line 91 of file include_diagram_generator.cc.

92{
93 // Generate files and folders
94 util::for_each(model(), [this, &ostr](const auto &f) {
95 generate(dynamic_cast<source_file &>(*f), ostr);
96 });
97
98 // Process file include relationships
99 util::for_each(model(), [this, &ostr](const auto &f) {
100 generate_relationships(dynamic_cast<source_file &>(*f), ostr);
101 });
102
103 // Process file notes
104 util::for_each(model(), [this, &ostr](const auto &f) {
105 generate_notes(ostr, dynamic_cast<source_file &>(*f));
106 });
107}

◆ generate_diagram_type()

void clanguml::include_diagram::generators::mermaid::generator::generate_diagram_type ( std::ostream &  ostr) const
overridevirtual

Generate the diagram type.

Parameters
ostrOutput stream

Implements clanguml::common::generators::mermaid::generator< ConfigType, DiagramType >.

Definition at line 32 of file include_diagram_generator.cc.

33{
34 ostr << "flowchart\n";
35}

◆ generate_relationships()

void clanguml::include_diagram::generators::mermaid::generator::generate_relationships ( const source_file p,
std::ostream &  ostr 
) const

Generate relationships originating from source_file f

Parameters
pDiagram element
parentOutput stream

Definition at line 37 of file include_diagram_generator.cc.

39{
40 if (!util::contains(m_generated_aliases, f.alias()))
41 return;
42
43 LOG_DBG("Generating relationships for file {}", f.full_name(true));
44
46 util::for_each(f, [this, &ostr](const auto &file) {
48 dynamic_cast<const source_file &>(*file), ostr);
49 });
50 }
51 else {
52 for (const auto &r : f.relationships()) {
53 ostr << indent(1) << f.alias() << " "
55 ? "-.->"
56 : "-->")
57 << " " << model().get(r.destination()).value().alias() << '\n';
58 }
59 }
60}

The documentation for this class was generated from the following files: