-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilepath.go
102 lines (93 loc) · 1.68 KB
/
filepath.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"path/filepath"
"strings"
"github.com/mitchellh/go-homedir"
lua "github.com/yuin/gopher-lua"
)
func fpJoin(l *lua.LState) int {
t := l.GetTop()
if t == 0 {
l.Push(lua.LString(""))
return 1
}
parts := make([]string, t)
for i := 1; i <= t; i++ {
parts[i-1] = strings.TrimSpace(l.CheckString(i))
}
l.Pop(t)
l.Push(lua.LString(filepath.Join(parts...)))
return 1
}
func fpAbs(l *lua.LState) int {
p := l.CheckString(1)
l.Pop(l.GetTop())
abs, err := filepath.Abs(p)
if err != nil {
l.Error(lua.LString(err.Error()), 1)
return 0
}
l.Push(lua.LString(abs))
return 1
}
func fpClean(l *lua.LState) int {
t := l.GetTop()
if t == 0 {
l.Push(lua.LString(""))
return 1
}
v := l.CheckString(t)
l.Pop(t)
l.Push(lua.LString(filepath.Clean(v)))
return 1
}
func fpFromSlash(l *lua.LState) int {
t := l.GetTop()
if t == 0 {
l.Push(lua.LString(""))
return 1
}
v := l.CheckString(t)
l.Pop(t)
l.Push(lua.LString(filepath.FromSlash(v)))
return 1
}
func fpSplit(l *lua.LState) int {
t := l.GetTop()
if t == 0 {
l.Push(lua.LString(""))
return 1
}
v := l.CheckString(t)
l.Pop(t)
dir, file := filepath.Split(v)
l.Push(lua.LString(dir))
l.Push(lua.LString(file))
return 1
}
func fpSplitList(l *lua.LState) int {
t := l.GetTop()
if t == 0 {
l.Push(lua.LString(""))
return 1
}
v := l.CheckString(t)
l.Pop(t)
items := filepath.SplitList(v)
tbl := l.CreateTable(len(items), 0)
for _, v := range items {
tbl.Append(lua.LString(v))
}
l.Push(tbl)
return 1
}
func fpHome(l *lua.LState) int {
l.Pop(l.GetTop())
home, err := homedir.Dir()
if err != nil {
l.Error(lua.LString(err.Error()), 1)
return 0
}
l.Push(lua.LString(home))
return 1
}