From 59c479419bbb566700edfd4c75ba540ec38706e1 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 16 Apr 2025 11:17:41 +0800 Subject: [PATCH 1/2] :bug: Unable to find-replace tag https://github.com/siyuan-note/siyuan/issues/14588 --- kernel/model/search.go | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/kernel/model/search.go b/kernel/model/search.go index 7f73554c9..96bd73531 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -554,25 +554,41 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids } reloadTreeIDs = append(reloadTreeIDs, tree.ID) - if ast.NodeDocument == node.Type { if !replaceTypes["docTitle"] { continue } title := node.IALAttr("title") + tags := node.IALAttr("tags") if 0 == method { if strings.Contains(title, keyword) { - docTitleReplacement := strings.ReplaceAll(replacement, "/", "") + docTitleReplacement := strings.ReplaceAll(replacement, "/", "/") renameRootTitles[node.ID] = strings.ReplaceAll(title, keyword, docTitleReplacement) renameRoots = append(renameRoots, node) } + + if strings.Contains(tags, keyword) { + replacement = strings.TrimPrefix(replacement, "#") + replacement = strings.TrimSuffix(replacement, "#") + tags = strings.ReplaceAll(tags, keyword, replacement) + node.SetIALAttr("tags", tags) + ReloadTag() + } } else if 3 == method { if nil != r && r.MatchString(title) { - docTitleReplacement := strings.ReplaceAll(replacement, "/", "") + docTitleReplacement := strings.ReplaceAll(replacement, "/", "/") renameRootTitles[node.ID] = r.ReplaceAllString(title, docTitleReplacement) renameRoots = append(renameRoots, node) } + + if nil != r && r.MatchString(tags) { + replacement = strings.TrimPrefix(replacement, "#") + replacement = strings.TrimSuffix(replacement, "#") + tags = r.ReplaceAllString(tags, replacement) + node.SetIALAttr("tags", tags) + ReloadTag() + } } } else { var unlinks []*ast.Node @@ -905,14 +921,12 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids for _, unlink := range unlinks { unlink.Unlink() } - - if err = writeTreeUpsertQueue(tree); err != nil { - return - } } + if err = writeTreeUpsertQueue(tree); err != nil { + return + } updateNodes[id] = node - util.PushEndlessProgress(fmt.Sprintf(Conf.Language(206), i+1, len(ids))) } From 8049c5cb3ef5d59de7d1bfc668873d162975dced Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 16 Apr 2025 12:12:55 +0800 Subject: [PATCH 2/2] :art: Improve tag panel refresh https://github.com/siyuan-note/siyuan/issues/14593 --- kernel/model/search.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kernel/model/search.go b/kernel/model/search.go index 96bd73531..e887be1be 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -35,6 +35,7 @@ import ( "github.com/88250/gulu" "github.com/88250/lute" "github.com/88250/lute/ast" + "github.com/88250/lute/editor" "github.com/88250/lute/html" "github.com/88250/lute/lex" "github.com/88250/lute/parse" @@ -572,6 +573,7 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids replacement = strings.TrimPrefix(replacement, "#") replacement = strings.TrimSuffix(replacement, "#") tags = strings.ReplaceAll(tags, keyword, replacement) + tags = strings.ReplaceAll(tags, editor.Zwsp, "") node.SetIALAttr("tags", tags) ReloadTag() } @@ -586,6 +588,7 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids replacement = strings.TrimPrefix(replacement, "#") replacement = strings.TrimSuffix(replacement, "#") tags = r.ReplaceAllString(tags, replacement) + tags = strings.ReplaceAll(tags, editor.Zwsp, "") node.SetIALAttr("tags", tags) ReloadTag() } @@ -971,6 +974,7 @@ func replaceNodeTextMarkTextContent(n *ast.Node, method int, keyword, escapedKey } else if strings.Contains(content, keyword) { content = strings.ReplaceAll(content, keyword, replacement) } + content = strings.ReplaceAll(content, editor.Zwsp, "") tree := parse.Inline("", []byte(content), luteEngine.ParseOptions) if nil == tree.Root.FirstChild { @@ -1009,10 +1013,12 @@ func replaceNodeTextMarkTextContent(n *ast.Node, method int, keyword, escapedKey } else if strings.Contains(n.TextMarkTextContent, keyword) { n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, keyword, replacement) } + n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, editor.Zwsp, "") } else if 3 == method { if nil != r && r.MatchString(n.TextMarkTextContent) { n.TextMarkTextContent = r.ReplaceAllString(n.TextMarkTextContent, replacement) } + n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, editor.Zwsp, "") } }