diff --git a/kernel/go.mod b/kernel/go.mod
index e96081be6..0722fa086 100644
--- a/kernel/go.mod
+++ b/kernel/go.mod
@@ -6,7 +6,7 @@ require (
github.com/88250/clipboard v0.1.5
github.com/88250/css v0.1.2
github.com/88250/flock v0.8.2
- github.com/88250/gulu v1.2.1
+ github.com/88250/gulu v1.2.2
github.com/88250/lute v1.7.4-0.20220525011519-3148f42c174b
github.com/88250/melody v0.0.0-20201115062536-c0b3394adcd1
github.com/88250/pdfcpu v0.3.13
diff --git a/kernel/go.sum b/kernel/go.sum
index 902c27495..2a432cccf 100644
--- a/kernel/go.sum
+++ b/kernel/go.sum
@@ -48,8 +48,8 @@ github.com/88250/flock v0.8.2/go.mod h1:k+PZxETAUe4vLZx3R39ykvQCIlwHhc7AI2P2NUQV
github.com/88250/go-sqlite3 v1.14.13-0.20220412041952-88c3aaa8595e h1:uXi4QLKI/mswcXuzD+wBjJMkj1C3hK5Tgl3hF6MJpbo=
github.com/88250/go-sqlite3 v1.14.13-0.20220412041952-88c3aaa8595e/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/88250/gulu v1.2.0/go.mod h1:ZhEJ98UjR2y7j2toGj4/b+1rRELcZFQAPq/Yjyin2yY=
-github.com/88250/gulu v1.2.1 h1:omRzVo2IToCL1sclmAy3Xq81vAW7nY/vZN1FopAvJtg=
-github.com/88250/gulu v1.2.1/go.mod h1:I1qBzsksFL2ciGSuqDE7R3XW4BUMrfDgOvSXEk7FsAI=
+github.com/88250/gulu v1.2.2 h1:LsuDSXI4GjqAD2XasG/DJEHuboKXU2lhZ9w0mnfJj3Y=
+github.com/88250/gulu v1.2.2/go.mod h1:I1qBzsksFL2ciGSuqDE7R3XW4BUMrfDgOvSXEk7FsAI=
github.com/88250/lute v1.7.4-0.20220426011157-34c9bfa2e148/go.mod h1:Bdu9LRNjQhtL3TftbtpjIWTwDVAXoS7AD8QsZQPk7zo=
github.com/88250/lute v1.7.4-0.20220525011519-3148f42c174b h1:UwGrvVWNkXpyv8FkazWeV0brdmhM7FpWE3qMfqF1K+4=
github.com/88250/lute v1.7.4-0.20220525011519-3148f42c174b/go.mod h1:Bdu9LRNjQhtL3TftbtpjIWTwDVAXoS7AD8QsZQPk7zo=
diff --git a/kernel/model/css.go b/kernel/model/css.go
index 8eb5e8138..0d6bf8dfc 100644
--- a/kernel/model/css.go
+++ b/kernel/model/css.go
@@ -236,7 +236,7 @@ func WriteCustomCSS(themeName string, cssMap map[string]interface{}) (err error)
return
}
- cssData := util.RemoveInvisible(string(data))
+ cssData := gulu.Str.RemoveInvisible(string(data))
customStyleSheet := css.Parse(cssData)
buf := &bytes.Buffer{}
diff --git a/kernel/model/file.go b/kernel/model/file.go
index f191158c0..f8f0e84ac 100644
--- a/kernel/model/file.go
+++ b/kernel/model/file.go
@@ -540,7 +540,7 @@ func GetDoc(id string, index int, keyword string, mode int, size int) (blockCoun
var tmp []string
for _, k := range virtualBlockRefKeywords {
repl := "" + k + ""
- if util.IsASCII(k) {
+ if gulu.Str.IsASCII(k) {
tmp = append(tmp, " "+k, " "+repl)
tmp = append(tmp, " "+k+" ", " "+repl+" ")
tmp = append(tmp, k+" ", repl+" ")
@@ -617,7 +617,7 @@ func GetDoc(id string, index int, keyword string, mode int, size int) (blockCoun
blockKeys = append(blockKeys, alias)
}
if 0 < len(blockKeys) {
- keys := util.SubstringsBetween(newContent, "", "")
+ keys := gulu.Str.SubstringsBetween(newContent, "", "")
for _, k := range keys {
if gulu.Str.Contains(k, blockKeys) {
return ast.WalkContinue
@@ -1173,7 +1173,7 @@ func RenameDoc(boxID, p, title string) (err error) {
return
}
- title = util.RemoveInvisible(title)
+ title = gulu.Str.RemoveInvisible(title)
oldTitle := tree.Root.IALAttr("title")
if oldTitle == title {
return
@@ -1287,7 +1287,7 @@ func CreateDailyNote(boxID string) (p string, err error) {
}
func createDoc(boxID, p, title, dom string) (err error) {
- title = util.RemoveInvisible(title)
+ title = gulu.Str.RemoveInvisible(title)
baseName := strings.TrimSpace(path.Base(p))
if "" == strings.TrimSuffix(baseName, ".sy") {
diff --git a/kernel/model/search.go b/kernel/model/search.go
index 69d1980b7..459c6974f 100644
--- a/kernel/model/search.go
+++ b/kernel/model/search.go
@@ -224,7 +224,7 @@ func searchFilter(types map[string]bool) string {
}
func searchBySQL(stmt string, beforeLen int) (ret []*Block) {
- stmt = util.RemoveInvisible(stmt)
+ stmt = gulu.Str.RemoveInvisible(stmt)
blocks := sql.SelectBlocksRawStmt(stmt, Conf.Search.Limit)
ret = fromSQLBlocks(&blocks, "", beforeLen)
if 1 > len(ret) {
@@ -234,7 +234,7 @@ func searchBySQL(stmt string, beforeLen int) (ret []*Block) {
}
func fullTextSearchRefBlock(keyword string, beforeLen int) (ret []*Block) {
- keyword = util.RemoveInvisible(keyword)
+ keyword = gulu.Str.RemoveInvisible(keyword)
if util.IsIDPattern(keyword) {
ret = searchBySQL("SELECT * FROM `blocks` WHERE `id` = '"+keyword+"'", 36)
@@ -282,7 +282,7 @@ func fullTextSearchRefBlock(keyword string, beforeLen int) (ret []*Block) {
}
func fullTextSearch(query, box, path, filter string, beforeLen int, querySyntax bool) (ret []*Block) {
- query = util.RemoveInvisible(query)
+ query = gulu.Str.RemoveInvisible(query)
if util.IsIDPattern(query) {
ret = searchBySQL("SELECT * FROM `blocks` WHERE `id` = '"+query+"'", beforeLen)
return
@@ -394,7 +394,7 @@ func markSearch(text string, keyword string, beforeLen int) (marked string, scor
return
}
- keywords := util.SubstringsBetween(marked, "__@mark__", "__mark@__")
+ keywords := gulu.Str.SubstringsBetween(marked, "__@mark__", "__mark@__")
keywords = util.RemoveDuplicatedElem(keywords)
keyword = strings.Join(keywords, search.TermSep)
marked = strings.ReplaceAll(marked, "__@mark__", "")
diff --git a/kernel/model/sync.go b/kernel/model/sync.go
index 5ea4c026e..4a3ff5629 100644
--- a/kernel/model/sync.go
+++ b/kernel/model/sync.go
@@ -1137,7 +1137,7 @@ func CreateCloudSyncDir(name string) (err error) {
defer syncLock.Unlock()
name = strings.TrimSpace(name)
- name = util.RemoveInvisible(name)
+ name = gulu.Str.RemoveInvisible(name)
if !IsValidCloudDirName(name) {
return errors.New(Conf.Language(37))
}
diff --git a/kernel/treenode/marker.go b/kernel/treenode/marker.go
index 1e4dc4e1e..a094ee304 100644
--- a/kernel/treenode/marker.go
+++ b/kernel/treenode/marker.go
@@ -17,12 +17,12 @@
package treenode
import (
+ "github.com/88250/gulu"
"github.com/88250/lute/lex"
- "github.com/siyuan-note/siyuan/kernel/util"
)
func ContainsMarker(str string) bool {
- if !util.IsASCII(str) {
+ if !gulu.Str.IsASCII(str) {
return false
}
diff --git a/kernel/util/string.go b/kernel/util/string.go
index bc075cc2f..739e0a6bc 100644
--- a/kernel/util/string.go
+++ b/kernel/util/string.go
@@ -15,99 +15,3 @@
// along with this program. If not, see .
package util
-
-import (
- "strings"
- "unicode"
-)
-
-func RemoveInvisible(str string) string {
- str = strings.ReplaceAll(str, "\u00A0", " ") // NBSP 转换为普通空格
- str = RemoveZeroWidthCharacters(str)
- str = stripCtlFromUTF8(str)
- return str
-}
-
-func stripCtlFromUTF8(str string) string {
- return strings.Map(func(r rune) rune {
- if r >= 32 && r != 127 {
- return r
- }
- return -1
- }, str)
-}
-
-const (
- // ZWSP represents zero-width space.
- ZWSP = '\u200B'
-
- // ZWNBSP represents zero-width no-break space.
- ZWNBSP = '\uFEFF'
-
- // ZWJ represents zero-width joiner.
- ZWJ = '\u200D'
-
- // ZWNJ represents zero-width non-joiner.
- ZWNJ = '\u200C'
-
- empty = ""
-)
-
-var replacer = strings.NewReplacer(string(ZWSP), empty,
- string(ZWNBSP), empty,
- string(ZWJ), empty,
- string(ZWNJ), empty)
-
-// HasZeroWidthCharacters reports whether string s contains zero-width characters.
-func HasZeroWidthCharacters(s string) bool {
- return strings.ContainsRune(s, ZWSP) ||
- strings.ContainsRune(s, ZWNBSP) ||
- strings.ContainsRune(s, ZWJ) ||
- strings.ContainsRune(s, ZWNJ)
-}
-
-// RemoveZeroWidthCharacters removes all zero-width characters from string s.
-func RemoveZeroWidthCharacters(s string) string {
- return replacer.Replace(s)
-}
-
-// RemoveZeroWidthSpace removes zero-width space characters from string s.
-func RemoveZeroWidthSpace(s string) string {
- return strings.Replace(s, string(ZWSP), empty, -1)
-}
-
-// RemoveZeroWidthNoBreakSpace removes zero-width no-break space characters from string s.
-func RemoveZeroWidthNoBreakSpace(s string) string {
- return strings.Replace(s, string(ZWNBSP), empty, -1)
-}
-
-// RemoveZeroWidthJoiner removes zero-width joiner characters from string s.
-func RemoveZeroWidthJoiner(s string) string {
- return strings.Replace(s, string(ZWJ), empty, -1)
-}
-
-// RemoveZeroWidthNonJoiner removes zero-width non-joiner characters from string s.
-func RemoveZeroWidthNonJoiner(s string) string {
- return strings.Replace(s, string(ZWNJ), empty, -1)
-}
-
-func IsASCII(s string) bool {
- for i := 0; i < len(s); i++ {
- if s[i] > unicode.MaxASCII {
- return false
- }
- }
- return true
-}
-
-func SubstringsBetween(str, start, end string) (ret []string) {
- parts := strings.Split(str, start)
- for _, p := range parts {
- if !strings.Contains(p, end) {
- continue
- }
- parts2 := strings.Split(p, end)
- ret = append(ret, parts2[0])
- }
- return
-}