From 8bf6646514569024a5c14025af07b451f94ca97a Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 15 Jul 2024 12:18:44 +0800 Subject: [PATCH] :art: Support find replace block ref anchor text https://github.com/siyuan-note/siyuan/issues/11978 --- app/appearance/langs/en_US.json | 1 + app/appearance/langs/es_ES.json | 1 + app/appearance/langs/fr_FR.json | 1 + app/appearance/langs/ja_JP.json | 1 + app/appearance/langs/zh_CHT.json | 1 + app/appearance/langs/zh_CN.json | 1 + app/src/constants.ts | 1 + app/src/types/config.d.ts | 5 +++++ kernel/model/search.go | 16 ++++++++++++++++ 9 files changed, 28 insertions(+) diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index d62b803d1..18b045398 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -112,6 +112,7 @@ "strong": "Bold", "inlineMath": "Inline formula", "inlineMemo": "Inline memo", + "blockRef": "Ref anchor text", "kbd": "Keyboard", "mark": "Mark", "s": "Strikethrough", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 6cec67e18..71e272e13 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -112,6 +112,7 @@ "strong": "negrita", "inlineMath": "Fórmula en línea", "inlineMemo": "Nota en línea", + "blockRef": "texto de anclaje de referencia", "kbd": "Teclado", "mark": "Marca", "s": "Tachado", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 1f6407171..d38fe5dba 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -112,6 +112,7 @@ "strong": "Audacieux", "inlineMath": "Formule en ligne", "inlineMemo": "Mémo en ligne", + "blockRef": "texte d'ancrage de référence", "kbd": "Clavier", "mark": "Marquer", "s": "Barré", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index 6d2239d47..a058f4593 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -112,6 +112,7 @@ "strong": "太字", "inlineMath": "インライン数式", "inlineMemo": "インラインメモ", + "blockRef": "アンカー テキストを引用する", "kbd": "キーボード", "mark": "ハイライト", "s": "取り消し線", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index ad8747616..703b0d84e 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -112,6 +112,7 @@ "strong": "粗體", "inlineMath": "行級公式", "inlineMemo": "行級備註", + "blockRef": "引用錨文本", "kbd": "鍵盤", "mark": "高亮", "s": "刪除", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 1004333d3..9c9a0b91b 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -112,6 +112,7 @@ "strong": "粗体", "inlineMath": "行级公式", "inlineMemo": "行级备注", + "blockRef": "引用锚文本", "kbd": "键盘", "mark": "高亮", "s": "删除", diff --git a/app/src/constants.ts b/app/src/constants.ts index 0d78fa3d8..6d2022468 100644 --- a/app/src/constants.ts +++ b/app/src/constants.ts @@ -612,6 +612,7 @@ export abstract class Constants { "strong": true, "inlineMath": false, "inlineMemo": true, + "blockRef": false, "kbd": true, "mark": true, "s": true, diff --git a/app/src/types/config.d.ts b/app/src/types/config.d.ts index 5076311f0..1f2975ce3 100644 --- a/app/src/types/config.d.ts +++ b/app/src/types/config.d.ts @@ -2105,6 +2105,11 @@ declare namespace Config { * @default true */ inlineMemo?: boolean; + /** + * Replace block refs + * @default false + */ + blockRef?: boolean; /** * Replace kdb elements * @default true diff --git a/kernel/model/search.go b/kernel/model/search.go index e5cb90c54..fc01586c0 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -747,6 +747,22 @@ func FindReplace(keyword, replacement string, replaceTypes map[string]bool, ids } replaceNodeTextMarkTextContent(n, method, keyword, replacement, r, "text") + } else if n.IsTextMarkType("block-ref") { + if !replaceTypes["blockRef"] { + return ast.WalkContinue + } + + if 0 == method { + if strings.Contains(n.TextMarkTextContent, keyword) { + n.TextMarkTextContent = strings.ReplaceAll(n.TextMarkTextContent, keyword, replacement) + n.TextMarkBlockRefSubtype = "s" + } + } else if 3 == method { + if nil != r && r.MatchString(n.TextMarkTextContent) { + n.TextMarkTextContent = r.ReplaceAllString(n.TextMarkTextContent, replacement) + n.TextMarkBlockRefSubtype = "s" + } + } } } return ast.WalkContinue