From ba6f0e2067fe1c36219c384e213943f0cf1b10b5 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 21 Nov 2022 22:44:46 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E8=B6=85=E7=BA=A7=E5=9D=97=E4=B8=8B?= =?UTF-8?q?=E6=96=B9=E5=9D=97=E9=9D=A2=E5=8C=85=E5=B1=91=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=20Fix=20https://github.com/siyuan-n?= =?UTF-8?q?ote/siyuan/issues/6675?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/blockinfo.go | 18 ++++++++++++------ kernel/treenode/heading.go | 8 ++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) 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