diff options
Diffstat (limited to 'tpl/path/path.go')
-rw-r--r-- | tpl/path/path.go | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tpl/path/path.go b/tpl/path/path.go index d334dd906..378b97e03 100644 --- a/tpl/path/path.go +++ b/tpl/path/path.go @@ -18,6 +18,7 @@ import ( "fmt" _path "path" "path/filepath" + "strings" "github.com/gohugoio/hugo/deps" "github.com/spf13/cast" @@ -94,6 +95,21 @@ func (ns *Namespace) Base(path any) (string, error) { return _path.Base(spath), nil } +// BaseName returns the last element of path, removing the extension if present. +// Trailing slashes are removed before extracting the last element. +// If the path is empty, Base returns ".". +// If the path consists entirely of slashes, Base returns "/". +// The input path is passed into filepath.ToSlash converting any Windows slashes +// to forward slashes. +func (ns *Namespace) BaseName(path any) (string, error) { + spath, err := cast.ToStringE(path) + if err != nil { + return "", err + } + spath = filepath.ToSlash(spath) + return strings.TrimSuffix(_path.Base(spath), _path.Ext(spath)), nil +} + // Split splits path immediately following the final slash, // separating it into a directory and file name component. // If there is no slash in path, Split returns an empty dir and |