<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AData</id>
	<title>Modul:Data - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AData"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Data&amp;action=history"/>
	<updated>2026-05-25T09:48:35Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Data&amp;diff=2924892&amp;oldid=prev</id>
		<title>imported&gt;XY499395: keine Unterstützung /P</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Data&amp;diff=2924892&amp;oldid=prev"/>
		<updated>2018-10-08T09:28:44Z</updated>

		<summary type="html">&lt;p&gt;keine Unterstützung /P&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.importData(frame)&lt;br /&gt;
	function listFields(sBase, iRecord)&lt;br /&gt;
		if not sBase then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local b, vT = pcall(mw.ext.data.get, sBase .. &amp;quot;.tab&amp;quot;)&lt;br /&gt;
		if not(b and type(vT) == type({}) and vT.schema) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local t = {}&lt;br /&gt;
		for i, v in ipairs(vT.schema.fields) do&lt;br /&gt;
			if iRecord and vT.data[iRecord] then&lt;br /&gt;
				t[v.name] = vT.data[iRecord][i]&lt;br /&gt;
			else&lt;br /&gt;
				t[v.name] = i&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return t&lt;br /&gt;
	end&lt;br /&gt;
	function listRecords(sBase, sKey, bIndex)&lt;br /&gt;
		if not sBase then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local b, vT = pcall(mw.ext.data.get, sBase .. &amp;quot;/key.tab&amp;quot;)&lt;br /&gt;
		local vKT = b and type(vT) == type({}) and vT.data&lt;br /&gt;
		b, vT = pcall(mw.ext.data.get, sBase .. &amp;quot;.tab&amp;quot;)&lt;br /&gt;
		if not(b and type(vT) == type({}) and vT.data) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local vFT = listFields(sBase)&lt;br /&gt;
		if not vFT then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local t = {}&lt;br /&gt;
		for i, v in ipairs(vT.data) do&lt;br /&gt;
			if vKT then&lt;br /&gt;
				sKey = &amp;quot;&amp;quot;&lt;br /&gt;
				for iK, vK in ipairs(vKT) do&lt;br /&gt;
					sKey = sKey .. v[vFT[vK[1]]] or &amp;quot;&amp;quot; .. vK[2] or &amp;quot;&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				t[sKey] = bIndex and i or v&lt;br /&gt;
			elseif vFT[sKey or &amp;quot;key&amp;quot;] then&lt;br /&gt;
				t[v[vFT[sKey or &amp;quot;key&amp;quot;]]] = bIndex and i or v&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return t&lt;br /&gt;
	end&lt;br /&gt;
	function selectTable(sBase, vKeyValue, nAdd, sKey)&lt;br /&gt;
		if not sBase then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		local sClip = tostring(sBase)&lt;br /&gt;
		if type(vKeyValue) == type(nil) then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		nAdd = tonumber(nAdd) or 0&lt;br /&gt;
		while nAdd == nAdd - 1 do&lt;br /&gt;
			nAdd = nAdd / 2&lt;br /&gt;
		end&lt;br /&gt;
		repeat&lt;br /&gt;
			local t = listRecords(sClip, sKey)&lt;br /&gt;
			if t and t[vKeyValue] then&lt;br /&gt;
				return t[vKeyValue]&lt;br /&gt;
			end&lt;br /&gt;
			sClip = (sClip and listFields(sClip .. &amp;quot;/info&amp;quot;, 1) or {})[&amp;quot;postClip&amp;quot;]&lt;br /&gt;
			sClip = sClip and string.sub(sClip, 6, -5)&lt;br /&gt;
		until not sClip&lt;br /&gt;
		if nAdd &amp;lt; 1 then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		sClip = tostring(sBase)&lt;br /&gt;
		local tNil = {}&lt;br /&gt;
		local b, vT = pcall(mw.ext.data.get, sClip .. &amp;quot;/nil.tab&amp;quot;)&lt;br /&gt;
		if b and type(vT) == type({}) and vT.data then&lt;br /&gt;
			for i, v in ipairs(vT.data) do&lt;br /&gt;
				tNil[tostring(v[1])] = tostring(v[1])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nAdd = nAdd - 1&lt;br /&gt;
		local t&lt;br /&gt;
		sClip = sClip .. &amp;quot;/add&amp;quot;&lt;br /&gt;
		repeat&lt;br /&gt;
			b, vT = pcall(mw.ext.data.get, sClip .. &amp;quot;.tab&amp;quot;)&lt;br /&gt;
			if b and type(vT) == type({}) and vT.data then&lt;br /&gt;
				vT[&amp;quot;schema&amp;quot;] = listFields(sClip)&lt;br /&gt;
				for i, v in ipairs(vT.data) do&lt;br /&gt;
					if type(v[vT.schema[&amp;quot;keySum&amp;quot;] or 1]) == type(vKeyValue) and v[vT.schema[&amp;quot;keySum&amp;quot;] or 1] == vKeyValue then&lt;br /&gt;
						local tT = {&lt;br /&gt;
							[&amp;quot;fld&amp;quot;] = listFields(sBase),&lt;br /&gt;
							[&amp;quot;val&amp;quot;] = selectTable(sBase, v[vT.schema[&amp;quot;keySummand&amp;quot;] or 2], nAdd, sKey)&lt;br /&gt;
						}&lt;br /&gt;
						if tT.val then&lt;br /&gt;
							if t then&lt;br /&gt;
								for iF, vF in pairs(tT.fld) do&lt;br /&gt;
									if tNil[iF] then&lt;br /&gt;
										t[vF] = nil&lt;br /&gt;
									else&lt;br /&gt;
										if not type(t[vF]) == type(tT.val[vF]) then&lt;br /&gt;
											t[vF] = nil&lt;br /&gt;
										elseif type(t[vF]) == type(0) then&lt;br /&gt;
											t[vF] = t[vF] + tT.val[vF]&lt;br /&gt;
										elseif type(t[vF]) == type(&amp;quot;&amp;quot;) then&lt;br /&gt;
											t[vF] = t[vF] .. &amp;quot;, &amp;quot; .. tT.val[vF]&lt;br /&gt;
										else&lt;br /&gt;
											t[vF] = nil&lt;br /&gt;
										end&lt;br /&gt;
									end&lt;br /&gt;
								end&lt;br /&gt;
							else&lt;br /&gt;
								t = tT.val&lt;br /&gt;
							end&lt;br /&gt;
						else&lt;br /&gt;
							return nil&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			sClip = (sClip and listFields(sClip .. &amp;quot;/info&amp;quot;, 1) or {})[&amp;quot;postClip&amp;quot;]&lt;br /&gt;
			sClip = sClip and string.sub(sClip, 6, -5)&lt;br /&gt;
		until not sClip&lt;br /&gt;
		return t&lt;br /&gt;
	end&lt;br /&gt;
	local tField = {&lt;br /&gt;
		[&amp;quot;object error&amp;quot;] = &amp;quot;objectError&amp;quot;,&lt;br /&gt;
		[&amp;quot;selection error&amp;quot;] = &amp;quot;selectionError&amp;quot;,&lt;br /&gt;
		[&amp;quot;key error&amp;quot;] = &amp;quot;keyError&amp;quot;,&lt;br /&gt;
		[&amp;quot;field error&amp;quot;] = &amp;quot;fieldError&amp;quot;,&lt;br /&gt;
		[&amp;quot;key addition&amp;quot;] = &amp;quot;keyAddition&amp;quot;,&lt;br /&gt;
		[&amp;quot;arg 1&amp;quot;] = &amp;quot;arg1&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
	local sField = frame.args[5] or frame.args[&amp;quot;field&amp;quot;]&lt;br /&gt;
	if tField[sField] then&lt;br /&gt;
		return frame.args[tField[sField]] or &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local sBase = &amp;quot;Data&amp;quot;&lt;br /&gt;
	tField[&amp;quot;object table link&amp;quot;] = &amp;quot;[[commons:Data:&amp;quot; .. sBase .. &amp;quot;.tab]]&amp;quot;&lt;br /&gt;
	if tField[sField] then&lt;br /&gt;
		return tField[sField]&lt;br /&gt;
	end&lt;br /&gt;
	local sObject = frame.args[1] or frame.args[&amp;quot;object&amp;quot;]&lt;br /&gt;
	if sObject then&lt;br /&gt;
		local t = {&lt;br /&gt;
			[&amp;quot;fld&amp;quot;] = listFields(sBase),&lt;br /&gt;
			[&amp;quot;val&amp;quot;] = listRecords(sBase, &amp;quot;object&amp;quot;)&lt;br /&gt;
		}&lt;br /&gt;
		local sClip = sBase&lt;br /&gt;
		while not t.val[sObject] do&lt;br /&gt;
			local tInfo = listFields(sClip .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
			if not (tInfo and tInfo[&amp;quot;postClip&amp;quot;]) then&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
			sClip = string.sub(tostring(tInfo[&amp;quot;postClip&amp;quot;]), 6, -5)&lt;br /&gt;
			t.val = listRecords(sClip, &amp;quot;object&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if not t.val[sObject] then&lt;br /&gt;
			return frame.args[&amp;quot;objectError&amp;quot;] or &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!object&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		if not t.val[sObject][t.fld[&amp;quot;table&amp;quot;]] then&lt;br /&gt;
			return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!table&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		sBase = string.sub(tostring(t.val[sObject][t.fld[&amp;quot;table&amp;quot;]]), 6, -5)&lt;br /&gt;
		tField[&amp;quot;selection table link&amp;quot;] = &amp;quot;[[commons:Data:&amp;quot; .. sBase .. &amp;quot;.tab]]&amp;quot;&lt;br /&gt;
		if tField[sField] then&lt;br /&gt;
			return tField[sField]&lt;br /&gt;
		end&lt;br /&gt;
		local vSelection = frame.args[2] or frame.args[&amp;quot;selection&amp;quot;]&lt;br /&gt;
		local sSelectionName = frame.args[&amp;quot;selectionName&amp;quot;]&lt;br /&gt;
		if not tonumber(vSelection) then&lt;br /&gt;
			sSelectionName = vSelection&lt;br /&gt;
		end&lt;br /&gt;
		vSelection = tonumber(vSelection)&lt;br /&gt;
		if vSelection or sSelectionName then&lt;br /&gt;
			t = {&lt;br /&gt;
				[&amp;quot;fld&amp;quot;] = listFields(sBase),&lt;br /&gt;
				[&amp;quot;val&amp;quot;] = listRecords(sBase, &amp;quot;selection&amp;quot;),&lt;br /&gt;
				[&amp;quot;vnm&amp;quot;] = listRecords(sBase, &amp;quot;selectionName&amp;quot;)&lt;br /&gt;
			}&lt;br /&gt;
			sClip = sBase&lt;br /&gt;
			while not (t.val[vSelection] or t.vnm[sSelectionName]) do&lt;br /&gt;
				local tInfo = listFields(sClip .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
				if not (tInfo and tInfo[&amp;quot;postClip&amp;quot;]) then&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
				sClip = string.sub(tostring(tInfo[&amp;quot;postClip&amp;quot;]), 6, -5)&lt;br /&gt;
				t.val = listRecords(sClip, &amp;quot;selection&amp;quot;)&lt;br /&gt;
				t.vnm = listRecords(sClip, &amp;quot;selectionName&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
			if not (t.val[vSelection] or t.vnm[sSelectionName]) then&lt;br /&gt;
				return frame.args[&amp;quot;selectionError&amp;quot;] or &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!selection&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			if not (t.val[vSelection] or t.vnm[sSelectionName])[t.fld[&amp;quot;table&amp;quot;]] then&lt;br /&gt;
				return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!table&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			sBase = string.sub(tostring((t.val[vSelection] or t.vnm[sSelectionName])[t.fld[&amp;quot;table&amp;quot;]]), 6, -5)&lt;br /&gt;
			tField[&amp;quot;version table link&amp;quot;] = &amp;quot;[[commons:Data:&amp;quot; .. sBase .. &amp;quot;.tab]]&amp;quot;&lt;br /&gt;
			if tField[sField] then&lt;br /&gt;
				return tField[sField]&lt;br /&gt;
			end&lt;br /&gt;
			local vVersion = frame.args[3] or frame.args[&amp;quot;version&amp;quot;]&lt;br /&gt;
			local sVersionDate = frame.args[&amp;quot;versionDate&amp;quot;]&lt;br /&gt;
			if not tonumber(vVersion) then&lt;br /&gt;
				sVersionDate = vVersion&lt;br /&gt;
			end&lt;br /&gt;
			vVersion = tonumber(vVersion)&lt;br /&gt;
			if vVersion or sVersionDate or frame.args[&amp;quot;current&amp;quot;] then&lt;br /&gt;
				local tInfo = listFields(sBase .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
				if not (vVersion or sVersionDate) then&lt;br /&gt;
					vVersion = tonumber(tInfo[&amp;quot;currentVersion&amp;quot;])&lt;br /&gt;
				end&lt;br /&gt;
				t = {&lt;br /&gt;
					[&amp;quot;fld&amp;quot;] = listFields(sBase),&lt;br /&gt;
					[&amp;quot;val&amp;quot;] = listRecords(sBase, &amp;quot;version&amp;quot;),&lt;br /&gt;
					[&amp;quot;vdt&amp;quot;] = listRecords(sBase, &amp;quot;versionDate&amp;quot;)&lt;br /&gt;
				}&lt;br /&gt;
				sClip = sBase&lt;br /&gt;
				while not (t.val[vVersion] or t.vdt[sVersionDate]) do&lt;br /&gt;
					tInfo = listFields(sClip .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
					if not (tInfo and tInfo[&amp;quot;postClip&amp;quot;]) then&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
					sClip = string.sub(tostring(tInfo[&amp;quot;postClip&amp;quot;]), 6, -5)&lt;br /&gt;
					t.val = listRecords(sClip, &amp;quot;version&amp;quot;)&lt;br /&gt;
					t.vdt = listRecords(sClip, &amp;quot;versionDate&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				if not (t.val[vVersion] or t.vdt[sVersionDate]) then&lt;br /&gt;
					return frame.args[&amp;quot;versionError&amp;quot;] or &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!version&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				if not (t.val[vVersion] or t.vdt[sVersionDate])[t.fld[&amp;quot;table&amp;quot;]] then&lt;br /&gt;
					return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!table&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				sBase = string.sub(tostring((t.val[vVersion] or t.vdt[sVersionDate])[t.fld[&amp;quot;table&amp;quot;]]), 6, -5)&lt;br /&gt;
				tInfo = listFields(sBase .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
				for i, v in pairs(tInfo) do&lt;br /&gt;
					tField[i .. &amp;quot; info&amp;quot;] = v&lt;br /&gt;
				end&lt;br /&gt;
				tField[&amp;quot;value table link&amp;quot;] = &amp;quot;[[commons:Data:&amp;quot; .. sBase .. &amp;quot;.tab]]&amp;quot;&lt;br /&gt;
				if tField[sField] then&lt;br /&gt;
					return tField[sField]&lt;br /&gt;
				end&lt;br /&gt;
				local vKey = frame.args[4] or frame.args[&amp;quot;key&amp;quot;]&lt;br /&gt;
				if vKey then&lt;br /&gt;
					t = {&lt;br /&gt;
						[&amp;quot;fld&amp;quot;] = listFields(sBase),&lt;br /&gt;
						[&amp;quot;val&amp;quot;] = selectTable(sBase, vKey, 0, &amp;quot;key&amp;quot;),&lt;br /&gt;
						[&amp;quot;add&amp;quot;] = selectTable(sBase, vKey, 5, &amp;quot;key&amp;quot;)&lt;br /&gt;
					}&lt;br /&gt;
					sClip = sBase&lt;br /&gt;
					while not (t.add and t.fld and t.add[t.fld[sField]]) do&lt;br /&gt;
						tInfo = listFields(sClip .. &amp;quot;/info&amp;quot;, 1)&lt;br /&gt;
						if not (frame.args[&amp;quot;tryOther&amp;quot;] and tInfo and tInfo[&amp;quot;postVersion&amp;quot;]) then&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
						sClip = string.sub(tostring(tInfo[&amp;quot;postVersion&amp;quot;]), 6, -5)&lt;br /&gt;
						t.val = selectTable(sClip, vKey, 0, &amp;quot;key&amp;quot;)&lt;br /&gt;
						t.add = selectTable(sClip, vKey, 5, &amp;quot;key&amp;quot;)&lt;br /&gt;
					end&lt;br /&gt;
					if t.fld and t.fld[sField] and not t.add then&lt;br /&gt;
						if vKey == &amp;quot;&amp;quot; then&lt;br /&gt;
							return &amp;quot;&amp;quot;&lt;br /&gt;
						end&lt;br /&gt;
						return frame.args[&amp;quot;keyError&amp;quot;] or &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[commons:Data:&amp;#039; .. sBase .. &amp;#039;.tab]]!key*&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					if t.fld and t.fld[sField] then&lt;br /&gt;
						return t.add[t.fld[sField]]&lt;br /&gt;
					end&lt;br /&gt;
					tField[&amp;quot;key note&amp;quot;] = (t.val or not t.add) and &amp;quot;&amp;quot; or frame.args[&amp;quot;keyAddition&amp;quot;]&lt;br /&gt;
					if tField[sField] then&lt;br /&gt;
						return tField[sField]&lt;br /&gt;
					end&lt;br /&gt;
					for i, v in pairs(t.fld) do&lt;br /&gt;
						tField[i] = v&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	tField[&amp;quot;field list&amp;quot;] = &amp;quot;&amp;quot;&lt;br /&gt;
	if tField[sField] then&lt;br /&gt;
		local s = &amp;quot;&amp;quot;&lt;br /&gt;
		local t = {}&lt;br /&gt;
		for i, v in pairs(tField) do&lt;br /&gt;
			t[#t + 1] = i&lt;br /&gt;
		end&lt;br /&gt;
		table.sort(t)&lt;br /&gt;
		for i, v in pairs(t) do&lt;br /&gt;
			s = s .. &amp;quot;* &amp;quot; .. v .. &amp;quot;\n&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	return frame.args[&amp;quot;fieldError&amp;quot;] or &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;field = &amp;quot;field list&amp;quot;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.invokeData(frame)&lt;br /&gt;
	local t = {}&lt;br /&gt;
	t.object = frame.args[1] or frame.args[&amp;quot;object&amp;quot;]&lt;br /&gt;
	if t.object then&lt;br /&gt;
		local b, tSub = pcall(require, &amp;quot;Module:Data/&amp;quot; .. t.object)&lt;br /&gt;
		if type(tSub) == type({}) then&lt;br /&gt;
			t.selection = frame.args[2] or frame.args[&amp;quot;selection&amp;quot;]&lt;br /&gt;
			t.version = frame.args[3] or frame.args[&amp;quot;version&amp;quot;]&lt;br /&gt;
			t.key = frame.args[4] or frame.args[&amp;quot;key&amp;quot;]&lt;br /&gt;
			t.field = frame.args[5] or frame.args[&amp;quot;field&amp;quot;]&lt;br /&gt;
			for i, v in pairs(frame.args) do&lt;br /&gt;
				t[i] = t[i] or v&lt;br /&gt;
			end&lt;br /&gt;
			if tSub.getData then&lt;br /&gt;
				return tSub.getData(t)&lt;br /&gt;
			else&lt;br /&gt;
				return &amp;quot;[[Module:Data/&amp;quot; .. t.object ..&amp;quot;]].getData&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;quot;[[Module:Data/&amp;quot; .. t.object ..&amp;quot;]]&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;object = &amp;quot;&amp;quot;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.evaluate(frame)&lt;br /&gt;
	if tonumber(frame.args[1]) then&lt;br /&gt;
		return mw.getCurrentFrame():callParserFunction(&amp;quot;#expr&amp;quot;, mw.ustring.gsub(frame.args[2], &amp;quot;#&amp;quot;, frame.args[1]))&lt;br /&gt;
	end&lt;br /&gt;
	return frame.args[1]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;XY499395</name></author>
	</entry>
</feed>