Difference between revisions of "Module:DefInfo"
Jump to navigation
Jump to search
(Created empty module) |
(workable prototype) |
||
Line 1: | Line 1: | ||
− | -- | + | -- This module is to contain code for parsing a defName parameter and returning |
− | This module is to contain code for parsing a defName parameter and returning information about the Def from Module:DefInfo/ | + | -- information about the Def from Module:DefInfo/data*. See talk page for more |
− | --]] | + | -- info |
+ | |||
+ | local p = {} | ||
+ | |||
+ | local Races = mw.loadData('Module:Test/data/races') | ||
+ | local Biomes = mw.loadData('Module:Test/data/biomes') | ||
+ | |||
+ | 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 | ||
+ | |||
+ | function parent_defName(def, category) | ||
+ | local parent_name = category[def]["ParentName"] | ||
+ | if type(category[parent_name]) == "table" then return parent_name end | ||
+ | end | ||
+ | |||
+ | 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 | ||
+ | |||
+ | 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 = nil | ||
+ | if frame.args[1] == "Races" then category = Races end | ||
+ | if frame.args[1] == "Biomes" then category = Biomes end | ||
+ | local def = frame.args[2] | ||
+ | local tag = frame.args[3] | ||
+ | return query(tag, def, category) | ||
+ | end | ||
+ | |||
+ | mw.log("Module:DefInfo:os.clock() " .. os.clock()) | ||
+ | |||
+ | return p |
Revision as of 12:28, 14 March 2021
Dev version at Module:Test
-- This module is to contain code for parsing a defName parameter and returning -- information about the Def from Module:DefInfo/data*. See talk page for more -- info local p = {} local Races = mw.loadData('Module:Test/data/races') local Biomes = mw.loadData('Module:Test/data/biomes') 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 function parent_defName(def, category) local parent_name = category[def]["ParentName"] if type(category[parent_name]) == "table" then return parent_name end end 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 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 = nil if frame.args[1] == "Races" then category = Races end if frame.args[1] == "Biomes" then category = Biomes end local def = frame.args[2] local tag = frame.args[3] return query(tag, def, category) end mw.log("Module:DefInfo:os.clock() " .. os.clock()) return p