Преглед на файлове

:art: 虚拟引用和反链提及大小写敏感遵循搜索设置 Fix https://github.com/siyuan-note/siyuan/issues/6181

Liang Ding преди 2 години
родител
ревизия
2c610c2bad
променени са 2 файла, в които са добавени 20 реда и са изтрити 9 реда
  1. 15 8
      kernel/model/search.go
  2. 5 1
      kernel/sql/block_ref_query.go

+ 15 - 8
kernel/model/search.go

@@ -648,19 +648,26 @@ func markReplaceSpan(text string, keywords []string, replacementStart, replaceme
 		}
 
 		for _, k := range keywords {
-			if gulu.Str.IsASCII(k) {
-				if gulu.Str.IsASCII(part) {
-					if part == k {
-						parts[i] = replacementStart + k + replacementEnd
+			tmpPart := part
+			tmpK := k
+			if !Conf.Search.CaseSensitive {
+				tmpPart = strings.ToLower(part)
+				tmpK = strings.ToLower(k)
+			}
+
+			if gulu.Str.IsASCII(tmpK) {
+				if gulu.Str.IsASCII(tmpPart) {
+					if tmpPart == tmpK {
+						parts[i] = replacementStart + part + replacementEnd
 					}
 				} else {
-					if strings.Contains(part, k) {
-						parts[i] = strings.ReplaceAll(part, k, replacementStart+k+replacementEnd)
+					if strings.Contains(tmpPart, tmpK) {
+						parts[i] = search.EncloseHighlighting(part, []string{k}, replacementStart, replacementEnd, Conf.Search.CaseSensitive)
 					}
 				}
 			} else {
-				if strings.Contains(part, k) {
-					parts[i] = strings.ReplaceAll(part, k, replacementStart+k+replacementEnd)
+				if strings.Contains(tmpPart, tmpK) {
+					parts[i] = search.EncloseHighlighting(part, []string{k}, replacementStart, replacementEnd, Conf.Search.CaseSensitive)
 				}
 			}
 		}

+ 5 - 1
kernel/sql/block_ref_query.go

@@ -195,7 +195,11 @@ func QueryBlockDefIDsByRefText(refText string, excludeIDs []string) (ret []strin
 func queryDefIDsByDefText(keyword string, excludeIDs []string) (ret []string) {
 	ret = []string{}
 	notIn := "('" + strings.Join(excludeIDs, "','") + "')"
-	rows, err := query("SELECT DISTINCT(def_block_id) FROM refs WHERE content = ? AND def_block_id NOT IN "+notIn, keyword)
+	q := "SELECT DISTINCT(def_block_id) FROM refs WHERE content LIKE ? AND def_block_id NOT IN " + notIn
+	if caseSensitive {
+		q = "SELECT DISTINCT(def_block_id) FROM refs WHERE content = ? AND def_block_id NOT IN " + notIn
+	}
+	rows, err := query(q, keyword)
 	if nil != err {
 		logging.LogErrorf("sql query failed: %s", err)
 		return