Skip to content

Commit e867ecf

Browse files
committed
refactor: add support for go1.16's WalkDir
Add support for using the faster WalkDir method when building against go1.16.
1 parent 345eec7 commit e867ecf

File tree

3 files changed

+68
-18
lines changed

3 files changed

+68
-18
lines changed

finder.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package sysfont
22

33
import (
4-
"os"
54
"path/filepath"
65
"strings"
76

87
"github.com/adrg/strutil"
9-
"github.com/adrg/xdg"
108
)
119

1210
// Finder is used to identify installed fonts. It can match fonts based on user
@@ -32,14 +30,7 @@ func NewFinder(opts *FinderOpts) *Finder {
3230
}
3331

3432
var fonts []*Font
35-
walker := func(filename string, info os.FileInfo, err error) error {
36-
if err != nil {
37-
return err
38-
}
39-
if info.IsDir() {
40-
return nil
41-
}
42-
33+
findFonts(opts, func(filename string) error {
4334
// Check file extension.
4435
if extensions := opts.Extensions; len(extensions) > 0 {
4536
extension := filepath.Ext(strings.ToLower(filename))
@@ -56,14 +47,7 @@ func NewFinder(opts *FinderOpts) *Finder {
5647

5748
fonts = append(fonts, matches...)
5849
return nil
59-
}
60-
61-
// Traverse OS font directories.
62-
for _, dir := range xdg.FontDirs {
63-
if err := filepath.Walk(dir, walker); err != nil {
64-
continue
65-
}
66-
}
50+
})
6751

6852
return &Finder{
6953
fonts: fonts,

finder_dirwalk.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//go:build go1.16
2+
// +build go1.16
3+
4+
package sysfont
5+
6+
import (
7+
"io/fs"
8+
"path/filepath"
9+
10+
"github.com/adrg/xdg"
11+
)
12+
13+
func findFonts(opts *FinderOpts, fn func(filename string) error) {
14+
walker := func(filename string, info fs.DirEntry, err error) error {
15+
if err != nil {
16+
return err
17+
}
18+
if info.IsDir() {
19+
return nil
20+
}
21+
22+
return fn(filename)
23+
}
24+
25+
// Traverse OS font directories.
26+
for _, dir := range xdg.FontDirs {
27+
if err := filepath.WalkDir(dir, walker); err != nil {
28+
continue
29+
}
30+
}
31+
32+
return
33+
}

finder_walk.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//go:build !go1.16
2+
// +build !go1.16
3+
4+
package sysfont
5+
6+
import (
7+
"os"
8+
"path/filepath"
9+
10+
"github.com/adrg/xdg"
11+
)
12+
13+
func findFonts(opts *FinderOpts, fn func(filename string) error) {
14+
walker := func(filename string, info os.FileInfo, err error) error {
15+
if err != nil {
16+
return err
17+
}
18+
if info.IsDir() {
19+
return nil
20+
}
21+
22+
return fn(filename)
23+
}
24+
25+
// Traverse OS font directories.
26+
for _, dir := range xdg.FontDirs {
27+
if err := filepath.Walk(dir, walker); err != nil {
28+
continue
29+
}
30+
}
31+
32+
return
33+
}

0 commit comments

Comments
 (0)