mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 13:56:32 +08:00
1 parent
8864f6c7ba
commit
2e3809179b
3 files changed
+43
-13
No files matched your search
@@ -546,17 +546,19 @@ func pruneExternalFontFiles(ctx context.Context, reader *Reader, candidates ...s
|
||||
if len(removed) == 0 {
|
||||
return nil
|
||||
}
|
||||
files, structures := make(map[string]bool), map[string]bool{"OFD.xml": true}
|
||||
for i := range reader.DocumentCount() {
|
||||
_, xmlFiles, err := reader.documentDependencies(ctx, i)
|
||||
if err != nil {
|
||||
if ctx.Err() != nil {
|
||||
return ctx.Err()
|
||||
}
|
||||
return nil
|
||||
indexes := make([]int, reader.DocumentCount())
|
||||
for index := range indexes {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
maps.Copy(structures, xmlFiles)
|
||||
indexes[index] = index
|
||||
}
|
||||
_, structures, err := reader.documentDependencies(ctx, indexes...)
|
||||
if err != nil {
|
||||
return ctx.Err()
|
||||
}
|
||||
structures["OFD.xml"] = true
|
||||
files := make(map[string]bool)
|
||||
versions := make(map[string]*editorFontXML)
|
||||
names := slices.Sorted(maps.Keys(structures))
|
||||
for _, name := range slices.Sorted(maps.Keys(reader.fileNames)) {
|
||||
|
||||
@@ -17,6 +17,7 @@ package ofdgo
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"maps"
|
||||
"slices"
|
||||
@@ -46,14 +47,31 @@ func (e *Editor) compactVersionFonts(ctx context.Context, parts map[string][]byt
|
||||
if err := view.initRootContext(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
data, err := view.readFileViewContext(ctx, "OFD.xml")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
root, err := parseEditorXMLContext(ctx, data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
candidates, seen := make(map[string]bool), make(map[string]bool)
|
||||
for index := range view.DocumentCount() {
|
||||
view.documentIndex = index
|
||||
versions, err := view.DocumentVersionsContext(ctx)
|
||||
for _, body := range root.children {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
if !body.matchesOFD("DocBody") {
|
||||
continue
|
||||
}
|
||||
versions, err := parseVersionEntries(ctx, body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, version := range versions {
|
||||
for _, entry := range versions {
|
||||
version, err := view.readDocumentVersionContext(ctx, entry.ID, entry.Location)
|
||||
if err != nil {
|
||||
return fmt.Errorf("version %s: %w", entry.ID, err)
|
||||
}
|
||||
for _, file := range version.Files {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return err
|
||||
|
||||
@@ -109,6 +109,16 @@ func (r *Reader) documentVersionEntriesContext(ctx context.Context) ([]DocumentV
|
||||
if body == nil {
|
||||
return nil, fmt.Errorf("document body not found: %d", r.documentIndex)
|
||||
}
|
||||
return parseVersionEntries(ctx, body)
|
||||
}
|
||||
|
||||
// parseVersionEntries 校验一个文档的版本列表,复用已解析的主入口节点
|
||||
// 入参: ctx 取消上下文, body 文档入口节点
|
||||
// 返回: []DocumentVersionInfo 版本入口属性, error 结构或取消错误
|
||||
func parseVersionEntries(ctx context.Context, body *editorXML) ([]DocumentVersionInfo, error) {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
versions := body.child("Versions")
|
||||
if versions == nil {
|
||||
return nil, nil
|
||||
|
||||
Reference in new issue
Block a user