Difference between revisions of "Module:DefInfo"
Jump to navigation
Jump to search
m |
|||
Line 1: | Line 1: | ||
− | |||
− | |||
− | |||
− | |||
local p = {} | local p = {} | ||
Line 45: | Line 41: | ||
function p.query(frame) | function p.query(frame) | ||
− | local category = | + | local category = frame.args[1] |
− | |||
− | |||
local def = frame.args[2] | local def = frame.args[2] | ||
local tag = frame.args[3] | local tag = frame.args[3] | ||
+ | local sublist_query = frame.args[4] | ||
+ | |||
+ | if category == "Races" then category = Races | ||
+ | elseif category == "Biomes" then category = Biomes | ||
+ | else return "undefined category" end | ||
+ | |||
+ | local queried = query(tag, def, category) | ||
+ | |||
+ | if sublist_query == "count" then | ||
+ | if type(queried) == "table" then | ||
+ | return table.getn(queried) | ||
+ | else | ||
+ | return tag .. " is not a table (not countable)" | ||
+ | end | ||
+ | elseif sublist_query == "number" then | ||
+ | return queried[sublist_query] | ||
+ | end | ||
+ | |||
return query(tag, def, category) | return query(tag, def, category) | ||
end | end |
Revision as of 14:29, 30 March 2021
Dev version at Module:Test
local p = {} local Races = mw.loadData('Module:Test/data/races') local Biomes = mw.loadData('Module:Test/data/biomes') local function find_key_in_table(key, table) for k, v in pairs(table) do if k == key then return v elseif type(v) == "table" then local found = find_key_in_table(key, v) if found then return found end end end end local function parent_defName(def, category) local parent_name = category[def]["ParentName"] if type(category[parent_name]) == "table" then return parent_name end end local function find_in_parents(tag, def, category) if not category[def] then return def .. " not found in category" end local parent_def = parent_defName(def, category) if not parent_def then return tag .." not found in parent defs" end local found = find_key_in_table(tag, category[parent_def]) if found then return found else found = find_in_parents(tag, parent_def, category) if found then return found end end end local function query(tag, def, category) if not category[def] then return def .. " not found in category" end local found = find_key_in_table(tag, category[def]) if found then return found end found = find_in_parents(tag, def, category) if found then return found end return tag .. " not found" end function p.query(frame) local category = frame.args[1] local def = frame.args[2] local tag = frame.args[3] local sublist_query = frame.args[4] if category == "Races" then category = Races elseif category == "Biomes" then category = Biomes else return "undefined category" end local queried = query(tag, def, category) if sublist_query == "count" then if type(queried) == "table" then return table.getn(queried) else return tag .. " is not a table (not countable)" end elseif sublist_query == "number" then return queried[sublist_query] end return query(tag, def, category) end mw.log("Module:DefInfo:os.clock() " .. os.clock()*1000 .. " ms") return p