--- a/src/heatmap.cpp Sat Jun 28 11:32:08 2025 +0200 +++ b/src/heatmap.cpp Sun Jun 29 13:51:42 2025 +0200 @@ -35,14 +35,19 @@ for (auto line: std::views::split(log, "\n"sv)) { if (line.empty()) continue; - auto parts = std::views::split(line, "#"sv); - auto parts_iter = parts.begin(); - std::string author{settings.map_author(std::string_view{*parts_iter})}; + + // find all delimiters + const auto line_view = std::string_view{line}; + const auto pos_delim1 = line_view.find('#', 0); + const auto pos_delim2 = line_view.find('#', pos_delim1 + 1); + + std::string author{settings.map_author(line_view.substr(0, pos_delim1))}; + std::string_view date_view{line_view.substr(pos_delim1+1, pos_delim2)}; + std::string_view summary_view{line_view.substr(pos_delim2+1)}; int year = 0; unsigned int month = 0, day = 0; - ++parts_iter; - auto date_parts = std::views::split(*parts_iter, "-"sv) + auto date_parts = std::views::split(date_view, "-"sv) | std::views::transform([](auto r) { return std::string_view(r); }) | std::ranges::to<std::vector>(); std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); @@ -51,8 +56,7 @@ auto &[summaries] = m_heatmap[m_current_repo][author][chrono::year_month_day{ chrono::year{year}, chrono::month{month}, chrono::day{day} }]; - ++parts_iter; - summaries.emplace_back(std::string_view{*parts_iter}); + summaries.emplace_back(summary_view); } }