Modul zur Umsetzung der Vorlage:Radsportteam.


local function createlines(text)
	local pos = 0;
	local z = {}
	local rest = ""
	local row =""
	while true do
		pos = mw.ustring.find(text, "%c")
		if not pos then break end;
		row = mw.ustring.sub(text,1,pos - 1)
		table.insert(z,row);
		rest =  mw.ustring.sub(text,pos + 1,-1)
		text = rest;
		if text == ""  then break end;
	end
	return z;
end

local function trim(text)
	while mw.ustring.sub(text,1,1) == " " do
		text=  mw.ustring.sub(text,2,-1);
	end
	while string.sub(text,-1,-1) == " " do
		text=  mw.ustring.sub(text,1,-2);
	end
	return text;
end

local function splittheline(text)
	local pos = 0;
	local left = ""
	local right =""
	pos = mw.ustring.find(text, "=")
	if not pos then
		left= "";
		right="";
	else
		left = mw.ustring.sub(text,1,pos - 1)
		right =  mw.ustring.sub(text,pos + 1,-1)
	end
	return left, right;
end


local p = {}
	function p.Execute(frame)
		local uci       =  tostring(trim(frame.args[1] or "")); -- Wiki-Parameter {{{1}}} (Kuerzel)
		local what      =  tostring(trim(frame.args[2] or "")); -- Wiki-Parameter {{{2}}}  (leer, Jahr oder anderen Eintrag im Datenblatt)
		local linktext  =  tostring(trim(frame.args[3] or "")); -- Wiki-Parameter {{{text}}}
		local hasnolink =  tostring(trim(frame.args[4] or "")) ~= ""; -- alter Wiki-Parameter {{{nolink}}}
		local wikitext  = ""; -- Wiki-Text (wird zurueckgegeben)
		local daten = {};   -- nimmt den Inhalt des Datenblatts auf

		-- Erst einen Widerspruch abfangen
		-- Erst einen alten Parameter abfangen
		if hasnolink then
			wikitext ='<span class="error">Der Parameter "nolink" wird von der Vorlage nicht mehr ausgewertet!</span>';
			return wikitext;
		end
		-- Jetzt das Blatt einlesen und die Tabelle "Daten" damit fuellen.
		-- aus "links=rechts" wird "daten.links = rechts"
		local pagetext = "";
		local pagename ="Radsportteam/".. uci;
		local zeilen = {};
		local links = {};
		local rechts = {};
		local li;
		local re;
		pagetext= frame:expandTemplate{ title = pagename, args = {} } or "";
		if pagetext == "" then
			wikitext ='<span class="error">Das angegeben Kürzel ('.. uci ..') ist ungültig!</span>';
			return wikitext;
		end
		pagetext = pagetext .. "\n";
		zeilen =  createlines(pagetext);
		for i,v in ipairs(zeilen) do
			li,re = splittheline(tostring(v));
			li = trim(li or "");
			re = trim(re or "");
			if (li ~= "") then
				daten[li] = re;
			end
		end

		daten['uci'] = uci;
		-- was nicht mehr gebraucht wird freigeben:
		pagetext = nil;
		pagename = nil;
		zeilen = nil;
		links = nil;
		rechts = nil;
		li = nil;
		re = nil;

		-- Daten etwas testen und Wikilink zusammenbauen
		local lemma = tostring(daten.link) or "";
		if ( lemma == "") then
			return '<span class="error">Im Datenblatt wurde kein Linkziel gefunden!</span>';
		end
		if ((tostring(daten.name) or "") == "") then
			daten.name = lemma;
		end

		-- bei individuellem Text den Wikitext erstellen und Ende
		if (linktext ~="") then
			if lemma == linktext then
				wikitext = "[[" .. lemma .."]]";
			else
				wikitext = "[[" .. lemma .."|" .. linktext .. "]]";
			end
			return wikitext;
		end

		-- ansonsten feststellen, was gefragt wird:
		local index = "";
		if what == "" then
			index = "name";
		elseif what=="lemma" then   -- explizit nur das Lemma verlinkt wiedergeben:
			wikitext = "[[" .. lemma .."]]";
			return wikitext;
		elseif what=="#" then   -- nur das Kuerzel
			index = "uci";
		else
			index = "name-"..what;
		end

		if daten[index] then
			linktext = tostring(daten[index]);
			if lemma == linktext then
				wikitext = "[[" .. lemma .."]]";
			else
				wikitext = "[[" .. lemma .."|" .. linktext .. "]]";
			end
		else
			wikitext ='<span class="error">Der angeforderte Datenwert für "' .. tostring(index) .. '" wurde nicht gefunden!</span>';
		end
		return wikitext;
	end

return p;