From 13dbacad150bcfda1efd3f5ef7e048906b7778f6 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Sun, 11 Oct 2026 01:57:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=AD=97=E4=BD=93=E8=A3=81=E5=89=AA):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=89=88=E6=9C=AC=E5=AD=97=E4=BD=93=E8=A3=81?= =?UTF-8?q?=E5=89=AA=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ofdgo_compression_fonts.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/ofdgo_compression_fonts.go b/ofdgo_compression_fonts.go index e781b43..ce2de31 100644 --- a/ofdgo_compression_fonts.go +++ b/ofdgo_compression_fonts.go @@ -29,10 +29,18 @@ type compressionFontBinding struct { unsafe bool } -// compressionFontUsage 按文档解析字体引用,按文件路径合并共享字体的全部用字 +// compressionFontUsage 按文档合并共享字体用字,版本编辑仅统计选中入口 // 入参: ctx 取消上下文, parts 输出改动, generated 自产页面引用, documents 文档入口, resources 资源索引, references 各文件引用, read 输出文件读取方法 // 返回: map[string]*editorFontUsage 各字体文件的用字,无法确定作用域时为空, error 读取或取消错误 func (r *Reader) compressionFontUsage(ctx context.Context, parts map[string][]byte, generated map[string]editorGeneratedReferences, documents map[string]bool, resources []string, references map[string]*editorResourceRefs, read func(string) ([]byte, error)) (map[string]*editorFontUsage, error) { + selected := "" + if r.OFD.DocBody[r.documentIndex].versioned { + var err error + selected, err = r.DocumentRoot() + if err != nil { + return nil, err + } + } bindings := make(map[string][]compressionFontBinding) for _, name := range resources { if err := ctx.Err(); err != nil { @@ -75,12 +83,17 @@ func (r *Reader) compressionFontUsage(ctx context.Context, parts map[string][]by refs := editorResourceRefs{fonts: make(map[string]*editorFontUsage)} for name := range scope { if source := references[name]; source != nil { - for id, usage := range source.fonts { - refs.fontUsage(id).merge(usage, false) + if selected == "" || selected == entry { + for id, usage := range source.fonts { + refs.fontUsage(id).merge(usage, false) + } } used[name] = true } } + if selected != "" && selected != entry { + continue + } for name := range scope { for _, binding := range bindings[name] { usage := refs.fonts[binding.id]