Fri, 17 Jul 2020 12:25:24 -0500
fix weird nodejs length/index
| 2 | 1 | |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
2 | --@module path |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
3 | local path={} |
| 2 | 4 | |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
5 | local tuple=require("tuple") |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
6 | local lfs=require("lfs") |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
7 | local err=require("err") |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
8 | local config=require("config") |
| 2 | 9 | |
| 10 | local sep=config.dirsep | |
| 11 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
12 | function path.join(p, f) |
| 3 | 13 | if p=="" then |
| 14 | return f | |
| 15 | else | |
| 16 | return p..sep..f | |
| 17 | end | |
| 2 | 18 | end |
| 19 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
20 | function path.dirbasename(p) |
| 2 | 21 | local d, b = string.match(p, |
| 3 | 22 | "^(.*)"..sep.."+([^"..sep.."]+)"..sep.."*$") |
| 2 | 23 | if not b then |
| 3 | 24 | return "", p |
| 2 | 25 | else |
| 26 | return d, b | |
| 27 | end | |
| 28 | end | |
| 29 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
30 | function path.dirname(p) |
| 2 | 31 | return tuple.fst(dirbasename(p)) |
| 32 | end | |
| 33 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
34 | function path.dirname_slash(p) |
| 3 | 35 | local dn=dirname(p) |
| 36 | if dn=="" then | |
| 37 | return dn | |
| 38 | else | |
| 39 | return dn..sep | |
| 40 | end | |
| 41 | end | |
| 42 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
43 | function path.basename(p) |
| 2 | 44 | return tuple.snd(dirbasename(p)) |
| 45 | end | |
| 46 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
47 | function path.rmext(p) |
| 3 | 48 | return string.gsub(p, "%.[^.]*$", "") |
| 49 | end | |
| 50 | ||
| 2 | 51 | -- would rather do this as an iterator, but can't |
| 52 | -- coroutine.yield from gsub handler | |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
53 | function path.split(p) |
| 2 | 54 | local t={} |
| 55 | local head="" | |
| 56 | local s, p2 = string.match(p, "^("..sep.."+)(.*)$") | |
| 57 | if s then | |
| 58 | table.insert(t, "/.") -- root | |
| 59 | p=p2 | |
| 60 | end | |
| 3 | 61 | string.gsub(p, "([^"..sep.."]+)", --..sep.."+", |
| 2 | 62 | function(d) table.insert(t, d); end) |
| 63 | return t | |
| 64 | end | |
| 65 | ||
| 3 | 66 | --[[ |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
67 | function path.parts(p) |
| 2 | 68 | local s={i=1, t=split(p)} |
| 69 | local function g(s) | |
| 70 | local v=s.t[s.i] | |
| 71 | s.i=s.i+1 | |
| 72 | return v | |
| 73 | end | |
| 74 | return g, s | |
| 75 | end | |
| 76 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
77 | function path.makepath(p, head) |
| 3 | 78 | head=head or "" |
| 2 | 79 | for d in parts(p) do |
| 80 | head=head..d | |
| 81 | local a=lfs.attributes(head) | |
| 82 | if not a then | |
| 83 | local success, e = lfs.mkdir(head) | |
| 84 | if not success then | |
| 85 | err.file(head, e) | |
| 86 | end | |
| 87 | elseif a.mode~="directory" then | |
| 88 | err.file(head, "not a directory") | |
| 89 | end | |
| 90 | head=head..sep | |
| 91 | end | |
| 92 | end | |
| 3 | 93 | ]] |
| 2 | 94 | |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
95 | function path.simplify(p) |
| 3 | 96 | local capts={} |
| 97 | local start=string.match(p, "^(/)") | |
| 98 | string.gsub(p, "([^/]+)", | |
| 99 | function(e) | |
| 100 | if e==".." and #capts > 1 then | |
| 101 | capts[#capts]=nil | |
| 102 | elseif e~="." then | |
| 103 | table.insert(capts, e) | |
| 104 | end | |
| 105 | end) | |
| 106 | return (start or "")..table.concat(capts, "/") | |
| 2 | 107 | end |
| 108 | ||
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
109 | function path.to_root(p) |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
110 | return string.rep("../",#(path.split(p))-1) |
| 3 | 111 | end |
|
7
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
112 | |
|
038275cd92ed
Convert module stuff to lua 5.3
Tuomo Valkonen <tuomov@iki.fi>
parents:
3
diff
changeset
|
113 | return path |