summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2014-07-26 12:46:53 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2014-07-26 12:46:53 +0200
commitf60e809b87c6d9b0ea87ceeb54507d486f2934eb (patch)
tree9fa52ea13b5e05d2c4a8ce8c81ada454bbf7c470
parentcdd478fce0ba30e0a2f7af7604b05bb34e392a88 (diff)
downloadlualibs-f60e809b87c6d9b0ea87ceeb54507d486f2934eb.tar.gz
sync with Context as of 2014-07-26
-rw-r--r--lualibs-dir.lua9
-rw-r--r--lualibs-file.lua17
-rw-r--r--lualibs-table.lua25
3 files changed, 42 insertions, 9 deletions
diff --git a/lualibs-dir.lua b/lualibs-dir.lua
index 660529b..bcf28d0 100644
--- a/lualibs-dir.lua
+++ b/lualibs-dir.lua
@@ -36,9 +36,14 @@ if onwindows then
-- lfs.isdir does not like trailing /
-- lfs.dir accepts trailing /
+ local tricky = S("/\\") * P(-1)
+
isdir = function(name)
- name = gsub(name,"([/\\]+)$","/.")
- return attributes(name,"mode") == "directory"
+ if lpegmatch(tricky,name) then
+ return attributes(name,"mode") == "directory"
+ else
+ return attributes(name.."/.","mode") == "directory"
+ end
end
isfile = function(name)
diff --git a/lualibs-file.lua b/lualibs-file.lua
index ebb2b39..c05372a 100644
--- a/lualibs-file.lua
+++ b/lualibs-file.lua
@@ -495,6 +495,23 @@ function file.collapsepath(str,anchor) -- anchor: false|nil, true, "."
end
end
+-- better this way:
+
+local tricky = S("/\\") * P(-1)
+local attributes = lfs.attributes
+
+function lfs.isdir(name)
+ if lpegmatch(tricky,name) then
+ return attributes(name,"mode") == "directory"
+ else
+ return attributes(name.."/.","mode") == "directory"
+ end
+end
+
+function lfs.isfile(name)
+ return attributes(name,"mode") == "file"
+end
+
-- local function test(str,...)
-- print(string.format("%-20s %-15s %-30s %-20s",str,file.collapsepath(str),file.collapsepath(str,true),file.collapsepath(str,".")))
-- end
diff --git a/lualibs-table.lua b/lualibs-table.lua
index ca067fb..e642106 100644
--- a/lualibs-table.lua
+++ b/lualibs-table.lua
@@ -922,16 +922,27 @@ end
table.identical = identical
table.are_equal = are_equal
--- maybe also make a combined one
-
-function table.compact(t) -- remove empty tables, assumes subtables
- if t then
- for k, v in next, t do
- if not next(v) then -- no type checking
- t[k] = nil
+local function sparse(old,nest,keeptables)
+ local new = { }
+ for k, v in next, old do
+ if not (v == "" or v == false) then
+ if nest and type(v) == "table" then
+ v = sparse(v,nest)
+ if keeptables or next(v) then
+ new[k] = v
+ end
+ else
+ new[k] = v
end
end
end
+ return new
+end
+
+table.sparse = sparse
+
+function table.compact(t)
+ return sparse(t,true,true)
end
function table.contains(t, v)