feat(编辑能力): 修复删页引用清理
build.yaml / build (push) Successful in 47s

This commit is contained in:
xiaoqidun committed 2026-10-10 15:07:26 +08:00
1 parent 50938740c9
commit 26568927e5
2 files changed
+12 -11

No files matched your search

+1 -1
View File
@@ -306,7 +306,7 @@ func (e *Editor) DeletePages(indexes []int) error {
e.removedPages = make(map[string]bool) e.removedPages = make(map[string]bool)
} }
for _, page := range saved { for _, page := range saved {
e.removedPages[page.ID] = true e.removedPages[editorResourceID(page.ID)] = true
} }
kept, next := e.pages[:0], 0 kept, next := e.pages[:0], 0
for index, page := range e.pages { for index, page := range e.pages {
+11 -10
View File
@@ -31,21 +31,22 @@ func (e *Editor) prunePageReferences(parts map[string][]byte, generated map[stri
removed = make(map[string]bool) removed = make(map[string]bool)
} }
for id := range e.source.pages { for id := range e.source.pages {
removed[id] = true removed[editorResourceID(id)] = true
} }
for id := range e.source.annotationPages { for id := range e.source.annotationPages {
removed[id] = true removed[editorResourceID(id)] = true
} }
for _, page := range e.pages { for _, page := range e.pages {
delete(removed, page.ID) delete(removed, editorResourceID(page.ID))
} }
delete(removed, "")
if len(removed) == 0 { if len(removed) == 0 {
return nil return nil
} }
reader := e.source.reader reader := e.source.reader
bookmarks := make(map[string]bool) bookmarks := make(map[string]bool)
for _, bookmark := range e.source.document.Bookmarks.Bookmark { for _, bookmark := range e.source.document.Bookmarks.Bookmark {
if removed[bookmark.Dest.PageID] { if removed[editorResourceID(bookmark.Dest.PageID)] {
bookmarks[bookmark.Name] = true bookmarks[bookmark.Name] = true
} }
} }
@@ -105,7 +106,7 @@ func (e *Editor) prunePageReferences(parts map[string][]byte, generated map[stri
case "Action": case "Action":
if target := node.child("Goto"); target != nil { if target := node.child("Goto"); target != nil {
if dest := target.child("Dest"); dest != nil { if dest := target.child("Dest"); dest != nil {
remove = removed[dest.attr("PageID")] remove = removed[editorResourceID(dest.attr("PageID"))]
} else if bookmark := target.child("Bookmark"); bookmark != nil { } else if bookmark := target.child("Bookmark"); bookmark != nil {
remove = bookmarks[bookmark.attr("Name")] remove = bookmarks[bookmark.attr("Name")]
} }
@@ -116,14 +117,14 @@ func (e *Editor) prunePageReferences(parts map[string][]byte, generated map[stri
} }
case "Page": case "Page":
if root.name.Local == "Annotations" { if root.name.Local == "Annotations" {
remove = removed[node.attr("PageID")] remove = removed[editorResourceID(node.attr("PageID"))]
} }
case "Dest": case "Dest":
remove = removed[node.attr("PageID")] remove = removed[editorResourceID(node.attr("PageID"))]
case "StampAnnot": case "StampAnnot":
remove = removed[node.attr("PageRef")] remove = removed[editorResourceID(node.attr("PageRef"))]
case "Extension": case "Extension":
remove = removed[node.attr("RefId")] remove = removed[editorResourceID(node.attr("RefId"))]
} }
if remove { if remove {
patches = append(patches, editorXMLPatch{start: node.start, end: node.end}) patches = append(patches, editorXMLPatch{start: node.start, end: node.end})
@@ -197,7 +198,7 @@ func pruneCreatedPageReferences(data []byte, removed map[string]bool) ([]byte, e
} }
if node.name.Local == "Action" { if node.name.Local == "Action" {
if target := node.child("Goto"); target != nil { if target := node.child("Goto"); target != nil {
if dest := target.child("Dest"); dest != nil && removed[dest.attr("PageID")] { if dest := target.child("Dest"); dest != nil && removed[editorResourceID(dest.attr("PageID"))] {
patches = append(patches, editorXMLPatch{start: node.start, end: node.end}) patches = append(patches, editorXMLPatch{start: node.start, end: node.end})
return return
} }