0.5.4
C++ to UML diagram generator based on Clang
Loading...
Searching...
No Matches
Functions
clanguml::common::generators::detail Namespace Reference

Functions

template<typename DiagramConfig , typename GeneratorTag , typename DiagramModel >
void generate_diagram_select_generator (const std::string &od, const std::string &name, std::shared_ptr< clanguml::config::diagram > diagram, const DiagramModel &model)
 
template<typename DiagramConfig >
void generate_diagram_impl (const std::string &name, std::shared_ptr< clanguml::config::diagram > diagram, const common::compilation_database &db, const std::vector< std::string > &translation_units, const cli::runtime_config &runtime_config, std::function< void()> &&progress)
 

Function Documentation

◆ generate_diagram_impl()

template<typename DiagramConfig >
void clanguml::common::generators::detail::generate_diagram_impl ( const std::string &  name,
std::shared_ptr< clanguml::config::diagram diagram,
const common::compilation_database db,
const std::vector< std::string > &  translation_units,
const cli::runtime_config runtime_config,
std::function< void()> &&  progress 
)

Definition at line 122 of file generators.cc.

127{
128 using diagram_config = DiagramConfig;
129 using diagram_model = typename diagram_model_t<DiagramConfig>::type;
130 using diagram_visitor = typename diagram_visitor_t<DiagramConfig>::type;
131
132 auto model = clanguml::common::generators::generate<diagram_model,
133 diagram_config, diagram_visitor>(db, diagram->name,
134 dynamic_cast<diagram_config &>(*diagram), translation_units,
135 runtime_config.verbose, std::move(progress));
136
137 if constexpr (std::is_same_v<DiagramConfig, config::sequence_diagram>) {
138 if (runtime_config.print_from) {
139 auto from_values = model->list_from_values();
140
141 for (const auto &from : from_values) {
142 std::cout << from << '\n';
143 }
144
145 return;
146 }
147 if (runtime_config.print_to) {
148 auto to_values = model->list_to_values();
149
150 for (const auto &to : to_values) {
151 std::cout << "|" << to << "|" << '\n';
152 }
153
154 return;
155 }
156 }
157
158 for (const auto generator_type : runtime_config.generators) {
159 if (generator_type == generator_type_t::plantuml) {
161 plantuml_generator_tag>(
162 runtime_config.output_directory, name, diagram, model);
163 }
164 else if (generator_type == generator_type_t::json) {
166 json_generator_tag>(
167 runtime_config.output_directory, name, diagram, model);
168 }
169 else if (generator_type == generator_type_t::mermaid) {
171 mermaid_generator_tag>(
172 runtime_config.output_directory, name, diagram, model);
173 }
174
175 // Convert plantuml or mermaid to an image using command provided
176 // in the command line arguments
177 if (runtime_config.render_diagrams) {
178 render_diagram(generator_type, diagram);
179 }
180 }
181}

◆ generate_diagram_select_generator()

template<typename DiagramConfig , typename GeneratorTag , typename DiagramModel >
void clanguml::common::generators::detail::generate_diagram_select_generator ( const std::string &  od,
const std::string &  name,
std::shared_ptr< clanguml::config::diagram diagram,
const DiagramModel &  model 
)

Definition at line 97 of file generators.cc.

100{
101 using diagram_generator =
103
104 std::stringstream buffer;
105 buffer << diagram_generator(
106 dynamic_cast<DiagramConfig &>(*diagram), *model);
107
108 // Only open the file after the diagram has been generated successfully
109 // in order not to overwrite previous diagram in case of failure
110 auto path = std::filesystem::path{od} /
111 fmt::format("{}.{}", name, GeneratorTag::extension);
112 std::ofstream ofs;
113 ofs.open(path, std::ofstream::out | std::ofstream::trunc);
114 ofs << buffer.str();
115
116 ofs.close();
117
118 LOG_INFO("Written {} diagram to {}", name, path.string());
119}