Module:Args

From Zelda Dungeon Wiki
Revision as of 21:34, June 23, 2020 by Locke (talk | contribs) (this handles parsing flattened arg trees into lua tables. I don't like that you have to call :val() on everything though...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Want an adless experience? Log in or Create an account.

Documentation for this module may be created at Module:Args/doc

local Arg = {}
Arg.__index = Arg

function Arg.new( value )
  return setmetatable( {
    __value = value
  }, Arg )
end

function Arg:val()
  return self.__value
end

local p = {}

function insertInto( tbl, key, value )
  local first, rest = string.match( key, '^(.-)_(.*)$' )
  local myKey = first or key
  myKey = tonumber( myKey ) or myKey

  -- make sure the node exists
  if not tbl[myKey] then tbl[myKey] = Arg.new() end

  if first then -- this is an internal node so insert children
    insertInto( tbl[myKey], rest, value )
  else -- this is a leaf so set value
    tbl[myKey].__value = tonumber( value ) or value
  end
end

function p.parse( args )
  local parsedArgs = {}
  for k, v in pairs( args ) do
    insertInto( parsedArgs, k, v )
  end

  return parsedArgs
end

return p