Difference between revisions of "Module:DefInfo"

From RimWorld Wiki
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/Data.  See talk page for more info
+
-- 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