Improved sequence diagram message comment formatting
This commit is contained in:
@@ -287,19 +287,10 @@ void generator::generate_message_comment(
|
|||||||
if (!from)
|
if (!from)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (m.type() == message_t::kCall) {
|
ostr << "note over " << generate_alias(from.value()) << '\n';
|
||||||
const auto &to = model().get_participant<model::participant>(m.to());
|
|
||||||
if (!to)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ostr << "note over " << generate_alias(from.value()) << ", "
|
ostr << util::format_message_comment(m.comment().value()) << '\n';
|
||||||
<< generate_alias(to.value()) << '\n';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ostr << "note over " << generate_alias(from.value()) << '\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
ostr << m.comment().value() << '\n';
|
|
||||||
ostr << "end note" << '\n';
|
ostr << "end note" << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -199,6 +199,28 @@ std::vector<std::string> split(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> split_isspace(std::string str)
|
||||||
|
{
|
||||||
|
std::vector<std::string> result;
|
||||||
|
|
||||||
|
while (static_cast<unsigned int>(!str.empty()) != 0U) {
|
||||||
|
auto index = std::find_if(
|
||||||
|
str.begin(), str.end(), [](auto c) { return std::isspace(c); });
|
||||||
|
if (index != str.end()) {
|
||||||
|
auto tok = str.substr(0, std::distance(str.begin(), index));
|
||||||
|
if (!tok.empty())
|
||||||
|
result.push_back(std::move(tok));
|
||||||
|
str = str.substr(std::distance(str.begin(), index) + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (!str.empty())
|
||||||
|
result.push_back(str);
|
||||||
|
str = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
std::string join(
|
std::string join(
|
||||||
const std::vector<std::string> &toks, std::string_view delimiter)
|
const std::vector<std::string> &toks, std::string_view delimiter)
|
||||||
{
|
{
|
||||||
@@ -344,4 +366,40 @@ std::filesystem::path ensure_path_is_absolute(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string format_message_comment(const std::string &comment, unsigned width)
|
||||||
|
{
|
||||||
|
if (width == 0)
|
||||||
|
return comment;
|
||||||
|
|
||||||
|
std::string result;
|
||||||
|
|
||||||
|
if (comment.empty())
|
||||||
|
return result;
|
||||||
|
|
||||||
|
auto tokens = split_isspace(comment);
|
||||||
|
|
||||||
|
if (tokens.empty())
|
||||||
|
return result;
|
||||||
|
|
||||||
|
unsigned current_line_length{0};
|
||||||
|
for (auto it = tokens.begin(); it != tokens.end(); it++) {
|
||||||
|
if (current_line_length < width) {
|
||||||
|
result += *it;
|
||||||
|
result += ' ';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result.back() = '\n';
|
||||||
|
current_line_length = 0;
|
||||||
|
result += *it;
|
||||||
|
result += ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
current_line_length += it->size() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.pop_back();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace clanguml::util
|
} // namespace clanguml::util
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ std::string get_os_name();
|
|||||||
std::vector<std::string> split(
|
std::vector<std::string> split(
|
||||||
std::string str, std::string_view delimiter, bool skip_empty = true);
|
std::string str, std::string_view delimiter, bool skip_empty = true);
|
||||||
|
|
||||||
|
std::vector<std::string> split_isspace(std::string str);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Remove and erase elements from a vector
|
* @brief Remove and erase elements from a vector
|
||||||
*
|
*
|
||||||
@@ -424,4 +426,6 @@ std::string path_to_url(const std::filesystem::path &p);
|
|||||||
std::filesystem::path ensure_path_is_absolute(const std::filesystem::path &p,
|
std::filesystem::path ensure_path_is_absolute(const std::filesystem::path &p,
|
||||||
const std::filesystem::path &root = std::filesystem::current_path());
|
const std::filesystem::path &root = std::filesystem::current_path());
|
||||||
|
|
||||||
|
std::string format_message_comment(const std::string &c, unsigned width = 25);
|
||||||
|
|
||||||
} // namespace clanguml::util
|
} // namespace clanguml::util
|
||||||
@@ -12,7 +12,10 @@ template <typename T> class Encoder : public T {
|
|||||||
public:
|
public:
|
||||||
bool send(std::string &&msg)
|
bool send(std::string &&msg)
|
||||||
{
|
{
|
||||||
return T::send(std::move(encode(std::move(msg))));
|
return T::send(std::move(
|
||||||
|
// Encode the message using Base64 encoding and pass it to the next
|
||||||
|
// layer
|
||||||
|
encode(std::move(msg))));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -27,6 +30,7 @@ public:
|
|||||||
|
|
||||||
int retryCount = 5;
|
int retryCount = 5;
|
||||||
|
|
||||||
|
// Repeat until send() succeeds or retry count is exceeded
|
||||||
while (retryCount--) {
|
while (retryCount--) {
|
||||||
if (T::send(buffer))
|
if (T::send(buffer))
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -396,3 +396,24 @@ TEST_CASE("Test tokenize_unexposed_template_parameter", "[unit-test]")
|
|||||||
CHECK(r[i++] == ")");
|
CHECK(r[i++] == ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Test format_message_comment", "[unit-test]")
|
||||||
|
{
|
||||||
|
using namespace clanguml::util;
|
||||||
|
|
||||||
|
CHECK(format_message_comment("\n\n ABCD \n", 0) == "\n\n ABCD \n");
|
||||||
|
CHECK(format_message_comment("\n\n ABCD \n") == "ABCD");
|
||||||
|
|
||||||
|
CHECK(format_message_comment(
|
||||||
|
"Repeat until send() succeeds or retry count is exceeded") ==
|
||||||
|
"Repeat until send() succeeds\nor retry count is exceeded");
|
||||||
|
|
||||||
|
CHECK(format_message_comment("12345678", 5) == "12345678");
|
||||||
|
|
||||||
|
CHECK(format_message_comment("") == "");
|
||||||
|
|
||||||
|
CHECK(format_message_comment(" ") == "");
|
||||||
|
|
||||||
|
CHECK(format_message_comment("This is a url: http://example.com/test/12345",
|
||||||
|
15) == "This is a url:\nhttp://example.com/test/12345");
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user