Module:Sandbox/Erutuon/parameters
authority, binomial authority, binomial_authority, classification status, classification_status, color as, color_as, colour as, colour_as, display parents, display_parents, diversity, diversity link, diversity ref, diversity_link, diversity_ref, edit link, edit_link, extinct, fossil range, fossil_range, genus, grandparent authority, grandparent_authority, greatgrandparent authority, greatgrandparent_authority, greatgreatgrandparent authority, greatgreatgrandparent_authority, greatgreatgreatgrandparent authority, greatgreatgreatgrandparent_authority, image, image alt, image caption, image upright, image2, image2 alt, image2 caption, image2 upright, image2_alt, image2_caption, image2_upright, image_alt, image_caption, image_upright, italic title, italic_title, name, oldest fossil, oldest_fossil, parent, parent authority, parent_authority, range map, range map alt, range map caption, range map upright, range map2, range map2 alt, range map2 caption, range map2 upright, range map3, range map3 alt, range map3 caption, range map3 upright, range map4, range map4 alt, range map4 caption, range map4 upright, range_map, range_map2, range_map2_alt, range_map2_caption, range_map2_upright, range_map3, range_map3_alt, range_map3_caption, range_map3_upright, range_map4, range_map4_alt, range_map4_caption, range_map4_upright, range_map_alt, range_map_caption, range_map_upright, species, status, status ref, status system, status2, status2 ref, status2 system, status2_ref, status2_system, status_ref, status_system, subdivision, subdivision ranks, subdivision ref, subdivision_ranks, subdivision_ref, synonyms, synonyms ref, synonyms_ref, taxon, temporal range, temporal_range, trend, type strain, type strain ref, type_strain, type_strain_ref, youngest fossil, youngest_fossil
local p = {}
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
-- From [[wikt:Module:table]].
local function defaultKeySort(key1, key2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(key1), type(key2)
if type1 ~= type2 then
return type1 < type2
else
return key1 < key2
end
end
function p.make_param_list(params_set)
local params_sorted = {}
for param_name in pairs(params_set) do
table.insert(params_sorted, param_name)
end
table.sort(params_sorted, defaultKeySort)
return params_sorted
end
function p.get_parameters(pagename)
local page
if type(pagename) == "string" then
page = mw.title.new(pagename)
elseif type(pagename) == "table" and pagename.nsText then
page = pagename
pagename = page.fullText
else
errorf("Bad argument #1 to get_parameters (expected pagename or page title, got %s)",
type(pagename))
end
local content = page:getContent()
if not content then
errorf("The page '%s' does not have any content.", pagename)
end
local params = {}
for param_name in content:gmatch '{{{([%w _]+)%f[|]' do -- Not a completely accurate pattern.
--This code is not quite accurate, because PHP only converts integer
-- parameter names to Lua numbers; float parameter names stay strings.
if tonumber(param_name) then
param_name = tonumber(param_name)
end
params[param_name] = true
end
return params
end
function p.check_params(frame)
local template_title = mw.title.getCurrentTitle()
local params_set = p.get_parameters(template_title)
if frame.args.log then
mw.log("get_parameters found the following parameters:",
table.concat(p.make_param_list(params_set), ", "))
end
local unrecognized_params = {}
for param_name in pairs(frame:getParent().args) do
if not params_set[param_name] then
unrecognized_params[param_name] = true
end
end
if next(unrecognized_params) then
local unrecognized_params_list = p.make_param_list(unrecognized_params)
errorf("The parameters %s %s not recognized",
table.concat(unrecognized_params_list, ", "),
unrecognized_params_list[2] and "are" or "is")
end
end
function p.show_parameters(frame)
local template_name = frame.args[1]
if not template_name then
error("Template name (parameter 1) is required")
end
template_name = "Template:" .. template_name
return table.concat(p.make_param_list(p.get_parameters(template_name)), ", ")
end
return p