Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2022-09-16 21:17:10 +08:00
commit 1994998530
3 changed files with 33 additions and 5 deletions

View file

@ -71,7 +71,7 @@ func NewSearch() *Search {
HTMLBlock: true,
Limit: 64,
CaseSensitive: false,
CaseSensitive: true,
Name: true,
Alias: true,

View file

@ -926,11 +926,24 @@ func exportMarkdownContent(id string) (hPath, exportedMd string) {
}
func processKaTexMacros(n *ast.Node) {
if ast.NodeInlineMathContent != n.Type && ast.NodeMathBlockContent != n.Type {
if ast.NodeInlineMathContent != n.Type && ast.NodeMathBlockContent != n.Type && ast.NodeTextMark != n.Type {
return
}
if ast.NodeTextMark == n.Type && !n.IsTextMarkType("inline-math") {
return
}
var mathContent string
if ast.NodeTextMark == n.Type {
mathContent = n.TextMarkInlineMathContent
} else {
mathContent = string(n.Tokens)
}
mathContent = strings.TrimSpace(mathContent)
if "" == mathContent {
return
}
mathContent := string(n.Tokens)
macros := map[string]string{}
if err := gulu.JSON.UnmarshalJSON([]byte(Conf.Editor.KaTexMacros), &macros); nil != err {
logging.LogWarnf("parse katex macros failed: %s", err)
@ -961,7 +974,11 @@ func processKaTexMacros(n *ast.Node) {
mathContent = strings.ReplaceAll(mathContent, usedMacro, expanded)
}
mathContent = unescapeKaTexSupportedFunctions(mathContent)
n.Tokens = []byte(mathContent)
if ast.NodeTextMark == n.Type {
n.TextMarkInlineMathContent = mathContent
} else {
n.Tokens = []byte(mathContent)
}
}
func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros bool) (ret *parse.Tree) {
@ -1062,6 +1079,11 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros bool) (ret *parse.T
case ast.NodeInlineMathContent, ast.NodeMathBlockContent:
n.Tokens = bytes.TrimSpace(n.Tokens) // 导出 Markdown 时去除公式内容中的首尾空格 https://github.com/siyuan-note/siyuan/issues/4666
return ast.WalkContinue
case ast.NodeTextMark:
if n.IsTextMarkType("inline-math") {
n.TextMarkInlineMathContent = strings.TrimSpace(n.TextMarkInlineMathContent)
return ast.WalkContinue
}
case ast.NodeFileAnnotationRef:
refIDNode := n.ChildByType(ast.NodeFileAnnotationRefID)
if nil == refIDNode {
@ -1211,7 +1233,7 @@ func exportTree(tree *parse.Tree, wysiwyg, expandKaTexMacros bool) (ret *parse.T
}
}
if expandKaTexMacros && (ast.NodeInlineMathContent == n.Type || ast.NodeMathBlockContent == n.Type) {
if expandKaTexMacros && (ast.NodeInlineMathContent == n.Type || ast.NodeMathBlockContent == n.Type || (ast.NodeTextMark == n.Type && n.IsTextMarkType("inline-math"))) {
processKaTexMacros(n)
}

View file

@ -883,6 +883,12 @@ func (tx *Transaction) doUpdate(operation *Operation) (ret *TxErr) {
// 剔除空白的行级公式
unlinks = append(unlinks, n)
}
} else if ast.NodeTextMark == n.Type {
if n.IsTextMarkType("inline-math") {
if "" == strings.TrimSpace(n.TextMarkInlineMathContent) {
unlinks = append(unlinks, n)
}
}
} else if ast.NodeBlockRef == n.Type {
sql.CacheRef(subTree, n)
} else if ast.NodeTextMark == n.Type && n.IsTextMarkType("block-ref") {