This commit is contained in:
parent
805d1db063
commit
ab8b70d78d
1 changed files with 88 additions and 88 deletions
|
@ -236,94 +236,6 @@ func GetBacklinkDoc(defID, refTreeID string) (ret []*Backlink) {
|
|||
return
|
||||
}
|
||||
|
||||
func buildLinkRefs(defRootID string, refs []*sql.Ref) (ret []*Block, refsCount int, excludeBacklinkIDs *hashset.Set) {
|
||||
// 为了减少查询,组装好 IDs 后一次查出
|
||||
defSQLBlockIDs, refSQLBlockIDs := map[string]bool{}, map[string]bool{}
|
||||
var queryBlockIDs []string
|
||||
for _, ref := range refs {
|
||||
defSQLBlockIDs[ref.DefBlockID] = true
|
||||
refSQLBlockIDs[ref.BlockID] = true
|
||||
queryBlockIDs = append(queryBlockIDs, ref.DefBlockID)
|
||||
queryBlockIDs = append(queryBlockIDs, ref.BlockID)
|
||||
}
|
||||
querySQLBlocks := sql.GetBlocks(queryBlockIDs)
|
||||
defSQLBlocksCache := map[string]*sql.Block{}
|
||||
for _, defSQLBlock := range querySQLBlocks {
|
||||
if nil != defSQLBlock && defSQLBlockIDs[defSQLBlock.ID] {
|
||||
defSQLBlocksCache[defSQLBlock.ID] = defSQLBlock
|
||||
}
|
||||
}
|
||||
refSQLBlocksCache := map[string]*sql.Block{}
|
||||
for _, refSQLBlock := range querySQLBlocks {
|
||||
if nil != refSQLBlock && refSQLBlockIDs[refSQLBlock.ID] {
|
||||
refSQLBlocksCache[refSQLBlock.ID] = refSQLBlock
|
||||
}
|
||||
}
|
||||
|
||||
var links []*Block
|
||||
excludeBacklinkIDs = hashset.New()
|
||||
for _, ref := range refs {
|
||||
defSQLBlock := defSQLBlocksCache[(ref.DefBlockID)]
|
||||
if nil == defSQLBlock {
|
||||
continue
|
||||
}
|
||||
|
||||
refSQLBlock := refSQLBlocksCache[ref.BlockID]
|
||||
if nil == refSQLBlock {
|
||||
continue
|
||||
}
|
||||
refBlock := fromSQLBlock(refSQLBlock, "", 12)
|
||||
if defRootID == refBlock.RootID { // 排除当前文档内引用提及
|
||||
excludeBacklinkIDs.Add(refBlock.RootID, refBlock.ID)
|
||||
}
|
||||
defBlock := fromSQLBlock(defSQLBlock, "", 12)
|
||||
if defBlock.RootID == defRootID { // 当前文档的定义块
|
||||
links = append(links, defBlock)
|
||||
if ref.DefBlockID == defBlock.ID {
|
||||
defBlock.Refs = append(defBlock.Refs, refBlock)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
excludeBacklinkIDs.Add(ref.RootID, ref.ID)
|
||||
}
|
||||
refsCount += len(link.Refs)
|
||||
}
|
||||
|
||||
processedParagraphs := hashset.New()
|
||||
var paragraphParentIDs []string
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
if "NodeParagraph" == ref.Type {
|
||||
paragraphParentIDs = append(paragraphParentIDs, ref.ParentID)
|
||||
}
|
||||
}
|
||||
}
|
||||
paragraphParents := sql.GetBlocks(paragraphParentIDs)
|
||||
for _, p := range paragraphParents {
|
||||
if "i" == p.Type || "h" == p.Type {
|
||||
ret = append(ret, fromSQLBlock(p, "", 12))
|
||||
processedParagraphs.Add(p.ID)
|
||||
}
|
||||
}
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
if "NodeParagraph" == ref.Type {
|
||||
if processedParagraphs.Contains(ref.ParentID) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
ref.DefID = link.ID
|
||||
ref.DefPath = link.Path
|
||||
ret = append(ret, ref)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func buildBacklink(refID string, refTree *parse.Tree, luteEngine *lute.Lute) (ret *Backlink) {
|
||||
n := treenode.GetNodeInTree(refTree, refID)
|
||||
if nil == n {
|
||||
|
@ -412,6 +324,94 @@ func BuildTreeBacklink(id, keyword, mentionKeyword string, beforeLen int) (boxID
|
|||
return
|
||||
}
|
||||
|
||||
func buildLinkRefs(defRootID string, refs []*sql.Ref) (ret []*Block, refsCount int, excludeBacklinkIDs *hashset.Set) {
|
||||
// 为了减少查询,组装好 IDs 后一次查出
|
||||
defSQLBlockIDs, refSQLBlockIDs := map[string]bool{}, map[string]bool{}
|
||||
var queryBlockIDs []string
|
||||
for _, ref := range refs {
|
||||
defSQLBlockIDs[ref.DefBlockID] = true
|
||||
refSQLBlockIDs[ref.BlockID] = true
|
||||
queryBlockIDs = append(queryBlockIDs, ref.DefBlockID)
|
||||
queryBlockIDs = append(queryBlockIDs, ref.BlockID)
|
||||
}
|
||||
querySQLBlocks := sql.GetBlocks(queryBlockIDs)
|
||||
defSQLBlocksCache := map[string]*sql.Block{}
|
||||
for _, defSQLBlock := range querySQLBlocks {
|
||||
if nil != defSQLBlock && defSQLBlockIDs[defSQLBlock.ID] {
|
||||
defSQLBlocksCache[defSQLBlock.ID] = defSQLBlock
|
||||
}
|
||||
}
|
||||
refSQLBlocksCache := map[string]*sql.Block{}
|
||||
for _, refSQLBlock := range querySQLBlocks {
|
||||
if nil != refSQLBlock && refSQLBlockIDs[refSQLBlock.ID] {
|
||||
refSQLBlocksCache[refSQLBlock.ID] = refSQLBlock
|
||||
}
|
||||
}
|
||||
|
||||
var links []*Block
|
||||
excludeBacklinkIDs = hashset.New()
|
||||
for _, ref := range refs {
|
||||
defSQLBlock := defSQLBlocksCache[(ref.DefBlockID)]
|
||||
if nil == defSQLBlock {
|
||||
continue
|
||||
}
|
||||
|
||||
refSQLBlock := refSQLBlocksCache[ref.BlockID]
|
||||
if nil == refSQLBlock {
|
||||
continue
|
||||
}
|
||||
refBlock := fromSQLBlock(refSQLBlock, "", 12)
|
||||
if defRootID == refBlock.RootID { // 排除当前文档内引用提及
|
||||
excludeBacklinkIDs.Add(refBlock.RootID, refBlock.ID)
|
||||
}
|
||||
defBlock := fromSQLBlock(defSQLBlock, "", 12)
|
||||
if defBlock.RootID == defRootID { // 当前文档的定义块
|
||||
links = append(links, defBlock)
|
||||
if ref.DefBlockID == defBlock.ID {
|
||||
defBlock.Refs = append(defBlock.Refs, refBlock)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
excludeBacklinkIDs.Add(ref.RootID, ref.ID)
|
||||
}
|
||||
refsCount += len(link.Refs)
|
||||
}
|
||||
|
||||
processedParagraphs := hashset.New()
|
||||
var paragraphParentIDs []string
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
if "NodeParagraph" == ref.Type {
|
||||
paragraphParentIDs = append(paragraphParentIDs, ref.ParentID)
|
||||
}
|
||||
}
|
||||
}
|
||||
paragraphParents := sql.GetBlocks(paragraphParentIDs)
|
||||
for _, p := range paragraphParents {
|
||||
if "i" == p.Type || "h" == p.Type {
|
||||
ret = append(ret, fromSQLBlock(p, "", 12))
|
||||
processedParagraphs.Add(p.ID)
|
||||
}
|
||||
}
|
||||
for _, link := range links {
|
||||
for _, ref := range link.Refs {
|
||||
if "NodeParagraph" == ref.Type {
|
||||
if processedParagraphs.Contains(ref.ParentID) {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
ref.DefID = link.ID
|
||||
ref.DefPath = link.Path
|
||||
ret = append(ret, ref)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func removeDuplicatedRefs(refs []*sql.Ref) (ret []*sql.Ref) {
|
||||
for _, ref := range refs {
|
||||
contain := false
|
||||
|
|
Loading…
Add table
Reference in a new issue