mirror of
https://github.com/xiaoqidun/ofdgo.git
synced 2026-10-30 12:35:22 +08:00
This commit is contained in:
1 parent
2ddde73b65
commit
fa8fec9830
9 files changed
+737
-71
No files matched your search
@@ -196,6 +196,11 @@ func (e *Editor) subsetFonts(progress editorProgress) (map[string][]byte, error)
|
||||
used[resource.font.ID] = make(map[uint16]bool)
|
||||
}
|
||||
}
|
||||
if len(used) == 0 {
|
||||
return nil, progress.report("fonts", 0, 0)
|
||||
}
|
||||
refs := editorResourceRefs{ids: make(map[string]bool), files: make(map[string]bool)}
|
||||
composite := false
|
||||
total := len(e.pages) + len(e.resources)
|
||||
for i, page := range e.pages {
|
||||
if err := progress.report("fonts", i, total); err != nil {
|
||||
@@ -203,6 +208,23 @@ func (e *Editor) subsetFonts(progress editorProgress) (map[string][]byte, error)
|
||||
}
|
||||
for _, layer := range page.Content.Layer {
|
||||
for _, object := range layer.Objects {
|
||||
if object.Type == "CompositeObject" || object.Type == "CompositeGraphicUnit" {
|
||||
composite = true
|
||||
origin := e.objectOrigin(editorObjectID(object))
|
||||
if origin == nil {
|
||||
return nil, nil
|
||||
}
|
||||
data, err := editorXMLObject(origin.data, origin.node, origin.object, object)
|
||||
if err == nil {
|
||||
data, err = editorXMLStandalone(data, origin.node)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, safe := refs.scan(bytes.NewReader(data), "Page.xml"); !safe {
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
if object.Type != "TextObject" {
|
||||
continue
|
||||
}
|
||||
@@ -219,6 +241,30 @@ func (e *Editor) subsetFonts(progress editorProgress) (map[string][]byte, error)
|
||||
}
|
||||
}
|
||||
}
|
||||
if composite {
|
||||
_, _, _, files := e.usedResources()
|
||||
for i, resource := range e.resources {
|
||||
if resource.composite == "" || !slices.Contains(files, resource.name) {
|
||||
continue
|
||||
}
|
||||
if err := progress.report("fonts", len(e.pages)+i, total); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, safe := refs.scan(bytes.NewReader(resource.data), resource.name); !safe {
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
for id, usage := range refs.fonts {
|
||||
glyphs := used[id]
|
||||
if usage.unsafe || len(usage.glyphs) != 0 {
|
||||
delete(used, id)
|
||||
} else if glyphs != nil {
|
||||
for char := range usage.chars {
|
||||
glyphs[e.fonts[id].GlyphIndex(char)] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result := make(map[string][]byte)
|
||||
for i := range e.resources {
|
||||
if err := progress.report("fonts", len(e.pages)+i, total); err != nil {
|
||||
|
||||
Reference in new issue
Block a user