shortfilename
function shortfilename( path ) --> name
Description
Returns the file name without the longest extension used by path. The name is the prefix befor the first dot in the final slash-separated element of path.
Parameters
- path
-
Path with file name.
Return Values
- name
-
File name without the longest extension.
Code
--ZFUNC-shortfilename-v1 local function shortfilename( path ) --> name --ZFUNC-basename-v1 local function basename( path, ext ) --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 --ZFUNC-longextname-v1 local function longextname( path ) local i = #path local doti = nil local c = string.sub( path, i, i ) while i > 0 and c ~= "/" do i = i - 1 c = string.sub( path, i, i ) if c == "." then doti = i end end if doti then return string.sub( path, doti ) end return "" end return basename( path, longextname( path ) ) end return shortfilename
Examples
local t = require( "taptest" ) local shortfilename = require( "shortfilename" ) t( shortfilename( "index.html" ), "index" ) t( shortfilename( "index.coffee.md" ), "index" ) t( shortfilename( "index.." ), "index" ) t( shortfilename( "index" ), "index" ) t( shortfilename( ".index" ), "" ) t( shortfilename( "/.index" ), "" ) t( shortfilename( "abc.def/index" ), "index" ) t()