Added support for iterating over diagram elements from inja templates (fixes #54)

This commit is contained in:
Bartek Kryza
2022-09-15 23:36:29 +02:00
parent 693a09e20d
commit 17db587426
20 changed files with 115 additions and 20 deletions

View File

@@ -489,6 +489,8 @@ void generator::generate_relationships(
void generator::generate(std::ostream &ostr) const
{
update_context();
ostr << "@startuml" << '\n';
generate_plantuml_directives(ostr, m_config.puml().before);

View File

@@ -42,6 +42,8 @@ public:
class_ &operator=(const class_ &) = delete;
class_ &operator=(class_ &&) = delete;
std::string type_name() const override { return "class"; }
bool is_struct() const;
void is_struct(bool is_struct);

View File

@@ -271,6 +271,28 @@ std::string diagram::to_alias(
throw error::uml_alias_missing(fmt::format("Missing alias for {}", id));
}
inja::json diagram::context() const {
inja::json ctx;
ctx["name"] = name();
ctx["type"] = "class";
inja::json::array_t elements{};
// Add classes
for(const auto &c : classes()) {
elements.emplace_back(c.get().context());
}
// Add enums
for(const auto &e : enums()) {
elements.emplace_back(e.get().context());
}
ctx["elements"] = elements;
return ctx;
}
}
namespace clanguml::common::model {

View File

@@ -87,6 +87,8 @@ public:
bool has_element(
const clanguml::common::model::diagram_element::id_t id) const override;
inja::json context() const override;
private:
common::reference_vector<class_> classes_;

View File

@@ -34,6 +34,8 @@ public:
enum_ &operator=(const enum_ &) = delete;
enum_ &operator=(enum_ &&) = delete;
std::string type_name() const override { return "enum"; }
// TODO: Do we need this?
friend bool operator==(const enum_ &l, const enum_ &r);