2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
9 local dir_sep, path_sep = package.config:match("^(%S+)%s(%S+)");
10 local plugin_dir = {};
11 for path in (CFG_PLUGINDIR or "./plugins/"):gsub("[/\\]", dir_sep):gmatch("[^"..path_sep.."]+") do
12 path = path..dir_sep; -- add path separator to path end
13 path = path:gsub(dir_sep..dir_sep.."+", dir_sep); -- coalesce multiple separaters
14 plugin_dir[#plugin_dir + 1] = path;
17 local io_open, os_time = io.open, os.time;
18 local loadstring, pairs = loadstring, pairs;
22 local function load_file(name)
24 for i=1,#plugin_dir do
25 file, err = io_open(plugin_dir[i]..name);
26 if file then break; end
28 if not file then return file, err; end
29 local content = file:read("*a");
34 function load_resource(plugin, resource, loader)
35 local path, name = plugin:match("([^/]*)/?(.*)");
38 resource = "mod_"..plugin..".lua";
40 loader = loader or load_file;
42 local content, err = loader(plugin.."/"..resource);
43 if not content then content, err = loader(resource); end
44 -- TODO add support for packed plugins
49 resource = "mod_"..name..".lua";
51 loader = loader or load_file;
53 local content, err = loader(plugin.."/"..resource);
54 if not content then content, err = loader(path.."/"..resource); end
55 -- TODO add support for packed plugins
61 function load_code(plugin, resource)
62 local content, err = load_resource(plugin, resource);
63 if not content then return content, err; end
64 return loadstring(content, "@"..err);