Module:TemplateUtil

From the RuneScape Wiki, the wiki for all things RuneScape
Jump to navigation Jump to search
Module documentation
This documentation is transcluded from Module:TemplateUtil/doc. [edit] [history] [purge]
This module does not have any documentation. Please consider adding documentation at Module:TemplateUtil/doc. [edit]
Module:TemplateUtil requires Module:StringUtil.
Module:TemplateUtil is required by Module:Calcvalue.
Module:TemplateUtil is required by Module:Calcvalue formatter.
Module:TemplateUtil is required by Module:Calcvalue formatter json.
Module:TemplateUtil is required by Module:Calcvalue/sandbox.
Module:TemplateUtil is required by Module:Ritual component cost.
Function list
L 6 — p.parseTemplateParams
L 22 — p.marker
L 26 — p.recursiveTemplateMatch
L 30 — recursiveTemplateMatchImpl

local split = require("Module:StringUtil").split;
local ustr = mw.ustring;

local p = {};

function p.parseTemplateParams(template)
	local sections = split(mw.text.trim(template), "%s*|%s*");
	local params = {};

	for _, v in ipairs(sections) do
		if ustr.find(v, "=") then
			local name, value = ustr.match(v, "^(.-)%s*=%s*(.-)$");
			params[name] = value;
		else
			table.insert(params, v);
		end
	end

	return params;
end

function p.marker(n)
	return "\127$" .. n .. "$\127";
end

function p.recursiveTemplateMatch(value)
	local templateList = {};
	local markerCount = 1;

	local function recursiveTemplateMatchImpl(v)
		v = ustr.gsub(v, "{(%b{})}", recursiveTemplateMatchImpl);
		v = v:gsub("^{", ""):gsub("}$", "");
		local marker = p.marker(markerCount);
		markerCount = markerCount + 1;
		templateList[marker] = v;
		return marker
	end

	recursiveTemplateMatchImpl(value);

	return templateList, markerCount - 1;
end

return p;