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::json::generator Class Reference

Include diagram JSON generator. More...

Detailed Description

Include diagram JSON 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 (nlohmann::json &parent) const override
 Main generator method.
 
void generate_relationships (const source_file &f, nlohmann::json &parent) const
 Generate relationships originating from source_file f
 
void generate (const source_file &e, nlohmann::json &parent) const
 Generate diagram element.
 
- Public Member Functions inherited from clanguml::common::generators::json::generator< ConfigType, DiagramType >
 ~generator () override=default
 
void generate (std::ostream &ostr) const override
 Generate diagram.
 
virtual void generate_diagram (nlohmann::json &parent) const =0
 Generate diagram model.
 
void generate_metadata (nlohmann::json &parent) const
 Generate metadata element with diagram metadata.
 
- 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::generator< ConfigType, DiagramType >
inja::json m_context
 
inja::Environment m_env
 

Constructor & Destructor Documentation

◆ generator()

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

Definition at line 25 of file include_diagram_generator.cc.

26 : common_generator<diagram_config, diagram_model>{config, model}
27{
28}

Member Function Documentation

◆ generate()

void clanguml::include_diagram::generators::json::generator::generate ( const source_file e,
nlohmann::json &  parent 
) const

Generate diagram element.

Parameters
eSource file diagram element
parentParent JSON node

Definition at line 50 of file include_diagram_generator.cc.

51{
52 nlohmann::json j;
53 j["id"] = std::to_string(f.id().value());
54 j["name"] = f.name();
55 auto display_name = f.full_name(false);
56#if defined(_MSC_VER)
57 util::replace_all(display_name, "\\", "/");
58#endif
59 j["display_name"] = std::move(display_name);
60
62 LOG_DBG("Generating directory {}", f.name());
63
64 j["type"] = "folder";
65
66 util::for_each(f, [this, &j](const auto &file) {
67 generate(dynamic_cast<const source_file &>(*file), j);
68 });
69
70 parent["elements"].push_back(std::move(j));
71 }
72 else {
73 LOG_DBG("Generating file {}", f.name());
74
75 j["type"] = "file";
76 j["file_kind"] = to_string(f.type());
78 j["is_system"] = f.is_system_header();
79 }
80
81 parent["elements"].push_back(std::move(j));
82 }
83}

◆ generate_diagram()

void clanguml::include_diagram::generators::json::generator::generate_diagram ( nlohmann::json &  parent) const
overridevirtual

Main generator method.

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

Parameters
ostrOutput stream.

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

Definition at line 85 of file include_diagram_generator.cc.

86{
87 parent["elements"] = std::vector<nlohmann::json>{};
88 parent["relationships"] = std::vector<nlohmann::json>{};
89
90 // Generate files and folders
91 util::for_each(model(), [this, &parent](const auto &f) {
92 generate(dynamic_cast<source_file &>(*f), parent);
93 });
94
95 // Process file include relationships
96 util::for_each(model(), [this, &parent](const auto &f) {
97 generate_relationships(dynamic_cast<source_file &>(*f), parent);
98 });
99}

◆ generate_relationships()

void clanguml::include_diagram::generators::json::generator::generate_relationships ( const source_file f,
nlohmann::json &  parent 
) const

Generate relationships originating from source_file f

Parameters
pDiagram element
parentJSON node

Definition at line 30 of file include_diagram_generator.cc.

32{
33 LOG_DBG("Generating relationships for file {}", f.full_name(true));
34
36 util::for_each(f, [this, &parent](const auto &file) {
38 dynamic_cast<const source_file &>(*file), parent);
39 });
40 }
41 else {
42 for (const auto &r : f.relationships()) {
43 nlohmann::json rel = r;
44 rel["source"] = std::to_string(f.id().value());
45 parent["relationships"].push_back(std::move(rel));
46 }
47 }
48}

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