From 9612c988cc568f258f5051a0841a5b3aba2bb433 Mon Sep 17 00:00:00 2001 From: yggverse Date: Tue, 10 Mar 2026 04:18:17 +0200 Subject: [PATCH] try few search scenarios on result fail --- .../tab/item/page/content/text/markdown.rs | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/app/browser/window/tab/item/page/content/text/markdown.rs b/src/app/browser/window/tab/item/page/content/text/markdown.rs index cdce89de..fb1c8c6c 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown.rs @@ -329,23 +329,28 @@ impl Markdown { } fn scroll_to_anchor(text_view: &TextView, fragment: GString) -> bool { - let query = uri_unescape_string(&fragment, None::<&str>) - .unwrap_or(fragment) - .replace("-", " "); - let mut cursor = text_view.buffer().start_iter(); - while let Some((mut match_start, match_end)) = - cursor.forward_search(&query, TextSearchFlags::CASE_INSENSITIVE, None) - { - if match_start - .tags() - .iter() - .any(|t| t.name().is_some_and(|n| n.starts_with("h"))) + fn try_scroll(text_view: &TextView, query: &str) -> bool { + let mut cursor = text_view.buffer().start_iter(); + while let Some((mut match_start, match_end)) = + cursor.forward_search(query, TextSearchFlags::CASE_INSENSITIVE, None) { - return text_view.scroll_to_iter(&mut match_start, 0.0, true, 0.0, 0.0); + if match_start + .tags() + .iter() + .any(|t| t.name().is_some_and(|n| n.starts_with("h"))) + { + return text_view.scroll_to_iter(&mut match_start, 0.0, true, 0.0, 0.0); + } + cursor = match_end; } - cursor = match_end; + false } - false + let query = uri_unescape_string(&fragment, None::<&str>).unwrap_or(fragment); + let result = try_scroll(text_view, &query); // exact match + if !result { + return try_scroll(text_view, &query.replace("-", " ")); // unstable @TODO + } + result } fn is_internal_link(request: &str) -> bool {