From 9d285e44667a939c5904419fbbcc4856bd2ecbc9 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 25 Mar 2026 19:58:16 +0100 Subject: [PATCH] Fixed tooltip indentation after list items --- src/tooltips.cpp | 22 +++++++++++++++++++++- tests/tooltips_test.cpp | 25 +++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/tooltips.cpp b/src/tooltips.cpp index 85c4243..10cf1da 100644 --- a/src/tooltips.cpp +++ b/src/tooltips.cpp @@ -395,7 +395,27 @@ void Tooltip::wrap_lines() { auto next = last_space; next.forward_char(); buffer->erase(last_space, next); - buffer->insert(mark->get_iter(), "\n"); + + // Indent next line if current line is indented, or for list items + auto start = buffer->get_iter_at_line(mark->get_iter().get_line()); + auto end = start; + if((*end == '-' || *end == '*' || *end == '+') && end.forward_char() && *end == ' ') + buffer->insert(mark->get_iter(), "\n "); + else if((*end >= '1' && *end <= '9') && end.forward_char()) { + while((*end >= '0' && *end <= '9') && end.forward_char()) { + } + if(*end == '.' && end.forward_char() && *end == ' ' && end.forward_char()) + buffer->insert(mark->get_iter(), "\n" + std::string(end.get_line_offset(), ' ')); + else + buffer->insert(mark->get_iter(), "\n"); + } + else if((*end == ' ' || *end == '\t') && end.forward_char()) { + while((*end == ' ' || *end == '\t') && end.forward_char()) { + } + buffer->insert(mark->get_iter(), "\n" + std::string(end.get_line_offset(), ' ')); + } + else + buffer->insert(mark->get_iter(), "\n"); iter = mark->get_iter(); buffer->delete_mark(mark); diff --git a/tests/tooltips_test.cpp b/tests/tooltips_test.cpp index 2077f5b..d7dd527 100644 --- a/tests/tooltips_test.cpp +++ b/tests/tooltips_test.cpp @@ -540,6 +540,31 @@ int main() { tooltip->wrap_lines(); g_assert(tooltip->buffer->get_text() == "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest\ntest test"); } + { + auto tooltip = get_markdown_tooltip("- test test test test test test test test test test test test test test test test test test test test test"); + tooltip->wrap_lines(); + g_assert(tooltip->buffer->get_text() == "- test test test test test test test test test test test test test test test\n test test test test test test"); + } + { + auto tooltip = get_markdown_tooltip("+ test test test test test test test test test test test test test test test test test test test test test"); + tooltip->wrap_lines(); + g_assert(tooltip->buffer->get_text() == "+ test test test test test test test test test test test test test test test\n test test test test test test"); + } + { + auto tooltip = get_markdown_tooltip("* test test test test test test test test test test test test test test test test test test test test test"); + tooltip->wrap_lines(); + g_assert(tooltip->buffer->get_text() == "* test test test test test test test test test test test test test test test\n test test test test test test"); + } + { + auto tooltip = get_markdown_tooltip("1. test test test test test test test test test test test test test test test test test test test test test"); + tooltip->wrap_lines(); + g_assert(tooltip->buffer->get_text() == "1. test test test test test test test test test test test test test test test\n test test test test test test"); + } + { + auto tooltip = get_markdown_tooltip("10. test test test test test test test test test test test test test test test test test test test test test"); + tooltip->wrap_lines(); + g_assert(tooltip->buffer->get_text() == "10. test test test test test test test test test test test test test test test\n test test test test test test"); + } // Testing insert_doxygen {