feat(字体加载): 优化字体加载
build.yaml / build (push) Successful in 35s

This commit is contained in:
2026-07-23 16:19:58 +08:00
parent 960bb2b1e0
commit a60a935f50
+18 -10
View File
@@ -72,18 +72,20 @@ func (fsys *FontFS) Len() int {
// 入参: name 字体文件名 // 入参: name 字体文件名
// 返回: fs.File 字体文件, error 错误信息 // 返回: fs.File 字体文件, error 错误信息
func (fsys *FontFS) Open(name string) (fs.File, error) { func (fsys *FontFS) Open(name string) (fs.File, error) {
name = cleanFontName(name) if !fs.ValidPath(name) {
return nil, &fs.PathError{Op: "open", Path: name, Err: fs.ErrInvalid}
}
if name == "." { if name == "." {
return &fontDir{entries: fsys.entries()}, nil return &fontDir{entries: fsys.entries()}, nil
} }
data, ok := fsys.files[name] data, ok := fsys.files[strings.ToLower(name)]
if !ok { if !ok {
return nil, fs.ErrNotExist return nil, &fs.PathError{Op: "open", Path: name, Err: fs.ErrNotExist}
} }
return &fontMemFile{ return &fontMemFile{
Reader: bytes.NewReader(data), Reader: bytes.NewReader(data),
info: fontFileInfo{ info: fontFileInfo{
name: name, name: strings.ToLower(name),
size: int64(len(data)), size: int64(len(data)),
}, },
}, nil }, nil
@@ -93,9 +95,15 @@ func (fsys *FontFS) Open(name string) (fs.File, error) {
// 入参: name 目录名 // 入参: name 目录名
// 返回: []fs.DirEntry 目录条目, error 错误信息 // 返回: []fs.DirEntry 目录条目, error 错误信息
func (fsys *FontFS) ReadDir(name string) ([]fs.DirEntry, error) { func (fsys *FontFS) ReadDir(name string) ([]fs.DirEntry, error) {
name = cleanFontName(name) if !fs.ValidPath(name) {
return nil, &fs.PathError{Op: "readdir", Path: name, Err: fs.ErrInvalid}
}
if name != "." { if name != "." {
return nil, fs.ErrNotExist err := fs.ErrNotExist
if _, ok := fsys.files[strings.ToLower(name)]; ok {
err = fs.ErrInvalid
}
return nil, &fs.PathError{Op: "readdir", Path: name, Err: err}
} }
return fsys.entries(), nil return fsys.entries(), nil
} }
@@ -104,10 +112,7 @@ func (fsys *FontFS) ReadDir(name string) ([]fs.DirEntry, error) {
// 入参: pattern 匹配模式 // 入参: pattern 匹配模式
// 返回: []string 字体文件列表, error 错误信息 // 返回: []string 字体文件列表, error 错误信息
func (fsys *FontFS) Glob(pattern string) ([]string, error) { func (fsys *FontFS) Glob(pattern string) ([]string, error) {
if _, err := path.Match(pattern, ""); err != nil { return fs.Glob(struct{ fs.FS }{fsys}, pattern)
return nil, err
}
return fsys.match(pattern), nil
} }
// Match 匹配指定字体名称 // Match 匹配指定字体名称
@@ -522,6 +527,9 @@ func (d *fontDir) Close() error {
// 返回: []fs.DirEntry 目录条目, error 错误信息 // 返回: []fs.DirEntry 目录条目, error 错误信息
func (d *fontDir) ReadDir(count int) ([]fs.DirEntry, error) { func (d *fontDir) ReadDir(count int) ([]fs.DirEntry, error) {
if d.offset >= len(d.entries) { if d.offset >= len(d.entries) {
if count <= 0 {
return nil, nil
}
return nil, io.EOF return nil, io.EOF
} }
if count <= 0 || d.offset+count > len(d.entries) { if count <= 0 || d.offset+count > len(d.entries) {