diff --git a/kernel/model/blockinfo.go b/kernel/model/blockinfo.go index 67f9bcce1..1a7aef8ed 100644 --- a/kernel/model/blockinfo.go +++ b/kernel/model/blockinfo.go @@ -276,15 +276,21 @@ func buildBlockBreadcrumb(node *ast.Node) (ret []*BlockPath) { } for prev := parent.Previous; nil != prev; prev = prev.Previous { - if ast.NodeHeading == prev.Type && headingLevel > prev.HeadingLevel { - name = gulu.Str.SubStr(renderBlockText(prev), maxNameLen) + b := prev + if ast.NodeSuperBlock == prev.Type { + // 超级块下方块面包屑计算不正确 https://github.com/siyuan-note/siyuan/issues/6675 + b = treenode.SuperBlockLastHeading(prev) + } + + if ast.NodeHeading == b.Type && headingLevel > b.HeadingLevel { + name = gulu.Str.SubStr(renderBlockText(b), maxNameLen) ret = append([]*BlockPath{{ - ID: prev.ID, + ID: b.ID, Name: name, - Type: prev.Type.String(), - SubType: treenode.SubTypeAbbr(prev), + Type: b.Type.String(), + SubType: treenode.SubTypeAbbr(b), }}, ret...) - headingLevel = prev.HeadingLevel + headingLevel = b.HeadingLevel } } } diff --git a/kernel/treenode/heading.go b/kernel/treenode/heading.go index 50d49918a..02797f45d 100644 --- a/kernel/treenode/heading.go +++ b/kernel/treenode/heading.go @@ -117,6 +117,14 @@ func SuperBlockHeading(sb *ast.Node) *ast.Node { return nil } +func SuperBlockLastHeading(sb *ast.Node) *ast.Node { + headings := sb.ChildrenByType(ast.NodeHeading) + if 0 < len(headings) { + return headings[len(headings)-1] + } + return nil +} + func HeadingParent(node *ast.Node) *ast.Node { if nil == node { return nil