From 5aeb065f4bc984370bf69f1474d92ffcf31c8168 Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 12 Jun 2021 12:46:23 +0200 Subject: [PATCH] Language client: cleanup of embolden_token --- src/source_language_protocol.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/source_language_protocol.cpp b/src/source_language_protocol.cpp index 25c9a41..f76a15a 100644 --- a/src/source_language_protocol.cpp +++ b/src/source_language_protocol.cpp @@ -709,15 +709,13 @@ void Source::LanguageProtocolView::setup_navigation_and_refactoring() { }); result_processed.get_future().get(); - auto embolden_token = [](std::string &line_, int token_start_pos, int token_end_pos) { - Glib::ustring line = line_; - if(static_cast(token_start_pos) > line.size() || static_cast(token_end_pos) > line.size()) - return; + auto embolden_token = [](std::string &line, int token_start_pos, int token_end_pos) { + Glib::ustring uline = std::move(line); //markup token as bold size_t pos = 0; - while((pos = line.find('&', pos)) != Glib::ustring::npos) { - size_t pos2 = line.find(';', pos + 2); + while((pos = uline.find('&', pos)) != Glib::ustring::npos) { + size_t pos2 = uline.find(';', pos + 2); if(static_cast(token_start_pos) > pos) { token_start_pos += pos2 - pos; token_end_pos += pos2 - pos; @@ -728,16 +726,22 @@ void Source::LanguageProtocolView::setup_navigation_and_refactoring() { break; pos = pos2 + 1; } - line.insert(token_end_pos, ""); - line.insert(token_start_pos, ""); + if(static_cast(token_start_pos) > uline.size()) + token_start_pos = uline.size(); + if(static_cast(token_end_pos) > uline.size()) + token_end_pos = uline.size(); + if(token_start_pos != token_end_pos) { + uline.insert(token_end_pos, ""); + uline.insert(token_start_pos, ""); + } size_t start_pos = 0; - while(start_pos < line.size() && (line[start_pos] == ' ' || line[start_pos] == '\t')) + while(start_pos < uline.size() && (uline[start_pos] == ' ' || uline[start_pos] == '\t')) ++start_pos; if(start_pos > 0) - line.erase(0, start_pos); + uline.erase(0, start_pos); - line_ = line.raw(); + line = std::move(uline); }; std::unordered_map> file_lines;