mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 13:56:32 +08:00
1 parent
4853ad702b
commit
01b1740a83
2 files changed
+33
-12
No files matched your search
+18
-9
@@ -91,7 +91,7 @@ func (e *Editor) sourcePartsPrepared(progress editorProgress, generated map[stri
|
||||
known.refs = scan.refs
|
||||
}
|
||||
generated[name] = known
|
||||
if reader.OFD.DocBody[reader.documentIndex].versioned && !known.stagedLeaf(nil) {
|
||||
if (reader.DocumentCount() > 1 || reader.OFD.DocBody[reader.documentIndex].versioned) && !known.stagedLeaf(nil) {
|
||||
input := data.open()
|
||||
if e.output != nil {
|
||||
input = imageInput{ReadCloser: input, context: e.output.ctx}
|
||||
@@ -592,24 +592,33 @@ func (e *Editor) writeSource(writer io.Writer, fonts map[string][]byte, progress
|
||||
return 0, err
|
||||
}
|
||||
maps.Copy(parts, fonts)
|
||||
reader := e.source.reader
|
||||
ctx := context.Background()
|
||||
if e.output != nil {
|
||||
ctx = e.output.ctx
|
||||
}
|
||||
versioned := reader.OFD.DocBody[reader.documentIndex].versioned
|
||||
if !versioned && reader.DocumentCount() > 1 {
|
||||
parts, err = reader.versionOutputChanges(ctx, parts, nil, generated)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
removed, err := e.compactSourceReferences(parts, progress, generated)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
reader := e.source.reader
|
||||
if removed == nil {
|
||||
removed = make(map[string]bool)
|
||||
}
|
||||
if err := e.compressResourceReferences(parts, reader, removed, generated); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
ctx := context.Background()
|
||||
if e.output != nil {
|
||||
ctx = e.output.ctx
|
||||
}
|
||||
parts, err = reader.versionOutputChanges(ctx, parts, removed, generated)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
if versioned {
|
||||
parts, err = reader.versionOutputChanges(ctx, parts, removed, generated)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
if len(parts) != 0 || len(removed) != 0 || e.output != nil && e.output.options.Mode != CompressionUnchanged && !e.output.protected {
|
||||
name := "OFD.xml"
|
||||
|
||||
+15
-3
@@ -255,14 +255,14 @@ func (r *Reader) versionResourceFiles(ctx context.Context, parts map[string][]by
|
||||
return files, nil
|
||||
}
|
||||
|
||||
// versionChanges 隔离当前入口修改涉及的共享文件,同步版本清单,不修改输入包或修改集
|
||||
// versionChanges 隔离当前文档或版本修改涉及的共享文件,同步版本清单,不修改输入包或修改集
|
||||
// 入参: ctx 取消上下文, changes 待写入条目
|
||||
// 返回: map[string][]byte 隔离后的修改集, error 读取、引用或结构错误
|
||||
func (r *Reader) versionChanges(ctx context.Context, changes map[string][]byte) (map[string][]byte, error) {
|
||||
return r.versionOutputChanges(ctx, changes, nil, nil)
|
||||
}
|
||||
|
||||
// versionOutputChanges 隔离版本改动并同步删除清单,保留其他入口仍需使用的文件
|
||||
// versionOutputChanges 隔离文档或版本改动并同步删除清单,保留其他入口仍需使用的文件
|
||||
// 入参: ctx 取消上下文, changes 待写入条目, removed 待删除条目,返回前移除受保护路径, generated 本次自产页面及引用,随隔离路径更新
|
||||
// 返回: map[string][]byte 隔离后的修改集, error 读取、引用或结构错误
|
||||
func (r *Reader) versionOutputChanges(ctx context.Context, changes map[string][]byte, removed map[string]bool, generated map[string]editorGeneratedReferences) (map[string][]byte, error) {
|
||||
@@ -273,7 +273,7 @@ func (r *Reader) versionOutputChanges(ctx context.Context, changes map[string][]
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !r.OFD.DocBody[r.documentIndex].versioned || len(changes) == 0 && len(removed) == 0 {
|
||||
if r.DocumentCount() == 1 && !r.OFD.DocBody[r.documentIndex].versioned || len(changes) == 0 && len(removed) == 0 {
|
||||
return changes, ctx.Err()
|
||||
}
|
||||
parts := maps.Clone(changes)
|
||||
@@ -295,6 +295,18 @@ func (r *Reader) versionOutputChanges(ctx context.Context, changes map[string][]
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if r.versionInfo == nil && len(removed) == 0 {
|
||||
changed := false
|
||||
for name := range parts {
|
||||
if name != "OFD.xml" && shared[name] {
|
||||
changed = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !changed {
|
||||
return parts, ctx.Err()
|
||||
}
|
||||
}
|
||||
graph, err := r.versionEditGraph(ctx, entry, parts, generated)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in new issue
Block a user