]> git.lizzy.rs Git - micro.git/blob - internal/lua/lua.go
Add Dracula colorscheme to defaults
[micro.git] / internal / lua / lua.go
1 package lua
2
3 import (
4         "archive/zip"
5         "bytes"
6         "errors"
7         "fmt"
8         "io"
9         "io/ioutil"
10         "math"
11         "math/rand"
12         "net"
13         "net/http"
14         "os"
15         "path"
16         "path/filepath"
17         "regexp"
18         "runtime"
19         "strings"
20         "sync"
21         "time"
22         "unicode/utf8"
23
24         humanize "github.com/dustin/go-humanize"
25         lua "github.com/yuin/gopher-lua"
26         luar "layeh.com/gopher-luar"
27 )
28
29 var L *lua.LState
30 var Lock sync.Mutex
31
32 // LoadFile loads a lua file
33 func LoadFile(module string, file string, data []byte) error {
34         pluginDef := []byte("module(\"" + module + "\", package.seeall)")
35
36         if fn, err := L.Load(bytes.NewReader(append(pluginDef, data...)), file); err != nil {
37                 return err
38         } else {
39                 L.Push(fn)
40                 return L.PCall(0, lua.MultRet, nil)
41         }
42 }
43
44 // Import allows a lua plugin to import a package
45 func Import(pkg string) *lua.LTable {
46         switch pkg {
47         case "fmt":
48                 return importFmt()
49         case "io":
50                 return importIo()
51         case "io/ioutil", "ioutil":
52                 return importIoUtil()
53         case "net":
54                 return importNet()
55         case "math":
56                 return importMath()
57         case "math/rand":
58                 return importMathRand()
59         case "os":
60                 return importOs()
61         case "runtime":
62                 return importRuntime()
63         case "path":
64                 return importPath()
65         case "path/filepath", "filepath":
66                 return importFilePath()
67         case "strings":
68                 return importStrings()
69         case "regexp":
70                 return importRegexp()
71         case "errors":
72                 return importErrors()
73         case "time":
74                 return importTime()
75         case "unicode/utf8", "utf8":
76                 return importUtf8()
77         case "humanize":
78                 return importHumanize()
79         case "net/http", "http":
80                 return importHTTP()
81         case "archive/zip":
82                 return importArchiveZip()
83         default:
84                 return nil
85         }
86 }
87
88 func importFmt() *lua.LTable {
89         pkg := L.NewTable()
90
91         L.SetField(pkg, "Errorf", luar.New(L, fmt.Errorf))
92         L.SetField(pkg, "Fprint", luar.New(L, fmt.Fprint))
93         L.SetField(pkg, "Fprintf", luar.New(L, fmt.Fprintf))
94         L.SetField(pkg, "Fprintln", luar.New(L, fmt.Fprintln))
95         L.SetField(pkg, "Fscan", luar.New(L, fmt.Fscan))
96         L.SetField(pkg, "Fscanf", luar.New(L, fmt.Fscanf))
97         L.SetField(pkg, "Fscanln", luar.New(L, fmt.Fscanln))
98         L.SetField(pkg, "Print", luar.New(L, fmt.Print))
99         L.SetField(pkg, "Printf", luar.New(L, fmt.Printf))
100         L.SetField(pkg, "Println", luar.New(L, fmt.Println))
101         L.SetField(pkg, "Scan", luar.New(L, fmt.Scan))
102         L.SetField(pkg, "Scanf", luar.New(L, fmt.Scanf))
103         L.SetField(pkg, "Scanln", luar.New(L, fmt.Scanln))
104         L.SetField(pkg, "Sprint", luar.New(L, fmt.Sprint))
105         L.SetField(pkg, "Sprintf", luar.New(L, fmt.Sprintf))
106         L.SetField(pkg, "Sprintln", luar.New(L, fmt.Sprintln))
107         L.SetField(pkg, "Sscan", luar.New(L, fmt.Sscan))
108         L.SetField(pkg, "Sscanf", luar.New(L, fmt.Sscanf))
109         L.SetField(pkg, "Sscanln", luar.New(L, fmt.Sscanln))
110
111         return pkg
112 }
113
114 func importIo() *lua.LTable {
115         pkg := L.NewTable()
116
117         L.SetField(pkg, "Copy", luar.New(L, io.Copy))
118         L.SetField(pkg, "CopyN", luar.New(L, io.CopyN))
119         L.SetField(pkg, "EOF", luar.New(L, io.EOF))
120         L.SetField(pkg, "ErrClosedPipe", luar.New(L, io.ErrClosedPipe))
121         L.SetField(pkg, "ErrNoProgress", luar.New(L, io.ErrNoProgress))
122         L.SetField(pkg, "ErrShortBuffer", luar.New(L, io.ErrShortBuffer))
123         L.SetField(pkg, "ErrShortWrite", luar.New(L, io.ErrShortWrite))
124         L.SetField(pkg, "ErrUnexpectedEOF", luar.New(L, io.ErrUnexpectedEOF))
125         L.SetField(pkg, "LimitReader", luar.New(L, io.LimitReader))
126         L.SetField(pkg, "MultiReader", luar.New(L, io.MultiReader))
127         L.SetField(pkg, "MultiWriter", luar.New(L, io.MultiWriter))
128         L.SetField(pkg, "NewSectionReader", luar.New(L, io.NewSectionReader))
129         L.SetField(pkg, "Pipe", luar.New(L, io.Pipe))
130         L.SetField(pkg, "ReadAtLeast", luar.New(L, io.ReadAtLeast))
131         L.SetField(pkg, "ReadFull", luar.New(L, io.ReadFull))
132         L.SetField(pkg, "TeeReader", luar.New(L, io.TeeReader))
133         L.SetField(pkg, "WriteString", luar.New(L, io.WriteString))
134
135         return pkg
136 }
137
138 func importIoUtil() *lua.LTable {
139         pkg := L.NewTable()
140
141         L.SetField(pkg, "ReadAll", luar.New(L, ioutil.ReadAll))
142         L.SetField(pkg, "ReadDir", luar.New(L, ioutil.ReadDir))
143         L.SetField(pkg, "ReadFile", luar.New(L, ioutil.ReadFile))
144         L.SetField(pkg, "WriteFile", luar.New(L, ioutil.WriteFile))
145
146         return pkg
147 }
148
149 func importNet() *lua.LTable {
150         pkg := L.NewTable()
151
152         L.SetField(pkg, "CIDRMask", luar.New(L, net.CIDRMask))
153         L.SetField(pkg, "Dial", luar.New(L, net.Dial))
154         L.SetField(pkg, "DialIP", luar.New(L, net.DialIP))
155         L.SetField(pkg, "DialTCP", luar.New(L, net.DialTCP))
156         L.SetField(pkg, "DialTimeout", luar.New(L, net.DialTimeout))
157         L.SetField(pkg, "DialUDP", luar.New(L, net.DialUDP))
158         L.SetField(pkg, "DialUnix", luar.New(L, net.DialUnix))
159         L.SetField(pkg, "ErrWriteToConnected", luar.New(L, net.ErrWriteToConnected))
160         L.SetField(pkg, "FileConn", luar.New(L, net.FileConn))
161         L.SetField(pkg, "FileListener", luar.New(L, net.FileListener))
162         L.SetField(pkg, "FilePacketConn", luar.New(L, net.FilePacketConn))
163         L.SetField(pkg, "FlagBroadcast", luar.New(L, net.FlagBroadcast))
164         L.SetField(pkg, "FlagLoopback", luar.New(L, net.FlagLoopback))
165         L.SetField(pkg, "FlagMulticast", luar.New(L, net.FlagMulticast))
166         L.SetField(pkg, "FlagPointToPoint", luar.New(L, net.FlagPointToPoint))
167         L.SetField(pkg, "FlagUp", luar.New(L, net.FlagUp))
168         L.SetField(pkg, "IPv4", luar.New(L, net.IPv4))
169         L.SetField(pkg, "IPv4Mask", luar.New(L, net.IPv4Mask))
170         L.SetField(pkg, "IPv4allrouter", luar.New(L, net.IPv4allrouter))
171         L.SetField(pkg, "IPv4allsys", luar.New(L, net.IPv4allsys))
172         L.SetField(pkg, "IPv4bcast", luar.New(L, net.IPv4bcast))
173         L.SetField(pkg, "IPv4len", luar.New(L, net.IPv4len))
174         L.SetField(pkg, "IPv4zero", luar.New(L, net.IPv4zero))
175         L.SetField(pkg, "IPv6interfacelocalallnodes", luar.New(L, net.IPv6interfacelocalallnodes))
176         L.SetField(pkg, "IPv6len", luar.New(L, net.IPv6len))
177         L.SetField(pkg, "IPv6linklocalallnodes", luar.New(L, net.IPv6linklocalallnodes))
178         L.SetField(pkg, "IPv6linklocalallrouters", luar.New(L, net.IPv6linklocalallrouters))
179         L.SetField(pkg, "IPv6loopback", luar.New(L, net.IPv6loopback))
180         L.SetField(pkg, "IPv6unspecified", luar.New(L, net.IPv6unspecified))
181         L.SetField(pkg, "IPv6zero", luar.New(L, net.IPv6zero))
182         L.SetField(pkg, "InterfaceAddrs", luar.New(L, net.InterfaceAddrs))
183         L.SetField(pkg, "InterfaceByIndex", luar.New(L, net.InterfaceByIndex))
184         L.SetField(pkg, "InterfaceByName", luar.New(L, net.InterfaceByName))
185         L.SetField(pkg, "Interfaces", luar.New(L, net.Interfaces))
186         L.SetField(pkg, "JoinHostPort", luar.New(L, net.JoinHostPort))
187         L.SetField(pkg, "Listen", luar.New(L, net.Listen))
188         L.SetField(pkg, "ListenIP", luar.New(L, net.ListenIP))
189         L.SetField(pkg, "ListenMulticastUDP", luar.New(L, net.ListenMulticastUDP))
190         L.SetField(pkg, "ListenPacket", luar.New(L, net.ListenPacket))
191         L.SetField(pkg, "ListenTCP", luar.New(L, net.ListenTCP))
192         L.SetField(pkg, "ListenUDP", luar.New(L, net.ListenUDP))
193         L.SetField(pkg, "ListenUnix", luar.New(L, net.ListenUnix))
194         L.SetField(pkg, "ListenUnixgram", luar.New(L, net.ListenUnixgram))
195         L.SetField(pkg, "LookupAddr", luar.New(L, net.LookupAddr))
196         L.SetField(pkg, "LookupCNAME", luar.New(L, net.LookupCNAME))
197         L.SetField(pkg, "LookupHost", luar.New(L, net.LookupHost))
198         L.SetField(pkg, "LookupIP", luar.New(L, net.LookupIP))
199         L.SetField(pkg, "LookupMX", luar.New(L, net.LookupMX))
200         L.SetField(pkg, "LookupNS", luar.New(L, net.LookupNS))
201         L.SetField(pkg, "LookupPort", luar.New(L, net.LookupPort))
202         L.SetField(pkg, "LookupSRV", luar.New(L, net.LookupSRV))
203         L.SetField(pkg, "LookupTXT", luar.New(L, net.LookupTXT))
204         L.SetField(pkg, "ParseCIDR", luar.New(L, net.ParseCIDR))
205         L.SetField(pkg, "ParseIP", luar.New(L, net.ParseIP))
206         L.SetField(pkg, "ParseMAC", luar.New(L, net.ParseMAC))
207         L.SetField(pkg, "Pipe", luar.New(L, net.Pipe))
208         L.SetField(pkg, "ResolveIPAddr", luar.New(L, net.ResolveIPAddr))
209         L.SetField(pkg, "ResolveTCPAddr", luar.New(L, net.ResolveTCPAddr))
210         L.SetField(pkg, "ResolveUDPAddr", luar.New(L, net.ResolveUDPAddr))
211         L.SetField(pkg, "ResolveUnixAddr", luar.New(L, net.ResolveUnixAddr))
212         L.SetField(pkg, "SplitHostPort", luar.New(L, net.SplitHostPort))
213
214         return pkg
215 }
216
217 func importMath() *lua.LTable {
218         pkg := L.NewTable()
219
220         L.SetField(pkg, "Abs", luar.New(L, math.Abs))
221         L.SetField(pkg, "Acos", luar.New(L, math.Acos))
222         L.SetField(pkg, "Acosh", luar.New(L, math.Acosh))
223         L.SetField(pkg, "Asin", luar.New(L, math.Asin))
224         L.SetField(pkg, "Asinh", luar.New(L, math.Asinh))
225         L.SetField(pkg, "Atan", luar.New(L, math.Atan))
226         L.SetField(pkg, "Atan2", luar.New(L, math.Atan2))
227         L.SetField(pkg, "Atanh", luar.New(L, math.Atanh))
228         L.SetField(pkg, "Cbrt", luar.New(L, math.Cbrt))
229         L.SetField(pkg, "Ceil", luar.New(L, math.Ceil))
230         L.SetField(pkg, "Copysign", luar.New(L, math.Copysign))
231         L.SetField(pkg, "Cos", luar.New(L, math.Cos))
232         L.SetField(pkg, "Cosh", luar.New(L, math.Cosh))
233         L.SetField(pkg, "Dim", luar.New(L, math.Dim))
234         L.SetField(pkg, "Erf", luar.New(L, math.Erf))
235         L.SetField(pkg, "Erfc", luar.New(L, math.Erfc))
236         L.SetField(pkg, "Exp", luar.New(L, math.Exp))
237         L.SetField(pkg, "Exp2", luar.New(L, math.Exp2))
238         L.SetField(pkg, "Expm1", luar.New(L, math.Expm1))
239         L.SetField(pkg, "Float32bits", luar.New(L, math.Float32bits))
240         L.SetField(pkg, "Float32frombits", luar.New(L, math.Float32frombits))
241         L.SetField(pkg, "Float64bits", luar.New(L, math.Float64bits))
242         L.SetField(pkg, "Float64frombits", luar.New(L, math.Float64frombits))
243         L.SetField(pkg, "Floor", luar.New(L, math.Floor))
244         L.SetField(pkg, "Frexp", luar.New(L, math.Frexp))
245         L.SetField(pkg, "Gamma", luar.New(L, math.Gamma))
246         L.SetField(pkg, "Hypot", luar.New(L, math.Hypot))
247         L.SetField(pkg, "Ilogb", luar.New(L, math.Ilogb))
248         L.SetField(pkg, "Inf", luar.New(L, math.Inf))
249         L.SetField(pkg, "IsInf", luar.New(L, math.IsInf))
250         L.SetField(pkg, "IsNaN", luar.New(L, math.IsNaN))
251         L.SetField(pkg, "J0", luar.New(L, math.J0))
252         L.SetField(pkg, "J1", luar.New(L, math.J1))
253         L.SetField(pkg, "Jn", luar.New(L, math.Jn))
254         L.SetField(pkg, "Ldexp", luar.New(L, math.Ldexp))
255         L.SetField(pkg, "Lgamma", luar.New(L, math.Lgamma))
256         L.SetField(pkg, "Log", luar.New(L, math.Log))
257         L.SetField(pkg, "Log10", luar.New(L, math.Log10))
258         L.SetField(pkg, "Log1p", luar.New(L, math.Log1p))
259         L.SetField(pkg, "Log2", luar.New(L, math.Log2))
260         L.SetField(pkg, "Logb", luar.New(L, math.Logb))
261         L.SetField(pkg, "Max", luar.New(L, math.Max))
262         L.SetField(pkg, "Min", luar.New(L, math.Min))
263         L.SetField(pkg, "Mod", luar.New(L, math.Mod))
264         L.SetField(pkg, "Modf", luar.New(L, math.Modf))
265         L.SetField(pkg, "NaN", luar.New(L, math.NaN))
266         L.SetField(pkg, "Nextafter", luar.New(L, math.Nextafter))
267         L.SetField(pkg, "Pow", luar.New(L, math.Pow))
268         L.SetField(pkg, "Pow10", luar.New(L, math.Pow10))
269         L.SetField(pkg, "Remainder", luar.New(L, math.Remainder))
270         L.SetField(pkg, "Signbit", luar.New(L, math.Signbit))
271         L.SetField(pkg, "Sin", luar.New(L, math.Sin))
272         L.SetField(pkg, "Sincos", luar.New(L, math.Sincos))
273         L.SetField(pkg, "Sinh", luar.New(L, math.Sinh))
274         L.SetField(pkg, "Sqrt", luar.New(L, math.Sqrt))
275         L.SetField(pkg, "Tan", luar.New(L, math.Tan))
276         L.SetField(pkg, "Tanh", luar.New(L, math.Tanh))
277         L.SetField(pkg, "Trunc", luar.New(L, math.Trunc))
278         L.SetField(pkg, "Y0", luar.New(L, math.Y0))
279         L.SetField(pkg, "Y1", luar.New(L, math.Y1))
280         L.SetField(pkg, "Yn", luar.New(L, math.Yn))
281
282         return pkg
283 }
284
285 func importMathRand() *lua.LTable {
286         pkg := L.NewTable()
287
288         L.SetField(pkg, "ExpFloat64", luar.New(L, rand.ExpFloat64))
289         L.SetField(pkg, "Float32", luar.New(L, rand.Float32))
290         L.SetField(pkg, "Float64", luar.New(L, rand.Float64))
291         L.SetField(pkg, "Int", luar.New(L, rand.Int))
292         L.SetField(pkg, "Int31", luar.New(L, rand.Int31))
293         L.SetField(pkg, "Int31n", luar.New(L, rand.Int31n))
294         L.SetField(pkg, "Int63", luar.New(L, rand.Int63))
295         L.SetField(pkg, "Int63n", luar.New(L, rand.Int63n))
296         L.SetField(pkg, "Intn", luar.New(L, rand.Intn))
297         L.SetField(pkg, "NormFloat64", luar.New(L, rand.NormFloat64))
298         L.SetField(pkg, "Perm", luar.New(L, rand.Perm))
299         L.SetField(pkg, "Seed", luar.New(L, rand.Seed))
300         L.SetField(pkg, "Uint32", luar.New(L, rand.Uint32))
301
302         return pkg
303 }
304
305 func importOs() *lua.LTable {
306         pkg := L.NewTable()
307
308         L.SetField(pkg, "Args", luar.New(L, os.Args))
309         L.SetField(pkg, "Chdir", luar.New(L, os.Chdir))
310         L.SetField(pkg, "Chmod", luar.New(L, os.Chmod))
311         L.SetField(pkg, "Chown", luar.New(L, os.Chown))
312         L.SetField(pkg, "Chtimes", luar.New(L, os.Chtimes))
313         L.SetField(pkg, "Clearenv", luar.New(L, os.Clearenv))
314         L.SetField(pkg, "Create", luar.New(L, os.Create))
315         L.SetField(pkg, "DevNull", luar.New(L, os.DevNull))
316         L.SetField(pkg, "Environ", luar.New(L, os.Environ))
317         L.SetField(pkg, "ErrExist", luar.New(L, os.ErrExist))
318         L.SetField(pkg, "ErrInvalid", luar.New(L, os.ErrInvalid))
319         L.SetField(pkg, "ErrNotExist", luar.New(L, os.ErrNotExist))
320         L.SetField(pkg, "ErrPermission", luar.New(L, os.ErrPermission))
321         L.SetField(pkg, "Exit", luar.New(L, os.Exit))
322         L.SetField(pkg, "Expand", luar.New(L, os.Expand))
323         L.SetField(pkg, "ExpandEnv", luar.New(L, os.ExpandEnv))
324         L.SetField(pkg, "FindProcess", luar.New(L, os.FindProcess))
325         L.SetField(pkg, "Getegid", luar.New(L, os.Getegid))
326         L.SetField(pkg, "Getenv", luar.New(L, os.Getenv))
327         L.SetField(pkg, "Geteuid", luar.New(L, os.Geteuid))
328         L.SetField(pkg, "Getgid", luar.New(L, os.Getgid))
329         L.SetField(pkg, "Getgroups", luar.New(L, os.Getgroups))
330         L.SetField(pkg, "Getpagesize", luar.New(L, os.Getpagesize))
331         L.SetField(pkg, "Getpid", luar.New(L, os.Getpid))
332         L.SetField(pkg, "Getuid", luar.New(L, os.Getuid))
333         L.SetField(pkg, "Getwd", luar.New(L, os.Getwd))
334         L.SetField(pkg, "Hostname", luar.New(L, os.Hostname))
335         L.SetField(pkg, "Interrupt", luar.New(L, os.Interrupt))
336         L.SetField(pkg, "IsExist", luar.New(L, os.IsExist))
337         L.SetField(pkg, "IsNotExist", luar.New(L, os.IsNotExist))
338         L.SetField(pkg, "IsPathSeparator", luar.New(L, os.IsPathSeparator))
339         L.SetField(pkg, "IsPermission", luar.New(L, os.IsPermission))
340         L.SetField(pkg, "Kill", luar.New(L, os.Kill))
341         L.SetField(pkg, "Lchown", luar.New(L, os.Lchown))
342         L.SetField(pkg, "Link", luar.New(L, os.Link))
343         L.SetField(pkg, "Lstat", luar.New(L, os.Lstat))
344         L.SetField(pkg, "Mkdir", luar.New(L, os.Mkdir))
345         L.SetField(pkg, "MkdirAll", luar.New(L, os.MkdirAll))
346         L.SetField(pkg, "ModeAppend", luar.New(L, os.ModeAppend))
347         L.SetField(pkg, "ModeCharDevice", luar.New(L, os.ModeCharDevice))
348         L.SetField(pkg, "ModeDevice", luar.New(L, os.ModeDevice))
349         L.SetField(pkg, "ModeDir", luar.New(L, os.ModeDir))
350         L.SetField(pkg, "ModeExclusive", luar.New(L, os.ModeExclusive))
351         L.SetField(pkg, "ModeNamedPipe", luar.New(L, os.ModeNamedPipe))
352         L.SetField(pkg, "ModePerm", luar.New(L, os.ModePerm))
353         L.SetField(pkg, "ModeSetgid", luar.New(L, os.ModeSetgid))
354         L.SetField(pkg, "ModeSetuid", luar.New(L, os.ModeSetuid))
355         L.SetField(pkg, "ModeSocket", luar.New(L, os.ModeSocket))
356         L.SetField(pkg, "ModeSticky", luar.New(L, os.ModeSticky))
357         L.SetField(pkg, "ModeSymlink", luar.New(L, os.ModeSymlink))
358         L.SetField(pkg, "ModeTemporary", luar.New(L, os.ModeTemporary))
359         L.SetField(pkg, "ModeType", luar.New(L, os.ModeType))
360         L.SetField(pkg, "NewFile", luar.New(L, os.NewFile))
361         L.SetField(pkg, "NewSyscallError", luar.New(L, os.NewSyscallError))
362         L.SetField(pkg, "O_APPEND", luar.New(L, os.O_APPEND))
363         L.SetField(pkg, "O_CREATE", luar.New(L, os.O_CREATE))
364         L.SetField(pkg, "O_EXCL", luar.New(L, os.O_EXCL))
365         L.SetField(pkg, "O_RDONLY", luar.New(L, os.O_RDONLY))
366         L.SetField(pkg, "O_RDWR", luar.New(L, os.O_RDWR))
367         L.SetField(pkg, "O_SYNC", luar.New(L, os.O_SYNC))
368         L.SetField(pkg, "O_TRUNC", luar.New(L, os.O_TRUNC))
369         L.SetField(pkg, "O_WRONLY", luar.New(L, os.O_WRONLY))
370         L.SetField(pkg, "Open", luar.New(L, os.Open))
371         L.SetField(pkg, "OpenFile", luar.New(L, os.OpenFile))
372         L.SetField(pkg, "PathListSeparator", luar.New(L, os.PathListSeparator))
373         L.SetField(pkg, "PathSeparator", luar.New(L, os.PathSeparator))
374         L.SetField(pkg, "Pipe", luar.New(L, os.Pipe))
375         L.SetField(pkg, "Readlink", luar.New(L, os.Readlink))
376         L.SetField(pkg, "Remove", luar.New(L, os.Remove))
377         L.SetField(pkg, "RemoveAll", luar.New(L, os.RemoveAll))
378         L.SetField(pkg, "Rename", luar.New(L, os.Rename))
379         L.SetField(pkg, "SEEK_CUR", luar.New(L, os.SEEK_CUR))
380         L.SetField(pkg, "SEEK_END", luar.New(L, os.SEEK_END))
381         L.SetField(pkg, "SEEK_SET", luar.New(L, os.SEEK_SET))
382         L.SetField(pkg, "SameFile", luar.New(L, os.SameFile))
383         L.SetField(pkg, "Setenv", luar.New(L, os.Setenv))
384         L.SetField(pkg, "StartProcess", luar.New(L, os.StartProcess))
385         L.SetField(pkg, "Stat", luar.New(L, os.Stat))
386         L.SetField(pkg, "Stderr", luar.New(L, os.Stderr))
387         L.SetField(pkg, "Stdin", luar.New(L, os.Stdin))
388         L.SetField(pkg, "Stdout", luar.New(L, os.Stdout))
389         L.SetField(pkg, "Symlink", luar.New(L, os.Symlink))
390         L.SetField(pkg, "TempDir", luar.New(L, os.TempDir))
391         L.SetField(pkg, "Truncate", luar.New(L, os.Truncate))
392         L.SetField(pkg, "UserHomeDir", luar.New(L, os.UserHomeDir))
393
394         return pkg
395 }
396
397 func importRuntime() *lua.LTable {
398         pkg := L.NewTable()
399
400         L.SetField(pkg, "GC", luar.New(L, runtime.GC))
401         L.SetField(pkg, "GOARCH", luar.New(L, runtime.GOARCH))
402         L.SetField(pkg, "GOMAXPROCS", luar.New(L, runtime.GOMAXPROCS))
403         L.SetField(pkg, "GOOS", luar.New(L, runtime.GOOS))
404         L.SetField(pkg, "GOROOT", luar.New(L, runtime.GOROOT))
405
406         return pkg
407 }
408
409 func importPath() *lua.LTable {
410         pkg := L.NewTable()
411
412         L.SetField(pkg, "Base", luar.New(L, path.Base))
413         L.SetField(pkg, "Clean", luar.New(L, path.Clean))
414         L.SetField(pkg, "Dir", luar.New(L, path.Dir))
415         L.SetField(pkg, "ErrBadPattern", luar.New(L, path.ErrBadPattern))
416         L.SetField(pkg, "Ext", luar.New(L, path.Ext))
417         L.SetField(pkg, "IsAbs", luar.New(L, path.IsAbs))
418         L.SetField(pkg, "Join", luar.New(L, path.Join))
419         L.SetField(pkg, "Match", luar.New(L, path.Match))
420         L.SetField(pkg, "Split", luar.New(L, path.Split))
421
422         return pkg
423 }
424
425 func importFilePath() *lua.LTable {
426         pkg := L.NewTable()
427
428         L.SetField(pkg, "Join", luar.New(L, filepath.Join))
429         L.SetField(pkg, "Abs", luar.New(L, filepath.Abs))
430         L.SetField(pkg, "Base", luar.New(L, filepath.Base))
431         L.SetField(pkg, "Clean", luar.New(L, filepath.Clean))
432         L.SetField(pkg, "Dir", luar.New(L, filepath.Dir))
433         L.SetField(pkg, "EvalSymlinks", luar.New(L, filepath.EvalSymlinks))
434         L.SetField(pkg, "Ext", luar.New(L, filepath.Ext))
435         L.SetField(pkg, "FromSlash", luar.New(L, filepath.FromSlash))
436         L.SetField(pkg, "Glob", luar.New(L, filepath.Glob))
437         L.SetField(pkg, "HasPrefix", luar.New(L, filepath.HasPrefix))
438         L.SetField(pkg, "IsAbs", luar.New(L, filepath.IsAbs))
439         L.SetField(pkg, "Join", luar.New(L, filepath.Join))
440         L.SetField(pkg, "Match", luar.New(L, filepath.Match))
441         L.SetField(pkg, "Rel", luar.New(L, filepath.Rel))
442         L.SetField(pkg, "Split", luar.New(L, filepath.Split))
443         L.SetField(pkg, "SplitList", luar.New(L, filepath.SplitList))
444         L.SetField(pkg, "ToSlash", luar.New(L, filepath.ToSlash))
445         L.SetField(pkg, "VolumeName", luar.New(L, filepath.VolumeName))
446
447         return pkg
448 }
449
450 func importStrings() *lua.LTable {
451         pkg := L.NewTable()
452
453         L.SetField(pkg, "Contains", luar.New(L, strings.Contains))
454         L.SetField(pkg, "ContainsAny", luar.New(L, strings.ContainsAny))
455         L.SetField(pkg, "ContainsRune", luar.New(L, strings.ContainsRune))
456         L.SetField(pkg, "Count", luar.New(L, strings.Count))
457         L.SetField(pkg, "EqualFold", luar.New(L, strings.EqualFold))
458         L.SetField(pkg, "Fields", luar.New(L, strings.Fields))
459         L.SetField(pkg, "FieldsFunc", luar.New(L, strings.FieldsFunc))
460         L.SetField(pkg, "HasPrefix", luar.New(L, strings.HasPrefix))
461         L.SetField(pkg, "HasSuffix", luar.New(L, strings.HasSuffix))
462         L.SetField(pkg, "Index", luar.New(L, strings.Index))
463         L.SetField(pkg, "IndexAny", luar.New(L, strings.IndexAny))
464         L.SetField(pkg, "IndexByte", luar.New(L, strings.IndexByte))
465         L.SetField(pkg, "IndexFunc", luar.New(L, strings.IndexFunc))
466         L.SetField(pkg, "IndexRune", luar.New(L, strings.IndexRune))
467         L.SetField(pkg, "Join", luar.New(L, strings.Join))
468         L.SetField(pkg, "LastIndex", luar.New(L, strings.LastIndex))
469         L.SetField(pkg, "LastIndexAny", luar.New(L, strings.LastIndexAny))
470         L.SetField(pkg, "LastIndexFunc", luar.New(L, strings.LastIndexFunc))
471         L.SetField(pkg, "Map", luar.New(L, strings.Map))
472         L.SetField(pkg, "NewReader", luar.New(L, strings.NewReader))
473         L.SetField(pkg, "NewReplacer", luar.New(L, strings.NewReplacer))
474         L.SetField(pkg, "Repeat", luar.New(L, strings.Repeat))
475         L.SetField(pkg, "Replace", luar.New(L, strings.Replace))
476         L.SetField(pkg, "Split", luar.New(L, strings.Split))
477         L.SetField(pkg, "SplitAfter", luar.New(L, strings.SplitAfter))
478         L.SetField(pkg, "SplitAfterN", luar.New(L, strings.SplitAfterN))
479         L.SetField(pkg, "SplitN", luar.New(L, strings.SplitN))
480         L.SetField(pkg, "Title", luar.New(L, strings.Title))
481         L.SetField(pkg, "ToLower", luar.New(L, strings.ToLower))
482         L.SetField(pkg, "ToLowerSpecial", luar.New(L, strings.ToLowerSpecial))
483         L.SetField(pkg, "ToTitle", luar.New(L, strings.ToTitle))
484         L.SetField(pkg, "ToTitleSpecial", luar.New(L, strings.ToTitleSpecial))
485         L.SetField(pkg, "ToUpper", luar.New(L, strings.ToUpper))
486         L.SetField(pkg, "ToUpperSpecial", luar.New(L, strings.ToUpperSpecial))
487         L.SetField(pkg, "Trim", luar.New(L, strings.Trim))
488         L.SetField(pkg, "TrimFunc", luar.New(L, strings.TrimFunc))
489         L.SetField(pkg, "TrimLeft", luar.New(L, strings.TrimLeft))
490         L.SetField(pkg, "TrimLeftFunc", luar.New(L, strings.TrimLeftFunc))
491         L.SetField(pkg, "TrimPrefix", luar.New(L, strings.TrimPrefix))
492         L.SetField(pkg, "TrimRight", luar.New(L, strings.TrimRight))
493         L.SetField(pkg, "TrimRightFunc", luar.New(L, strings.TrimRightFunc))
494         L.SetField(pkg, "TrimSpace", luar.New(L, strings.TrimSpace))
495         L.SetField(pkg, "TrimSuffix", luar.New(L, strings.TrimSuffix))
496
497         return pkg
498 }
499
500 func importRegexp() *lua.LTable {
501         pkg := L.NewTable()
502
503         L.SetField(pkg, "Match", luar.New(L, regexp.Match))
504         L.SetField(pkg, "MatchReader", luar.New(L, regexp.MatchReader))
505         L.SetField(pkg, "MatchString", luar.New(L, regexp.MatchString))
506         L.SetField(pkg, "QuoteMeta", luar.New(L, regexp.QuoteMeta))
507         L.SetField(pkg, "Compile", luar.New(L, regexp.Compile))
508         L.SetField(pkg, "CompilePOSIX", luar.New(L, regexp.CompilePOSIX))
509         L.SetField(pkg, "MustCompile", luar.New(L, regexp.MustCompile))
510         L.SetField(pkg, "MustCompilePOSIX", luar.New(L, regexp.MustCompilePOSIX))
511
512         return pkg
513 }
514
515 func importErrors() *lua.LTable {
516         pkg := L.NewTable()
517
518         L.SetField(pkg, "New", luar.New(L, errors.New))
519
520         return pkg
521 }
522
523 func importTime() *lua.LTable {
524         pkg := L.NewTable()
525
526         L.SetField(pkg, "After", luar.New(L, time.After))
527         L.SetField(pkg, "Sleep", luar.New(L, time.Sleep))
528         L.SetField(pkg, "Tick", luar.New(L, time.Tick))
529         L.SetField(pkg, "Since", luar.New(L, time.Since))
530         L.SetField(pkg, "FixedZone", luar.New(L, time.FixedZone))
531         L.SetField(pkg, "LoadLocation", luar.New(L, time.LoadLocation))
532         L.SetField(pkg, "NewTicker", luar.New(L, time.NewTicker))
533         L.SetField(pkg, "Date", luar.New(L, time.Date))
534         L.SetField(pkg, "Now", luar.New(L, time.Now))
535         L.SetField(pkg, "Parse", luar.New(L, time.Parse))
536         L.SetField(pkg, "ParseDuration", luar.New(L, time.ParseDuration))
537         L.SetField(pkg, "ParseInLocation", luar.New(L, time.ParseInLocation))
538         L.SetField(pkg, "Unix", luar.New(L, time.Unix))
539         L.SetField(pkg, "AfterFunc", luar.New(L, time.AfterFunc))
540         L.SetField(pkg, "NewTimer", luar.New(L, time.NewTimer))
541         L.SetField(pkg, "Nanosecond", luar.New(L, time.Nanosecond))
542         L.SetField(pkg, "Microsecond", luar.New(L, time.Microsecond))
543         L.SetField(pkg, "Millisecond", luar.New(L, time.Millisecond))
544         L.SetField(pkg, "Second", luar.New(L, time.Second))
545         L.SetField(pkg, "Minute", luar.New(L, time.Minute))
546         L.SetField(pkg, "Hour", luar.New(L, time.Hour))
547
548         return pkg
549 }
550
551 func importUtf8() *lua.LTable {
552         pkg := L.NewTable()
553
554         L.SetField(pkg, "DecodeLastRune", luar.New(L, utf8.DecodeLastRune))
555         L.SetField(pkg, "DecodeLastRuneInString", luar.New(L, utf8.DecodeLastRuneInString))
556         L.SetField(pkg, "DecodeRune", luar.New(L, utf8.DecodeRune))
557         L.SetField(pkg, "DecodeRuneInString", luar.New(L, utf8.DecodeRuneInString))
558         L.SetField(pkg, "EncodeRune", luar.New(L, utf8.EncodeRune))
559         L.SetField(pkg, "FullRune", luar.New(L, utf8.FullRune))
560         L.SetField(pkg, "FullRuneInString", luar.New(L, utf8.FullRuneInString))
561         L.SetField(pkg, "RuneCount", luar.New(L, utf8.RuneCount))
562         L.SetField(pkg, "RuneCountInString", luar.New(L, utf8.RuneCountInString))
563         L.SetField(pkg, "RuneLen", luar.New(L, utf8.RuneLen))
564         L.SetField(pkg, "RuneStart", luar.New(L, utf8.RuneStart))
565         L.SetField(pkg, "Valid", luar.New(L, utf8.Valid))
566         L.SetField(pkg, "ValidRune", luar.New(L, utf8.ValidRune))
567         L.SetField(pkg, "ValidString", luar.New(L, utf8.ValidString))
568
569         return pkg
570 }
571
572 func importHumanize() *lua.LTable {
573         pkg := L.NewTable()
574
575         L.SetField(pkg, "Bytes", luar.New(L, humanize.Bytes))
576         L.SetField(pkg, "Ordinal", luar.New(L, humanize.Ordinal))
577
578         return pkg
579 }
580
581 func importHTTP() *lua.LTable {
582         pkg := L.NewTable()
583
584         L.SetField(pkg, "Get", luar.New(L, http.Get))
585         L.SetField(pkg, "Post", luar.New(L, http.Post))
586
587         return pkg
588 }
589
590 func importArchiveZip() *lua.LTable {
591         pkg := L.NewTable()
592
593         L.SetField(pkg, "OpenReader", luar.New(L, zip.OpenReader))
594         L.SetField(pkg, "NewReader", luar.New(L, zip.NewReader))
595         L.SetField(pkg, "NewWriter", luar.New(L, zip.NewWriter))
596
597         return pkg
598 }