🐛 表格块过大时搜索无法高亮并定位匹配的关键字 Fix https://github.com/siyuan-note/siyuan/issues/6103

This commit is contained in:
Liang Ding 2022-10-09 23:55:04 +08:00
parent 72a9aa10d4
commit 3a1d8de0a3
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 23 additions and 3 deletions

View file

@ -452,9 +452,6 @@ func query2Stmt(queryStr string) (ret string) {
func markSearch(text string, keyword string, beforeLen int) (marked string, score float64) {
if 0 == len(keyword) {
marked = text
if maxLen := 5120; maxLen < utf8.RuneCountInString(marked) {
marked = gulu.Str.SubStr(marked, maxLen) + "..."
}
if strings.Contains(marked, search.SearchMarkLeft) { // 使用 FTS snippet() 处理过高亮片段,这里简单替换后就返回
marked = html.EscapeString(text)
@ -550,6 +547,21 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc
}
func maxContent(content string, maxLen int) string {
idx := strings.Index(content, "<mark>")
if 128 < maxLen && maxLen <= idx {
head := bytes.Buffer{}
for i := 0; i < 512; i++ {
r, size := utf8.DecodeLastRuneInString(content[:idx])
head.WriteRune(r)
idx -= size
if 64 < head.Len() {
break
}
}
content = util.Reverse(head.String()) + content[idx:]
}
if maxLen < utf8.RuneCountInString(content) {
return gulu.Str.SubStr(content, maxLen) + "..."
}

View file

@ -15,3 +15,11 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package util
func Reverse(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}