basename

function basename( path [, ext] ) --> name

Description

Returns the trailing name of the path, with the ability to remove the extension.

Parameters

path

A unix like path.

ext

If the name component ends with ext this will also be cut off.

Return Values

name

Trailing name of the path.

Code

--ZFUNC-basename-v1
local function basename( path, ext ) --> name
   --ZFUNC-rmsuffix-v1
   local function rmsuffix( str, suffix )
      local suffixlen = string.len( suffix )
      local endsub = string.sub( str, -suffixlen )
      if endsub == suffix then
         local n = string.len( str ) - suffixlen
         return string.sub( str, 1, n )
      else
         return str
      end
   end

   local i = #path
   local c = string.sub( path, i, i )
   while i > 0 and c ~= "/" do
      i = i - 1
      c = string.sub( path, i, i )
   end

   local name = path
   if i ~= 0 then name = string.sub( path, i+1 ) end

   if ext then
      return rmsuffix( name, ext )
   else
      return name
   end
end

return basename

Examples

local t = require( "tapered" )
local basename = require( "basename" )

path = "/foo/bar/baz/asdf/quux.html"
t.is( "quux.html", basename( path ) )
t.is( "quux", basename( path, ".html" ) )

t.is( "quux.html", basename( "quux.html" ) )
t.is( "quux", basename( "quux.html", ".html" ) )

t.done()