diff options
Diffstat (limited to 'lualibs-dir.lua')
| -rw-r--r-- | lualibs-dir.lua | 66 | 
1 files changed, 43 insertions, 23 deletions
| diff --git a/lualibs-dir.lua b/lualibs-dir.lua index 40081cc..2572120 100644 --- a/lualibs-dir.lua +++ b/lualibs-dir.lua @@ -25,8 +25,9 @@ local isdir      = lfs.isdir  local isfile     = lfs.isfile  local currentdir = lfs.currentdir  local chdir      = lfs.chdir +local mkdir      = lfs.mkdir -local onwindows  = os.type == "windows" or find(os.getenv("PATH"),";") +local onwindows  = os.type == "windows" or find(os.getenv("PATH"),";",1,true)  -- in case we load outside luatex @@ -188,7 +189,7 @@ local function glob(str,t)              local split = lpegmatch(pattern,str) -- we could use the file splitter              if split then                  local root, path, base = split[1], split[2], split[3] -                local recurse = find(base,"%*%*") +                local recurse = find(base,"**",1,true) -- find(base,"%*%*")                  local start = root .. path                  local result = lpegmatch(filter,start .. base)                  globpattern(start,result,recurse,t) @@ -214,7 +215,7 @@ local function glob(str,t)                  local t = t or { }                  local action = action or function(name) t[#t+1] = name end                  local root, path, base = split[1], split[2], split[3] -                local recurse = find(base,"%*%*") +                local recurse =  find(base,"**",1,true) -- find(base,"%*%*")                  local start = root .. path                  local result = lpegmatch(filter,start .. base)                  globpattern(start,result,recurse,action) @@ -284,17 +285,27 @@ local make_indeed = true -- false  if onwindows then      function dir.mkdirs(...) -        local str, pth = "", "" -        for i=1,select("#",...) do -            local s = select(i,...) -            if s == "" then -                -- skip -            elseif str == "" then -                str = s -            else -                str = str .. "/" .. s +        local n = select("#",...) +        local str +        if n == 1 then +            str = select(1,...) +            if isdir(str) then +                return str, true +            end +        else +            str = "" +            for i=1,n do +                local s = select(i,...) +                if s == "" then +                    -- skip +                elseif str == "" then +                    str = s +                else +                    str = str .. "/" .. s +                end              end          end +        local pth = ""          local drive = false          local first, middle, last = match(str,"^(//)(//*)(.*)$")          if first then @@ -330,7 +341,7 @@ if onwindows then                  pth = pth .. "/" .. s              end              if make_indeed and not isdir(pth) then -                lfs.mkdir(pth) +                mkdir(pth)              end          end          return pth, (isdir(pth) == true) @@ -351,14 +362,23 @@ if onwindows then  else      function dir.mkdirs(...) -        local str, pth = "", "" -        for i=1,select("#",...) do -            local s = select(i,...) -            if s and s ~= "" then -- we catch nil and false -                if str ~= "" then -                    str = str .. "/" .. s -                else -                    str = s +        local n = select("#",...) +        local str, pth +        if n == 1 then +            str = select(1,...) +            if isdir(str) then +                return str, true +            end +        else +            str = "" +            for i=1,n do +                local s = select(i,...) +                if s and s ~= "" then -- we catch nil and false +                    if str ~= "" then +                        str = str .. "/" .. s +                    else +                        str = s +                    end                  end              end          end @@ -373,7 +393,7 @@ else                      pth = pth .. "/" .. s                  end                  if make_indeed and not first and not isdir(pth) then -                    lfs.mkdir(pth) +                    mkdir(pth)                  end              end          else @@ -381,7 +401,7 @@ else              for s in gmatch(str,"[^/]+") do                  pth = pth .. "/" .. s                  if make_indeed and not isdir(pth) then -                    lfs.mkdir(pth) +                    mkdir(pth)                  end              end          end | 
