czepeko imports
This commit is contained in:
@@ -14,6 +14,10 @@ import (
|
|||||||
var mapSigs = map[string]string{
|
var mapSigs = map[string]string{
|
||||||
"./*.jpg;Objects/*.png": "drmapzo-diamond",
|
"./*.jpg;Objects/*.png": "drmapzo-diamond",
|
||||||
"./*.jpg;./*.png;Objects/*.png": "drmapzo-diamond",
|
"./*.jpg;./*.png;Objects/*.png": "drmapzo-diamond",
|
||||||
|
"./*.jpg": "czepeku-$5",
|
||||||
|
"./*.png": "czepeku-$5",
|
||||||
|
"./*.jpg;./*.png": "czepeku-$5",
|
||||||
|
"./*.jpg;Objects/*.jpg": "czepeku-$5",
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
|
|
||||||
"github.com/fatih/camelcase"
|
"github.com/fatih/camelcase"
|
||||||
"github.com/firestuff/dnd/internal"
|
"github.com/firestuff/dnd/internal"
|
||||||
|
"github.com/gobwas/glob"
|
||||||
"github.com/samber/lo"
|
"github.com/samber/lo"
|
||||||
"golang.org/x/exp/slog"
|
"golang.org/x/exp/slog"
|
||||||
)
|
)
|
||||||
@@ -18,14 +19,28 @@ import (
|
|||||||
var removeWords = map[string]bool{
|
var removeWords = map[string]bool{
|
||||||
"+": true,
|
"+": true,
|
||||||
"-": true,
|
"-": true,
|
||||||
|
"": true,
|
||||||
"-diamond": true,
|
"-diamond": true,
|
||||||
"1": true,
|
"1": true,
|
||||||
|
"1)": true,
|
||||||
"2": true,
|
"2": true,
|
||||||
|
"2)": true,
|
||||||
|
"$5": true,
|
||||||
|
"rewards": true,
|
||||||
"diamond": true,
|
"diamond": true,
|
||||||
"gridless": true,
|
"gridless": true,
|
||||||
|
"(gridless)": true,
|
||||||
|
"(gridless": true,
|
||||||
"high": true,
|
"high": true,
|
||||||
"high-res": true,
|
"high-res": true,
|
||||||
"part": true,
|
"part": true,
|
||||||
|
"pt": true,
|
||||||
|
"pt.": true,
|
||||||
|
"pt.1": true,
|
||||||
|
"pt.1)": true,
|
||||||
|
"pt.2": true,
|
||||||
|
"pt.2)": true,
|
||||||
|
"pt.3": true,
|
||||||
"psd": true,
|
"psd": true,
|
||||||
"res": true,
|
"res": true,
|
||||||
"roll20": true,
|
"roll20": true,
|
||||||
@@ -33,85 +48,50 @@ var removeWords = map[string]bool{
|
|||||||
"support": true,
|
"support": true,
|
||||||
"tier": true,
|
"tier": true,
|
||||||
"tokens": true,
|
"tokens": true,
|
||||||
|
"(tokens)": true,
|
||||||
|
"rewards(1)": true,
|
||||||
|
"transparent": true,
|
||||||
|
"pngs": true,
|
||||||
}
|
}
|
||||||
|
|
||||||
var actions = map[string]string{
|
var actions = map[string]string{
|
||||||
"2nd floors/*.png": "Maps/{MAPNAME}/Objects",
|
"Gridless/*.jpg": "Maps/{MAPNAME}",
|
||||||
"assets & tiles/*.png": "Maps/{MAPNAME}/Objects",
|
"*/*.png": "Maps/{MAPNAME}",
|
||||||
"assets & tiles/rooftops/*.png": "Maps/{MAPNAME}/Objects",
|
"*/*.jpg": "Maps/{MAPNAME}",
|
||||||
"assets & tokens/*.png": "Maps/{MAPNAME}/Objects",
|
"**ds_store": "{SKIP}",
|
||||||
"assets & tokens/rooftops/*.png": "Maps/{MAPNAME}/Objects",
|
"**/*.db": "{SKIP}",
|
||||||
"assets & tokens/rooftop_tiles/*.png": "Maps/{MAPNAME}/Objects",
|
"**/*.pdf": "{SKIP}",
|
||||||
"assets & tokens/tiles or tokens/*.png": "Maps/{MAPNAME}/Objects",
|
"**/*.mp3": "{SKIP}",
|
||||||
"creature tokens/*.png": "Creatures",
|
"**/*.zip": "{SKIP}",
|
||||||
"grid/*.jpg": "{SKIP}",
|
"__macosx/**": "{SKIP}",
|
||||||
"grid/grid 1/*.jpg": "{SKIP}",
|
"**/high resolution/*.jpg": "Maps/{MAPNAME}", // Trust that it's gridless
|
||||||
"grid/grid 2/*.jpg": "{SKIP}",
|
"**/high resolution/*.png": "Maps/{MAPNAME}", // Trust that it's gridless
|
||||||
"gridded/*.dd2vtt": "{SKIP}",
|
"**/gridless/*.jpg": "Maps/{MAPNAME}",
|
||||||
"gridded/*.jpg": "{SKIP}",
|
"**/gridless/*.jpeg": "Maps/{MAPNAME}",
|
||||||
"gridded/*.webp": "{SKIP}",
|
"**/high-res/gridless/*.jpg": "Maps/{MAPNAME}",
|
||||||
"gridless/*.jpg": "Maps/{MAPNAME}",
|
"**/high-res/gridless/*.png": "Maps/{MAPNAME}",
|
||||||
"gridless/extra color/*.jpg": "Maps/{MAPNAME}",
|
"**/high res/gridless/*.jpg": "Maps/{MAPNAME}",
|
||||||
"gridless/line/*.jpg": "Maps/{MAPNAME}",
|
"**/high res/gridless/*.png": "Maps/{MAPNAME}",
|
||||||
"gridless/normal/*.jpg": "Maps/{MAPNAME}",
|
"**/high res/gridless/attic/*.jpg": "Maps/{MAPNAME}",
|
||||||
"line/*.jpg": "Maps/{MAPNAME}",
|
"**/high res/gridless/attic/*.png": "Maps/{MAPNAME}",
|
||||||
"map tokens/*.png": "Maps/{MAPNAME}/Objects",
|
"**/high res/gridless/basement/*.jpg": "Maps/{MAPNAME}",
|
||||||
"sloop vessel/*.png": "Maps/{MAPNAME}/Objects",
|
"**/high res/gridless/basement/*.png": "Maps/{MAPNAME}",
|
||||||
"tokens/*.png": "Maps/{MAPNAME}/Objects",
|
"**/high res/gridless/floor 1/*.jpg": "Maps/{MAPNAME}",
|
||||||
"ungridded/*.dd2vtt": "{SKIP}",
|
"**/high res/gridless/floor 1/*.png": "Maps/{MAPNAME}",
|
||||||
"ungridded/*.jpg": "Maps/{MAPNAME}",
|
"**/high res/gridless/floor 2/*.jpg": "Maps/{MAPNAME}",
|
||||||
"ungridded/*.webp": "Maps/{MAPNAME}",
|
"**/high res/gridless/floor 2/*.png": "Maps/{MAPNAME}",
|
||||||
"./*.jpg": "Maps/{MAPNAME}",
|
"**/high resolution/gridless/*.jpg": "Maps/{MAPNAME}",
|
||||||
"./*.psd": "Maps/{MAPNAME}",
|
"**/grid/*.jpg": "{SKIP}",
|
||||||
"./*.pdf": "{SKIP}",
|
"**/gridded/*.jpg": "{SKIP}",
|
||||||
"*/high resolution/*.jpg": "Maps/{MAPNAME}", // Trust that it's gridless
|
"**/high-res/grid/*.jpg": "{SKIP}",
|
||||||
"*/high resolution/*.png": "Maps/{MAPNAME}", // Trust that it's gridless
|
"**/high res/grid/*.jpg": "{SKIP}",
|
||||||
"*/gridless/*.jpg": "Maps/{MAPNAME}",
|
"**/high resolution/grid/*.jpg": "{SKIP}",
|
||||||
"*/high-res/gridless/*.jpg": "Maps/{MAPNAME}",
|
"**/creature tokens/*.png": "Creatures",
|
||||||
"*/high-res/gridless/*.png": "Maps/{MAPNAME}",
|
"**/creature tokens/variants/*.png": "Creatures",
|
||||||
"*/high res/gridless/*.jpg": "Maps/{MAPNAME}",
|
"**/map tokens/*.png": "Maps/{MAPNAME}/Objects",
|
||||||
"*/high res/gridless/*.png": "Maps/{MAPNAME}",
|
"**/tokens/*.png": "Maps/{MAPNAME}/Objects",
|
||||||
"*/high res/gridless/attic/*.jpg": "Maps/{MAPNAME}",
|
"**/tokens/*.jpg": "Maps/{MAPNAME}/Objects",
|
||||||
"*/high res/gridless/attic/*.png": "Maps/{MAPNAME}",
|
"**/roll20/**": "{SKIP}",
|
||||||
"*/high res/gridless/basement/*.jpg": "Maps/{MAPNAME}",
|
|
||||||
"*/high res/gridless/basement/*.png": "Maps/{MAPNAME}",
|
|
||||||
"*/high res/gridless/floor 1/*.jpg": "Maps/{MAPNAME}",
|
|
||||||
"*/high res/gridless/floor 1/*.png": "Maps/{MAPNAME}",
|
|
||||||
"*/high res/gridless/floor 2/*.jpg": "Maps/{MAPNAME}",
|
|
||||||
"*/high res/gridless/floor 2/*.png": "Maps/{MAPNAME}",
|
|
||||||
"*/high resolution/gridless/*.jpg": "Maps/{MAPNAME}",
|
|
||||||
"*/grid/*.jpg": "{SKIP}",
|
|
||||||
"*/gridded/*.jpg": "{SKIP}",
|
|
||||||
"*/high-res/grid/*.jpg": "{SKIP}",
|
|
||||||
"*/high res/grid/*.jpg": "{SKIP}",
|
|
||||||
"*/high resolution/grid/*.jpg": "{SKIP}",
|
|
||||||
"*/creature tokens/*.png": "Creatures",
|
|
||||||
"*/creature tokens/variants/*.png": "Creatures",
|
|
||||||
"*/map tokens/*.png": "Maps/{MAPNAME}/Objects",
|
|
||||||
"*/tokens/*.png": "Maps/{MAPNAME}/Objects",
|
|
||||||
"*/roll20/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/*.png": "{SKIP}",
|
|
||||||
"*/roll20/grid/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridded/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/grid/*.png": "{SKIP}",
|
|
||||||
"*/roll20/grid/attic/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/grid/attic/*.png": "{SKIP}",
|
|
||||||
"*/roll20/grid/basement/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/grid/basement/*.png": "{SKIP}",
|
|
||||||
"*/roll20/grid/floor 1/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/grid/floor 1/*.png": "{SKIP}",
|
|
||||||
"*/roll20/grid/floor 2/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/grid/floor 2/*.png": "{SKIP}",
|
|
||||||
"*/roll20/gridless/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridless/*.png": "{SKIP}",
|
|
||||||
"*/roll20/gridless/attic/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridless/attic/*.png": "{SKIP}",
|
|
||||||
"*/roll20/gridless/basement/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridless/basement/*.png": "{SKIP}",
|
|
||||||
"*/roll20/gridless/floor 1/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridless/floor 1/*.png": "{SKIP}",
|
|
||||||
"*/roll20/gridless/floor 2/*.jpg": "{SKIP}",
|
|
||||||
"*/roll20/gridless/floor 2/*.png": "{SKIP}",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var root = flag.String("root", "", "root directory to write to")
|
var root = flag.String("root", "", "root directory to write to")
|
||||||
@@ -157,12 +137,14 @@ func importZIP(l *slog.Logger, path string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sig := strings.ToLower(internal.PathSig(file.Name))
|
sig := strings.ToLower(internal.PathSig(file.Name))
|
||||||
|
dst := ""
|
||||||
|
|
||||||
dst := actions[sig]
|
for pattern, action := range actions {
|
||||||
|
g := glob.MustCompile(pattern)
|
||||||
if dst == "" {
|
if g.Match(sig) {
|
||||||
parts := strings.Split(sig, "/")
|
dst = action
|
||||||
dst = actions["*/"+filepath.Join(parts[1:]...)]
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if dst == "" {
|
if dst == "" {
|
||||||
@@ -210,7 +192,7 @@ func mapName(path string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
i := len(parts) - 1
|
i := len(parts) - 1
|
||||||
for i >= 0 && removeWords[strings.ToLower(parts[i])] {
|
for i >= 0 && (removeWords[strings.ToLower(parts[i])] || strings.HasPrefix(parts[i], "[")) {
|
||||||
i--
|
i--
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
go.mod
1
go.mod
@@ -6,5 +6,6 @@ require github.com/samber/lo v1.38.1
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/fatih/camelcase v1.0.0
|
github.com/fatih/camelcase v1.0.0
|
||||||
|
github.com/gobwas/glob v0.2.3
|
||||||
golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea
|
golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea
|
||||||
)
|
)
|
||||||
|
|||||||
2
go.sum
2
go.sum
@@ -1,5 +1,7 @@
|
|||||||
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
|
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
|
||||||
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
|
||||||
|
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
|
||||||
|
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
|
||||||
github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
|
github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
|
||||||
github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
|
github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
|
||||||
golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea h1:vLCWI/yYrdEHyN2JzIzPO3aaQJHQdp89IZBA/+azVC4=
|
golang.org/x/exp v0.0.0-20230510235704-dd950f8aeaea h1:vLCWI/yYrdEHyN2JzIzPO3aaQJHQdp89IZBA/+azVC4=
|
||||||
|
|||||||
@@ -35,5 +35,9 @@ func DirSig(root fs.FS) string {
|
|||||||
|
|
||||||
func PathSig(path string) string {
|
func PathSig(path string) string {
|
||||||
parts := strings.Split(filepath.Base(path), ".")
|
parts := strings.Split(filepath.Base(path), ".")
|
||||||
return fmt.Sprintf("%s/*.%s", filepath.Dir(path), lo.Must(lo.Last(parts)))
|
if len(parts) == 1 {
|
||||||
|
return fmt.Sprintf("%s/%s", filepath.Dir(path), parts[0])
|
||||||
|
} else {
|
||||||
|
return fmt.Sprintf("%s/*.%s", filepath.Dir(path), lo.Must(lo.Last(parts)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user