From c3c025c034155d246d66f3ae2f19a1c2caa2d5b0 Mon Sep 17 00:00:00 2001 From: expwnent Date: Mon, 30 Jun 2014 02:19:50 -0400 Subject: [PATCH] Added Lua subroutine for standardized argument processing. --- library/lua/utils.lua | 59 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/library/lua/utils.lua b/library/lua/utils.lua index be139633e..0c9541cb4 100644 --- a/library/lua/utils.lua +++ b/library/lua/utils.lua @@ -548,4 +548,61 @@ function invert(tab) return result end -return _ENV \ No newline at end of file +function processArgs(...) + --[[ + standardized argument processing for scripts + -argName value + -argName [list of values] + -argName [list of [nested values] -that can be [whatever] format of matched square brackets] + -arg1 \-arg3 + escape sequences + --]] + local result = {} + local args = {...} + local argName + local bracketDepth = 0 + for i,arg in ipairs(args) do + if argName then + if arg == '[' then + if bracketDepth > 0 then + table.insert(result[argName], arg) + end + bracketDepth = bracketDepth+1 + elseif arg == ']' then + bracketDepth = bracketDepth-1 + if bracketDepth > 0 then + table.insert(result[argName], arg) + else + argName = nil + end + elseif string.sub(arg,1,1) == '\\' then + if bracketDepth == 0 then + result[argName] = string.sub(arg,2) + argName = nil + else + table.insert(result[argName], string.sub(arg,2)) + end + else + if bracketDepth == 0 then + result[argName] = arg + argName = nil + else + table.insert(result[argName], arg) + end + end + elseif string.sub(arg,1,1) == '-' then + argName = string.sub(arg,2) + if i+1 > #args or string.sub(args[i+1],1,1) == '-' then + result[argName] = '' + argName = nil + else + result[argName] = {} + end + else + error('error parsing arg ' .. i .. ': ' .. arg) + end + end + return result +end + +return _ENV