diff options
author | Hans Hagen <pragma@wxs.nl> | 2010-05-27 13:47:00 +0200 |
---|---|---|
committer | Hans Hagen <pragma@wxs.nl> | 2010-05-27 13:47:00 +0200 |
commit | 37850ef35f93a14936b4d7d33790d14c050bbbb4 (patch) | |
tree | 74e469e150bd989ced66e107bd1d73a640149521 /tex/context/base/l-file.lua | |
parent | e08195a7149edffddb4b69b480676fad336a7613 (diff) | |
download | context-37850ef35f93a14936b4d7d33790d14c050bbbb4.tar.gz |
beta 2010.05.27 13:47
Diffstat (limited to 'tex/context/base/l-file.lua')
-rw-r--r-- | tex/context/base/l-file.lua | 79 |
1 files changed, 57 insertions, 22 deletions
diff --git a/tex/context/base/l-file.lua b/tex/context/base/l-file.lua index 2bfc07090..749d98191 100644 --- a/tex/context/base/l-file.lua +++ b/tex/context/base/l-file.lua @@ -14,41 +14,76 @@ local concat = table.concat local find, gmatch, match, gsub, sub, char = string.find, string.gmatch, string.match, string.gsub, string.sub, string.char local lpegmatch = lpeg.match -function file.removesuffix(filename) - return (gsub(filename,"%.[%a%d]+$","")) +local function dirname(name,default) + return match(name,"^(.+)[/\\].-$") or (default or "") end -function file.addsuffix(filename, suffix) - if not suffix or suffix == "" then - return filename - elseif not find(filename,"%.[%a%d]+$") then - return filename .. "." .. suffix - else - return filename - end +local function basename(name) + return match(name,"^.+[/\\](.-)$") or name end -function file.replacesuffix(filename, suffix) - return (gsub(filename,"%.[%a%d]+$","")) .. "." .. suffix +local function nameonly(name) + return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$","")) end -function file.dirname(name,default) - return match(name,"^(.+)[/\\].-$") or (default or "") +local function extname(name,default) + return match(name,"^.+%.([^/\\]-)$") or default or "" end -function file.basename(name) - return match(name,"^.+[/\\](.-)$") or name +local function splitname(name) + local n, s = match(name,"^(.+)%.([^/\\]-)$") + return n or name, s or "" end -function file.nameonly(name) - return (gsub(match(name,"^.+[/\\](.-)$") or name,"%..*$","")) +file.basename = basename +file.dirname = dirname +file.nameonly = nameonly +file.extname = extname +file.suffix = extname + +function file.removesuffix(filename) + return (gsub(filename,"%.[%a%d]+$","")) end -function file.extname(name,default) - return match(name,"^.+%.([^/\\]-)$") or default or "" +function file.addsuffix(filename, suffix, criterium) + if not suffix or suffix == "" then + return filename + elseif criterium == true then + return filename .. "." .. suffix + else + local n, s = splitname(filename) + if s and s ~= "" then + local t = type(criterium) + if t == "table" then + -- keep if in criterium + for i=1,#criterium do + if s == criterium[i] then + return filename + end + end + elseif t == "string" then + -- keep if criterium + if s == criterium then + return filename + end + end + end + return n .. "." .. suffix + end end -file.suffix = file.extname +--~ print(file.addsuffix("name","new") .. "-> name.new") +--~ print(file.addsuffix("name.old","new") .. "-> name.old") +--~ print(file.addsuffix("name.old","new",true) .. "-> name.old.new") +--~ print(file.addsuffix("name.old","new","new") .. "-> name.new") +--~ print(file.addsuffix("name.old","new","old") .. "-> name.old") +--~ print(file.addsuffix("name.old","new","foo") .. "-> name.new") +--~ print(file.addsuffix("name.old","new",{"foo","bar"}) .. "-> name.new") +--~ print(file.addsuffix("name.old","new",{"old","bar"}) .. "-> name.old") + +function file.replacesuffix(filename, suffix) + return (gsub(filename,"%.[%a%d]+$","")) .. "." .. suffix +end --~ function file.join(...) --~ local pth = concat({...},"/") @@ -101,7 +136,7 @@ end --~ print(file.join("//nas-1","/y")) function file.iswritable(name) - local a = lfs.attributes(name) or lfs.attributes(file.dirname(name,".")) + local a = lfs.attributes(name) or lfs.attributes(dirname(name,".")) return a and sub(a.permissions,2,2) == "w" end |