Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function printf(s, ...) (CLIENT and epoe.Print or print)(s:format(...)) end
- local replacers =
- {
- include =
- {
- pre = function(line, i, script)
- end,
- replace = function(str, data)
- end,
- }
- define =
- {
- pre = function(line, i, script)
- local key, value = line:match("(.-)%s(.+)")
- if not key then
- key, value = line:match("(.-)%s(.+)")
- end
- if not key then return false, "key" end
- if not value then return false, "value" end
- local func, args = key:match("(.+)%((.+)%)")
- if func then
- args = args:Split(",")
- else
- func = key
- args = nil
- end
- if not func then return false, "function" end
- return {func = func, args = args, value = value, i = i}
- end,
- replace = function(str, data)
- local newstr = ""
- for i, line in ipairs(str:Split("\n")) do
- if i > data.i then
- if line:find(data.func) then
- if not data.args then
- line = line:gsub(data.func, data.value)
- printf("replaced line %i (%q): %s", i, line, data.value)
- else
- local args = line:match(data.func .. "%((.-)%)")
- if not args then return false, "arguments" end
- args = args:Split(",")
- --PrintTable(args)
- for key, arg in pairs(args) do
- if data.args[key] then
- data.value = data.value:gsub(data.args[key], arg)
- end
- end
- line = line:gsub(data.func .. ".-%)", data.value)
- printf("replaced line %i: %s", i, line)
- end
- end
- end
- newstr = newstr .. line .. "\n"
- end
- --print(newstr)
- return true, newstr
- end
- },
- }
- function eek_process(str)
- local oldstr = str
- local OK, newstr =
- pcall(function()
- local funcs = {}
- for i, line in pairs(str:Split("\n")) do
- if line:sub(0, 3) == "--#" then
- line = line:sub(4)
- local func_name = line:match("(%a-)%s+")
- local replacer = replacers[func_name]
- if replacer and replacer.pre then
- funcs[func_name] = funcs[func_name] or {}
- line = line:sub(#func_name+2)
- local data, error
- if line then
- data, error = replacer.pre(line, i, str)
- else
- error = "content"
- end
- if data then
- table.insert(funcs[func_name], data)
- else
- debug.Trace()
- printf("%s expected for %s at line %i in %s! ( skipping )", error, func_name, i, line)
- end
- end
- end
- end
- for func_name, tbl in pairs(funcs) do
- if replacers[func_name].replace then
- for i, data in pairs(tbl) do
- local ok, msg = replacers[func_name].replace(str, data)
- if ok then
- str = msg
- else
- printf("%s expected for %s at line %i in %s! ( skipping )", msg, func_name, data.i, util.CRC(str))
- end
- end
- end
- end
- return str
- end)
- if not OK then print(newstr) return oldstr end
- return newstr
- end
- hook.Add("LuaDevPreProcess", 1, function(script, info)
- return eek_process(script)
- end)
Advertisement
Add Comment
Please, Sign In to add comment