Initial mermaid class diagram support

This commit is contained in:
Bartek Kryza
2023-09-05 00:04:05 +02:00
parent e8235805f8
commit 6822930a12
13 changed files with 1747 additions and 1 deletions

View File

@@ -107,4 +107,10 @@ TEST_CASE("t00002", "[test-case][class]")
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
{
auto mmd = generate_class_mermaid(diagram, *model);
save_puml(
config.output_directory() + "/" + diagram->name + ".mmd", mmd);
}
}

View File

@@ -95,4 +95,10 @@ TEST_CASE("t00003", "[test-case][class]")
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
{
auto mmd = generate_class_mermaid(diagram, *model);
save_puml(
config.output_directory() + "/" + diagram->name + ".mmd", mmd);
}
}

View File

@@ -91,4 +91,10 @@ TEST_CASE("t00004", "[test-case][class]")
save_json(config.output_directory() + "/" + diagram->name + ".json", j);
}
{
auto mmd = generate_class_mermaid(diagram, *model);
save_puml(
config.output_directory() + "/" + diagram->name + ".mmd", mmd);
}
}

View File

@@ -111,6 +111,24 @@ auto generate_diagram_json(
return nlohmann::json::parse(ss.str());
}
template <typename DiagramConfig, typename DiagramModel>
auto generate_diagram_mermaid(
std::shared_ptr<clanguml::config::diagram> config, DiagramModel &model)
{
using diagram_config = DiagramConfig;
using diagram_model = DiagramModel;
using diagram_generator =
typename clanguml::common::generators::diagram_generator_t<
DiagramConfig,
clanguml::common::generators::mermaid_generator_tag>::type;
std::stringstream ss;
ss << diagram_generator(dynamic_cast<diagram_config &>(*config), model);
return ss.str();
}
}
std::unique_ptr<clanguml::class_diagram::model::diagram> generate_class_diagram(
@@ -209,6 +227,14 @@ nlohmann::json generate_include_json(
config, model);
}
std::string generate_class_mermaid(
std::shared_ptr<clanguml::config::diagram> config,
clanguml::class_diagram::model::diagram &model)
{
return detail::generate_diagram_mermaid<clanguml::config::class_diagram>(
config, model);
}
void save_puml(const std::string &path, const std::string &puml)
{
std::filesystem::path p{path};
@@ -229,6 +255,17 @@ void save_json(const std::string &path, const nlohmann::json &j)
ofs.close();
}
void save_mermaid(const std::string &path, const std::string &mmd)
{
std::filesystem::path p{path};
std::filesystem::create_directory(p.parent_path());
std::ofstream ofs;
ofs.open(p, std::ofstream::out | std::ofstream::trunc);
ofs << mmd;
ofs.close();
}
using namespace clanguml::test::matchers;
///

View File

@@ -20,6 +20,7 @@
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG
#include "class_diagram/generators/plantuml/class_diagram_generator.h"
#include "class_diagram/generators/mermaid/class_diagram_generator.h"
#include "class_diagram/model/diagram.h"
#include "class_diagram/visitor/translation_unit_visitor.h"
#include "common/clang_utils.h"