diff --git a/kernel/model/appearance.go b/kernel/model/appearance.go index cd08f0248..dca1f2b09 100644 --- a/kernel/model/appearance.go +++ b/kernel/model/appearance.go @@ -65,6 +65,8 @@ func InitAppearance() { } Conf.Save() + + util.InitEmojiChars() } func containTheme(name string, themes []*conf.AppearanceTheme) bool { diff --git a/kernel/model/assets.go b/kernel/model/assets.go index 160b10fb4..179c71f6f 100644 --- a/kernel/model/assets.go +++ b/kernel/model/assets.go @@ -962,7 +962,7 @@ func MissingAssets() (ret []string) { func emojisInTree(tree *parse.Tree) (ret []string) { if icon := tree.Root.IALAttr("icon"); "" != icon { - if !strings.Contains(icon, "://") && !strings.HasPrefix(icon, "api/icon/") { + if !strings.Contains(icon, "://") && !strings.HasPrefix(icon, "api/icon/") && !util.NativeEmojiChars[icon] { ret = append(ret, "/emojis/"+icon) } } diff --git a/kernel/model/export.go b/kernel/model/export.go index 9b59e5edd..25762d5c7 100644 --- a/kernel/model/export.go +++ b/kernel/model/export.go @@ -752,7 +752,6 @@ func ExportMarkdownHTML(id, savePath string, docx, merge bool) (name, dom string to := filepath.Join(savePath, emoji) if err := filelock.Copy(from, to); err != nil { logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, to, err) - return } } @@ -910,7 +909,6 @@ func ExportHTML(id, savePath string, pdf, image, keepFold, merge bool) (name, do to := filepath.Join(savePath, emoji) if err := filelock.Copy(from, to); err != nil { logging.LogErrorf("copy emojis from [%s] to [%s] failed: %s", from, to, err) - return } } } diff --git a/kernel/util/rune.go b/kernel/util/rune.go index 77de77a07..3e385d5ae 100644 --- a/kernel/util/rune.go +++ b/kernel/util/rune.go @@ -17,10 +17,13 @@ package util import ( + "os" + "path/filepath" "regexp" "unicode" "github.com/88250/gulu" + "github.com/siyuan-note/logging" ) func ContainsCJK(text string) bool { @@ -65,3 +68,29 @@ func RemoveInvalid(text string) (ret string) { ret = gulu.Str.RemovePUA(ret) return } + +var NativeEmojiChars = map[string]bool{} + +func InitEmojiChars() { + builtConfPath := filepath.Join(AppearancePath, "emojis", "conf.json") + data, err := os.ReadFile(builtConfPath) + if err != nil { + logging.LogErrorf("read emojis conf.json failed: %s", err) + return + } + + var conf []map[string]interface{} + if err = gulu.JSON.UnmarshalJSON(data, &conf); err != nil { + logging.LogErrorf("unmarshal emojis conf.json failed: %s", err) + return + } + + for _, emoji := range conf { + items := emoji["items"].([]interface{}) + for _, item := range items { + e := item.(map[string]interface{}) + NativeEmojiChars[e["unicode"].(string)] = true + } + } + return +}