mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-05-02 06:22:26 +08:00
🎨 Improve list item, super block and blockquote backlink propagation https://github.com/siyuan-note/siyuan/issues/13776
This commit is contained in:
parent
58c257960b
commit
1d77cdefc2
@ -588,18 +588,41 @@ func buildLinkRefs(defRootID string, refs []*sql.Ref, keywords []string) (ret []
|
||||
sqlParagraphParents := sql.GetBlocks(paragraphParentIDs)
|
||||
paragraphParents := fromSQLBlocks(&sqlParagraphParents, "", 12)
|
||||
|
||||
luteEngine := util.NewLute()
|
||||
originalRefBlockIDs = map[string]string{}
|
||||
processedParagraphs := hashset.New()
|
||||
for _, parent := range paragraphParents {
|
||||
if "NodeListItem" == parent.Type || "NodeBlockquote" == parent.Type || "NodeSuperBlock" == parent.Type {
|
||||
paragraphUseParentLi := true
|
||||
if refBlock := parentRefParagraphs[parent.ID]; nil != refBlock {
|
||||
processedParagraphs.Add(parent.ID)
|
||||
if "NodeListItem" == parent.Type && parent.FContent != refBlock.Content {
|
||||
if inlineTree := parse.Inline("", []byte(refBlock.Markdown), luteEngine.ParseOptions); nil != inlineTree {
|
||||
for c := inlineTree.Root.FirstChild.FirstChild; c != nil; c = c.Next {
|
||||
if treenode.IsBlockRef(c) {
|
||||
continue
|
||||
}
|
||||
|
||||
if "" != strings.TrimSpace(c.Text()) {
|
||||
paragraphUseParentLi = false
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if paragraphUseParentLi {
|
||||
processedParagraphs.Add(parent.ID)
|
||||
}
|
||||
|
||||
originalRefBlockIDs[parent.ID] = refBlock.ID
|
||||
if !matchBacklinkKeyword(parent, keywords) {
|
||||
refsCount--
|
||||
continue
|
||||
}
|
||||
ret = append(ret, parent)
|
||||
|
||||
if paragraphUseParentLi {
|
||||
ret = append(ret, parent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ func IsBlockRef(n *ast.Node) bool {
|
||||
if nil == n {
|
||||
return false
|
||||
}
|
||||
return ast.NodeTextMark == n.Type && n.IsTextMarkType("block-ref")
|
||||
return (ast.NodeTextMark == n.Type && n.IsTextMarkType("block-ref")) || ast.NodeBlockRef == n.Type
|
||||
}
|
||||
|
||||
func IsBlockLink(n *ast.Node) bool {
|
||||
|
Loading…
Reference in New Issue
Block a user