Moduł:Ramka

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
function SzablonModuleParser(frame, fal)
	    local nazwa="Nazwa";
		local szablon=frame.args[nazwa];
		local args={};
		local functions;
		if(fal==1)then
			functions=frame.args["Funkcja"];
			if((functions)and(functions~=""))then
			   args[1]=functions;
			end;
		end;
		local tab={};
		for name,value in pairs(frame.args) do
			if((name~=nazwa)and(((name~="Funkcja")and (fal==1))or(fal~=1)))then
				tab[#tab+1]=name;
			  	if((fal==1)and(functions)and(functions~=""))then
			  		if(type(name)=="number")then
				        args[tonumber(name)+1]=value;
				    else
				    	args[name]=value;
				    end;
				 else
				 	args[name]=value;
				 end;
			end;
		end;
		for name,value in pairs(frame:getParent().args) do
			if((name~=nazwa)and(((name~="Funkcja")and (fal==1))or(fal~=1)))then
				local name2;
				if((fal==1)and(functions)and(functions~=""))then
					if(type(name)=="number")then
	                    name2=name+1;
					else 
						name2=name;
					end;
				else
                    name2=name;
				end;
				local tr=true;
				for i=1,#tab,1 do
					if(tab[i]==name2)then
			   	 		tr=false;
			   			break;
					end;
				end;
				if(tr)then
					local bez_argomentow=frame.args["bez argumentów"]
					if((bez_argomentow)and(bez_argomentow~=""))then
						local lc1=mw.ustring.match(bez_argomentow,"^("..name..");");
						local lc2=mw.ustring.match(bez_argomentow,";("..name..");");
				    	local lc3=mw.ustring.match(bez_argomentow,";("..name..")$");
				        local lc4=mw.ustring.match(bez_argomentow,"^("..name..")$");
				    	if(not ((lc1)or(lc2)or(lc3)or(lc4)))then
					    	args[name2]=value;
						end;
					else
						args[name2]=value;
					end;
				end;
			end;
		end;
	    if(fal~=0)then
	         return frame:callParserFunction{name=((fal==1)and "#invoke:" or "")..szablon,args=args};
	    else
		     return frame:expandTemplate{title=szablon,args=args};
		end;
	end;
return {
	["Rozwiń"] = function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Rozwiń").id
		return frame:getParent():preprocess(frame.args[1]);
	end,
    ["Szablon"] = function(frame)
        mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Szablon").id
		return SzablonModuleParser(frame,0);
	end,
	["Moduł"] = function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Moduł").id
		return SzablonModuleParser(frame, 1);
	end,
    ["Parser"] = function(frame)
        mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Parser").id
		return SzablonModuleParser(frame, 2);
	end,
	["Powtarzaj"] =  function(frame)
	    mw.logObject(frame:getParent():getTitle(), "parent:title")
	    _ = mw.title.new("Module:Ramka/Wywołanie funkcji/Powtarzaj").id
		local pf=frame:getParent();
		local par=require("Moduł:Parametry");
		local lens=par.LiczbaElementowWTablicy(frame.args);
		local text,_text;
		local cal;
		local tab={};
		function LiczbaElementow(pod,tab)
			local j=0;
			local _pod=mw.text.trim(pod);
			for name,value in pairs(pf.args)do
				if(type(name)=="string")then
					local _name=mw.text.trim(name)
					if(_name==_pod)then
						j=j+1;
						tab[j]=1;
					else
						local pod2=mw.ustring.match(_name,"^".._pod.." (%d+)$");
						if(pod2)then
							local num=tonumber(pod2);
							if((num~=0)and(num~=1))then
								j=j+1;
								tab[j]=num;
							end;
						end;
					end;
				end;
			end;
			return j;
		end;
		local cal_start,cal_koniec;
		if(lens==0)then 
			 return "(błąd)";
		elseif(lens==1)then 
			cal_start=1;
			cal_koniec=par.LiczbaElementowNumerowanychWTablicy(frame:getParent().args);
			text=frame.args[1];
		elseif(lens==2)then
			cal=tonumber(frame.args[1]);
			text=frame.args[2];
			if(cal)then
				cal_start=cal;
			    cal_koniec=par.LiczbaElementowNumerowanychWTablicy(frame:getParent().args);
			else 
				_text=frame.args[1];
				cal_start=1;
				cal_koniec=LiczbaElementow(_text,tab);
			end;
		elseif(lens==3)then
			cal=tonumber(frame.args[1]);
			if(cal)then
				cal_start=cal;
				cal_koniec=tonumber(frame.args[2]);
				if(not cal_koniec)then return "(błąd)";end;	
				cal_koniec=math.min(cal_koniec,par.LiczbaElementowNumerowanychWTablicy(frame:getParent().args));
				text=frame.args[3];
			else
				_text=frame.args[1];
				cal_start=tonumber(frame.args[2]);
				if(not cal_start)then return "(błąd)";end;
				cal_koniec=LiczbaElementow(_text,tab);
				text=frame.args[3];
			end;
		elseif(lens==4)then
			_text=frame.args[1];
			text=frame.args[4];
			cal_start=tonumber(frame.args[2]);
			if(not cal_start)then  return "(błąd)";end;
			cal_koniec=tonumber(frame.args[3]);
			if(not cal_koniec)then  return "(błąd)";end;
			cal_koniec=math.min(cal_koniec,LiczbaElementow(frame.args[1],tab));
		else
			return "(błąd)";
		end;
		if(cal_start==0)then return "(błąd)";end;
		local strings="";
		if(cal_start>cal_koniec)then return "";end;
		table.sort(tab)
		for i=cal_start,cal_koniec,1 do
			if(_text)then
				local element=tab[i];
				if(pf.args[_text..((element>1)and " "..element or "")])then
					strings=strings..mw.ustring.gsub(text,"{{_}}",element);
				end;
			elseif(pf.args[i])then
				strings=strings..mw.ustring.gsub(text,"{{_}}",i);
			end;
		end;
		if(#strings==0)then return "";end;
		local d=pf:preprocess(strings);
		return d;
	end,
}