Added PlantUML links generation in class diagrams

This commit is contained in:
Bartek Kryza
2022-03-20 22:57:17 +01:00
parent 3c30350edc
commit d7e27841bc
15 changed files with 351 additions and 14 deletions

View File

@@ -20,6 +20,8 @@
#include "util/error.h"
#include <inja/inja.hpp>
namespace clanguml::class_diagram::generators::plantuml {
generator::generator(diagram_config &config, diagram_model &model)
@@ -27,6 +29,27 @@ generator::generator(diagram_config &config, diagram_model &model)
{
}
void generator::generate_link(
std::ostream &ostr, const class_diagram::model::class_element &e) const
{
if (e.file().empty())
return;
if (!m_config.generate_links().link.empty()) {
ostr << " [[[";
inja::render_to(
ostr, m_config.generate_links().link, element_context(e));
}
if (!m_config.generate_links().tooltip.empty()) {
ostr << "{";
inja::render_to(
ostr, m_config.generate_links().tooltip, element_context(e));
ostr << "}";
}
ostr << "]]]";
}
void generator::generate_alias(const class_ &c, std::ostream &ostr) const
{
std::string class_type{"class"};
@@ -72,6 +95,10 @@ void generator::generate(
ostr << class_type << " " << c.alias();
if (m_config.generate_links) {
common_generator<diagram_config, diagram_model>::generate_link(ostr, c);
}
if (!c.style().empty())
ostr << " " << c.style();
@@ -124,6 +151,10 @@ void generator::generate(
ostr << " : " << uns.relative(type);
if (m_config.generate_links) {
generate_link(ostr, m);
}
ostr << '\n';
}
@@ -201,7 +232,13 @@ void generator::generate(
ostr << "{static} ";
ostr << plantuml_common::to_plantuml(m.scope()) << m.name() << " : "
<< uns.relative(m.type()) << '\n';
<< uns.relative(m.type());
if (m_config.generate_links) {
generate_link(ostr, m);
}
ostr << '\n';
}
ostr << "}" << '\n';
@@ -233,6 +270,10 @@ void generator::generate(
{
ostr << "enum " << e.alias();
if (m_config.generate_links) {
common_generator<diagram_config, diagram_model>::generate_link(ostr, e);
}
if (!e.style().empty())
ostr << " " << e.style();

View File

@@ -59,6 +59,9 @@ class generator : public common_generator<diagram_config, diagram_model> {
public:
generator(diagram_config &config, diagram_model &model);
void generate_link(
std::ostream &ostr, const class_diagram::model::class_element &e) const;
void generate_alias(const class_ &c, std::ostream &ostr) const;
void generate_alias(const enum_ &e, std::ostream &ostr) const;