From d8bb02fb208ac94d4804f658f06dca918a362c60 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Tue, 24 Oct 2023 01:36:25 +0800 Subject: [PATCH] :art: Remove invisible characters when entering document title https://github.com/siyuan-note/siyuan/issues/9493 --- kernel/api/workspace.go | 4 ++-- kernel/model/backlink.go | 16 ++++++++-------- kernel/model/box.go | 8 ++++---- kernel/model/file.go | 8 ++++---- kernel/model/tag.go | 10 +++++----- kernel/util/{emoji.go => rune.go} | 12 +++++++++--- 6 files changed, 32 insertions(+), 26 deletions(-) rename kernel/util/{emoji.go => rune.go} (88%) diff --git a/kernel/api/workspace.go b/kernel/api/workspace.go index 0e210e2c2..aada5d169 100644 --- a/kernel/api/workspace.go +++ b/kernel/api/workspace.go @@ -246,10 +246,10 @@ func getWorkspaces(c *gin.Context) { } } sort.Slice(openedWorkspaces, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(filepath.Base(openedWorkspaces[i].Path)), util.RemoveEmoji(filepath.Base(openedWorkspaces[j].Path))) + return natsort.Compare(util.RemoveEmojiInvisible(filepath.Base(openedWorkspaces[i].Path)), util.RemoveEmojiInvisible(filepath.Base(openedWorkspaces[j].Path))) }) sort.Slice(closedWorkspaces, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(filepath.Base(closedWorkspaces[i].Path)), util.RemoveEmoji(filepath.Base(closedWorkspaces[j].Path))) + return natsort.Compare(util.RemoveEmojiInvisible(filepath.Base(closedWorkspaces[i].Path)), util.RemoveEmojiInvisible(filepath.Base(closedWorkspaces[j].Path))) }) workspaces = append(workspaces, openedWorkspaces...) workspaces = append(workspaces, closedWorkspaces...) diff --git a/kernel/model/backlink.go b/kernel/model/backlink.go index a02d5d5d8..1e0743e89 100644 --- a/kernel/model/backlink.go +++ b/kernel/model/backlink.go @@ -270,13 +270,13 @@ func GetBacklink2(id, keyword, mentionKeyword string, sortMode, mentionSortMode case util.SortModeCreatedASC: return backlinks[i].Created < backlinks[j].Created case util.SortModeNameDESC: - return util.PinYinCompare(util.RemoveEmoji(backlinks[j].Name), util.RemoveEmoji(backlinks[i].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(backlinks[j].Name), util.RemoveEmojiInvisible(backlinks[i].Name)) case util.SortModeNameASC: - return util.PinYinCompare(util.RemoveEmoji(backlinks[i].Name), util.RemoveEmoji(backlinks[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(backlinks[i].Name), util.RemoveEmojiInvisible(backlinks[j].Name)) case util.SortModeAlphanumDESC: - return natsort.Compare(util.RemoveEmoji(backlinks[j].Name), util.RemoveEmoji(backlinks[i].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(backlinks[j].Name), util.RemoveEmojiInvisible(backlinks[i].Name)) case util.SortModeAlphanumASC: - return natsort.Compare(util.RemoveEmoji(backlinks[i].Name), util.RemoveEmoji(backlinks[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(backlinks[i].Name), util.RemoveEmojiInvisible(backlinks[j].Name)) } return backlinks[i].ID > backlinks[j].ID }) @@ -299,13 +299,13 @@ func GetBacklink2(id, keyword, mentionKeyword string, sortMode, mentionSortMode case util.SortModeCreatedASC: return backmentions[i].Created < backmentions[j].Created case util.SortModeNameDESC: - return util.PinYinCompare(util.RemoveEmoji(backmentions[j].Name), util.RemoveEmoji(backmentions[i].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(backmentions[j].Name), util.RemoveEmojiInvisible(backmentions[i].Name)) case util.SortModeNameASC: - return util.PinYinCompare(util.RemoveEmoji(backmentions[i].Name), util.RemoveEmoji(backmentions[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(backmentions[i].Name), util.RemoveEmojiInvisible(backmentions[j].Name)) case util.SortModeAlphanumDESC: - return natsort.Compare(util.RemoveEmoji(backmentions[j].Name), util.RemoveEmoji(backmentions[i].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(backmentions[j].Name), util.RemoveEmojiInvisible(backmentions[i].Name)) case util.SortModeAlphanumASC: - return natsort.Compare(util.RemoveEmoji(backmentions[i].Name), util.RemoveEmoji(backmentions[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(backmentions[i].Name), util.RemoveEmojiInvisible(backmentions[j].Name)) } return backmentions[i].ID > backmentions[j].ID }) diff --git a/kernel/model/box.go b/kernel/model/box.go index 0f728a97a..ca1504481 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -152,21 +152,21 @@ func ListNotebooks() (ret []*Box, err error) { switch Conf.FileTree.Sort { case util.SortModeNameASC: sort.Slice(ret, func(i, j int) bool { - return util.PinYinCompare(util.RemoveEmoji(ret[i].Name), util.RemoveEmoji(ret[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(ret[i].Name), util.RemoveEmojiInvisible(ret[j].Name)) }) case util.SortModeNameDESC: sort.Slice(ret, func(i, j int) bool { - return util.PinYinCompare(util.RemoveEmoji(ret[j].Name), util.RemoveEmoji(ret[i].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(ret[j].Name), util.RemoveEmojiInvisible(ret[i].Name)) }) case util.SortModeUpdatedASC: case util.SortModeUpdatedDESC: case util.SortModeAlphanumASC: sort.Slice(ret, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(ret[i].Name), util.RemoveEmoji(ret[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(ret[i].Name), util.RemoveEmojiInvisible(ret[j].Name)) }) case util.SortModeAlphanumDESC: sort.Slice(ret, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(ret[j].Name), util.RemoveEmoji(ret[i].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(ret[j].Name), util.RemoveEmojiInvisible(ret[i].Name)) }) case util.SortModeCustom: sort.Slice(ret, func(i, j int) bool { return ret[i].Sort < ret[j].Sort }) diff --git a/kernel/model/file.go b/kernel/model/file.go index 3f1246370..0d5228432 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -374,11 +374,11 @@ func ListDocTree(boxID, listPath string, sortMode int, flashcard, showHidden boo switch sortMode { case util.SortModeNameASC: sort.Slice(docs, func(i, j int) bool { - return util.PinYinCompare(util.RemoveEmoji(docs[i].Name), util.RemoveEmoji(docs[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(docs[i].Name), util.RemoveEmojiInvisible(docs[j].Name)) }) case util.SortModeNameDESC: sort.Slice(docs, func(i, j int) bool { - return util.PinYinCompare(util.RemoveEmoji(docs[j].Name), util.RemoveEmoji(docs[i].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(docs[j].Name), util.RemoveEmojiInvisible(docs[i].Name)) }) case util.SortModeUpdatedASC: sort.Slice(docs, func(i, j int) bool { return docs[i].Mtime < docs[j].Mtime }) @@ -386,11 +386,11 @@ func ListDocTree(boxID, listPath string, sortMode int, flashcard, showHidden boo sort.Slice(docs, func(i, j int) bool { return docs[i].Mtime > docs[j].Mtime }) case util.SortModeAlphanumASC: sort.Slice(docs, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(docs[i].Name), util.RemoveEmoji(docs[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(docs[i].Name), util.RemoveEmojiInvisible(docs[j].Name)) }) case util.SortModeAlphanumDESC: sort.Slice(docs, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji(docs[j].Name), util.RemoveEmoji(docs[i].Name)) + return natsort.Compare(util.RemoveEmojiInvisible(docs[j].Name), util.RemoveEmojiInvisible(docs[i].Name)) }) case util.SortModeCustom: fileTreeFiles := docs diff --git a/kernel/model/tag.go b/kernel/model/tag.go index 744d3f1d4..6cecac8b3 100644 --- a/kernel/model/tag.go +++ b/kernel/model/tag.go @@ -228,19 +228,19 @@ func sortTags(tags Tags) { switch Conf.Tag.Sort { case util.SortModeNameASC: sort.Slice(tags, func(i, j int) bool { - return util.PinYinCompare(util.RemoveEmoji(tags[i].Name), util.RemoveEmoji(tags[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(tags[i].Name), util.RemoveEmojiInvisible(tags[j].Name)) }) case util.SortModeNameDESC: sort.Slice(tags, func(j, i int) bool { - return util.PinYinCompare(util.RemoveEmoji(tags[i].Name), util.RemoveEmoji(tags[j].Name)) + return util.PinYinCompare(util.RemoveEmojiInvisible(tags[i].Name), util.RemoveEmojiInvisible(tags[j].Name)) }) case util.SortModeAlphanumASC: sort.Slice(tags, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji((tags)[i].Name), util.RemoveEmoji((tags)[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible((tags)[i].Name), util.RemoveEmojiInvisible((tags)[j].Name)) }) case util.SortModeAlphanumDESC: sort.Slice(tags, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji((tags)[j].Name), util.RemoveEmoji((tags)[i].Name)) + return natsort.Compare(util.RemoveEmojiInvisible((tags)[j].Name), util.RemoveEmojiInvisible((tags)[i].Name)) }) case util.SortModeRefCountASC: sort.Slice(tags, func(i, j int) bool { return (tags)[i].Count < (tags)[j].Count }) @@ -248,7 +248,7 @@ func sortTags(tags Tags) { sort.Slice(tags, func(i, j int) bool { return (tags)[i].Count > (tags)[j].Count }) default: sort.Slice(tags, func(i, j int) bool { - return natsort.Compare(util.RemoveEmoji((tags)[i].Name), util.RemoveEmoji((tags)[j].Name)) + return natsort.Compare(util.RemoveEmojiInvisible((tags)[i].Name), util.RemoveEmojiInvisible((tags)[j].Name)) }) } } diff --git a/kernel/util/emoji.go b/kernel/util/rune.go similarity index 88% rename from kernel/util/emoji.go rename to kernel/util/rune.go index b44ef35c8..d124a3acc 100644 --- a/kernel/util/emoji.go +++ b/kernel/util/rune.go @@ -16,7 +16,11 @@ package util -import "regexp" +import ( + "regexp" + + "github.com/88250/gulu" +) var emojiRegex = regexp.MustCompile(`/([0-9#][\x{20E3}])|` + `[\x{00ae}\x{00a9}\x{203C}\x{2047}\x{2048}\x{2049}\x{3030}\x{303D}\x{2139}\x{2122}\x{3297}\x{3299}]|` + @@ -37,6 +41,8 @@ var emojiRegex = regexp.MustCompile(`/([0-9#][\x{20E3}])|` + `[\x{2700}-\x{27BF}]|` + `[\x{10000}-\x{E01EF}]`) -func RemoveEmoji(text string) string { - return emojiRegex.ReplaceAllString(text, "") +func RemoveEmojiInvisible(text string) (ret string) { + ret = emojiRegex.ReplaceAllString(text, "") + ret = gulu.Str.RemoveInvisible(ret) + return }