Module:Arguments: Difference between revisions
m
3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf
(Blanked the page) |
m (3 revisions imported from templatewiki:Module:Arguments: see Topic:Vtixlm0q28eo6jtf) |
||
| (12 intermediate revisions by 11 users not shown) | |||
| Line 1: | Line 1: | ||
-- This module provides easy processing of arguments passed to Scribunto from | |||
-- #invoke. It is intended for use by other Lua modules, and should not be | |||
-- called from #invoke directly. | |||
local libraryUtil = require('libraryUtil') | |||
local checkType = libraryUtil.checkType | |||
local arguments = {} | |||
-- Generate four different tidyVal functions, so that we don't have to check the | |||
-- options every time we call it. | |||
local function tidyValDefault(key, val) | |||
if type(val) == 'string' then | |||
val = val:match('^%s*(.-)%s*$') | |||
if val == '' then | |||
return nil | |||
else | |||
return val | |||
end | |||
else | |||
return val | |||
end | |||
end | |||
local function tidyValTrimOnly(key, val) | |||
if type(val) == 'string' then | |||
return val:match('^%s*(.-)%s*$') | |||
else | |||
return val | |||
end | |||
end | |||
local function tidyValRemoveBlanksOnly(key, val) | |||
if type(val) == 'string' then | |||
if val:find('%S') then | |||
return val | |||
else | |||
return nil | |||
end | |||
else | |||
return val | |||
end | |||
end | |||
local function tidyValNoChange(key, val) | |||
return val | |||
end | |||
local function matchesTitle(given, title) | |||
local tp = type( given ) | |||
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title | |||
end | |||
local translate_mt = { __index = function(t, k) return k end } | |||
function arguments.getArgs(frame, options) | |||
checkType('getArgs', 1, frame, 'table', true) | |||
checkType('getArgs', 2, options, 'table', true) | |||
frame = frame 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 | |||
--[[ | |||
-- Get the argument tables. If we were passed a valid frame object, get the | |||
-- frame arguments (fargs) and the parent frame arguments (pargs), depending | |||
-- on the options set and on the parent frame's availability. If we weren't | |||
-- passed a valid frame object, we are being called from another Lua module | |||
-- or from the debug console, so assume that we were passed a table of args | |||
-- directly, and assign it to a new variable (luaArgs). | |||