Editing Module:Arguments

From MINR.ORG WIKI

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 52: Line 52:
 
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
 
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
 
end
 
end
 
local translate_mt = { __index = function(t, k) return k end }
 
  
 
function arguments.getArgs(frame, options)
 
function arguments.getArgs(frame, options)
Line 60: Line 58:
 
frame = frame or {}
 
frame = frame or {}
 
options = options or {}
 
options = options or {}
 
--[[
 
-- Set up argument translation.
 
--]]
 
options.translate = options.translate or {}
 
if getmetatable(options.translate) == nil then
 
setmetatable(options.translate, translate_mt)
 
end
 
if options.backtranslate == nil then
 
options.backtranslate = {}
 
for k,v in pairs(options.translate) do
 
options.backtranslate[v] = k
 
end
 
end
 
if options.backtranslate and getmetatable(options.backtranslate) == nil then
 
setmetatable(options.backtranslate, {
 
__index = function(t, k)
 
if options.translate[k] ~= k then
 
return nil
 
else
 
return k
 
end
 
end
 
})
 
end
 
  
 
--[[
 
--[[
Line 124: Line 97:
 
end
 
end
 
end
 
end
 
+
 
-- We test for false specifically here so that nil (the default) acts like true.
 
-- We test for false specifically here so that nil (the default) acts like true.
 
if found or options.frameOnly == false then
 
if found or options.frameOnly == false then
Line 149: Line 122:
 
luaArgs = frame
 
luaArgs = frame
 
end
 
end
 
+
 
-- Set the order of precedence of the argument tables. If the variables are
 
-- Set the order of precedence of the argument tables. If the variables are
 
-- nil, nothing will be added to the table, which is how we avoid clashes
 
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
+
-- between the frame/parent args and the Lua args.
 
local argTables = {fargs}
 
local argTables = {fargs}
 
argTables[#argTables + 1] = pargs
 
argTables[#argTables + 1] = pargs
Line 242: Line 215:
 
-- must be nil.
 
-- must be nil.
 
--]]
 
--]]
if type(key) == 'string' then
 
key = options.translate[key]
 
end
 
 
local val = metaArgs[key]
 
local val = metaArgs[key]
 
if val ~= nil then
 
if val ~= nil then
Line 265: Line 235:
 
-- This function is called when a module tries to add a new value to the
 
-- This function is called when a module tries to add a new value to the
 
-- args table, or tries to change an existing value.
 
-- args table, or tries to change an existing value.
if type(key) == 'string' then
 
key = options.translate[key]
 
end
 
 
if options.readOnly then
 
if options.readOnly then
 
error(
 
error(
Line 294: Line 261:
 
else
 
else
 
metaArgs[key] = val
 
metaArgs[key] = val
end
 
end
 
 
local function translatenext(invariant)
 
local k, v = next(invariant.t, invariant.k)
 
invariant.k = k
 
if k == nil then
 
return nil
 
elseif type(k) ~= 'string' or not options.backtranslate then
 
return k, v
 
else
 
local backtranslate = options.backtranslate[k]
 
if backtranslate == nil then
 
-- Skip this one. This is a tail call, so this won't cause stack overflow
 
return translatenext(invariant)
 
else
 
return backtranslate, v
 
end
 
 
end
 
end
 
end
 
end
Line 321: Line 270:
 
metatable.donePairs = true
 
metatable.donePairs = true
 
end
 
end
return translatenext, { t = metaArgs }
+
return pairs(metaArgs)
 
end
 
end
 
+
 
local function inext(t, i)
 
local function inext(t, i)
 
-- This uses our __index metamethod
 
-- This uses our __index metamethod

Please note that all contributions to MINR.ORG WIKI may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see MINR.ORG WIKI:Copyrights for details). Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)