mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-16 14:40:12 +01:00
🐛 表格块过大时搜索无法高亮并定位匹配的关键字 Fix https://github.com/siyuan-note/siyuan/issues/6103
This commit is contained in:
parent
72a9aa10d4
commit
3a1d8de0a3
2 changed files with 23 additions and 3 deletions
|
|
@ -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) + "..."
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue