En inglés se diría "parser function", pero X . Tras ver la necesidad de un usuario de querer obtener las funciones y variables de un script fue que decidí hacer esta función (la cual creo aún se puede mejorar mucho). Al ejecutarla, extraera 2 tablas conteniendo los nombres de las funciones y de las variables que hay en el script sometido por el usuario.
Use mi función de imprimir tabla para mostrar los resultados. Sin más, aca la función en un ejemplo:
PD: Actualizaré este post cada que mejore la función, para evitar leer y leer páginas. La info siempre actualizada en el primer post.
Use mi función de imprimir tabla para mostrar los resultados. Sin más, aca la función en un ejemplo:
function ptbl(tbl, b, c)
local s = b or " ";
local ss = c or "";
local log = ss.."table "..s.."={\r\n";
if type(tbl) == "table" then
for row, value in pairs(tbl) do
local k = type(value);
if k == "table" then
log = log..ss..ptbl(value, "["..row.."]", ss.."\t");
else
log = log..ss..k..": ["..row.."] = \""..tostring(value).."\",\r\n"
end
end
return log..ss.."}\r\n";
else
return "["..type(tbl).."] = "..tostring(tbl);
end
end
function ParseScript(s)
local tFs = {};
local tVars = {};
for key in string.gmatch(s, "function ([%w%._]+)") do
table.insert(tFs, #tFs+1, key)
end
for key in string.gmatch(s, "(%w+%.%w+) = function") do
table.insert(tFs, #tFs+1, key)
end
for key in string.gmatch(s, "([%w_%.%[%]]-[^=~%(%)])%s=.[^func]") do
if key ~= "]" then
table.insert(tVars, #tVars+1, key)
end
end
for key in string.gmatch(s, "([%w_%.%[%]]+[^=~%(%)%s])=.[^func]") do
table.insert(tVars, #tVars+1, key)
end
return tFs, tVars;
end
local script = [["local myvar1 = \"something\"
myvar2 = 12345
function MyFunction1(asd,efg)
end
local web=1
local bytes = (x<n) and size or (x==n) and (r~=0) and r or size;
function MyGroupX.MyfunctionX(asd)
local myVar_Infunc = "something"
end
MyGroupY.MyfunctionY = function (asd)
myGlobalVar_Infunc = \"something\"
end]];
local a, b = ParseScript(script);
Dialog.Message("", ptbl(a, "Functions"));
Dialog.Message("", ptbl(b, "Vars"));