mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-29 14:53:44 +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 {
|
if len(removed) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
files, structures := make(map[string]bool), map[string]bool{"OFD.xml": true}
|
indexes := make([]int, reader.DocumentCount())
|
||||||
for i := range reader.DocumentCount() {
|
for index := range indexes {
|
||||||
_, xmlFiles, err := reader.documentDependencies(ctx, i)
|
if err := ctx.Err(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
if ctx.Err() != nil {
|
|
||||||
return ctx.Err()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
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)
|
versions := make(map[string]*editorFontXML)
|
||||||
names := slices.Sorted(maps.Keys(structures))
|
names := slices.Sorted(maps.Keys(structures))
|
||||||
for _, name := range slices.Sorted(maps.Keys(reader.fileNames)) {
|
for _, name := range slices.Sorted(maps.Keys(reader.fileNames)) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ package ofdgo
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"maps"
|
"maps"
|
||||||
"slices"
|
"slices"
|
||||||
@@ -46,14 +47,31 @@ func (e *Editor) compactVersionFonts(ctx context.Context, parts map[string][]byt
|
|||||||
if err := view.initRootContext(ctx); err != nil {
|
if err := view.initRootContext(ctx); err != nil {
|
||||||
return err
|
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)
|
candidates, seen := make(map[string]bool), make(map[string]bool)
|
||||||
for index := range view.DocumentCount() {
|
for _, body := range root.children {
|
||||||
view.documentIndex = index
|
if err := ctx.Err(); err != nil {
|
||||||
versions, err := view.DocumentVersionsContext(ctx)
|
return err
|
||||||
|
}
|
||||||
|
if !body.matchesOFD("DocBody") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
versions, err := parseVersionEntries(ctx, body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
for _, file := range version.Files {
|
||||||
if err := ctx.Err(); err != nil {
|
if err := ctx.Err(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -109,6 +109,16 @@ func (r *Reader) documentVersionEntriesContext(ctx context.Context) ([]DocumentV
|
|||||||
if body == nil {
|
if body == nil {
|
||||||
return nil, fmt.Errorf("document body not found: %d", r.documentIndex)
|
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")
|
versions := body.child("Versions")
|
||||||
if versions == nil {
|
if versions == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|||||||
Reference in new issue
Block a user