Moduł:Techniczne

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Template-info.png Dokumentacja modułu [stwórz] [odśwież]
local p={};
p["Pierwszy niepusty"]= function(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame);
	local i=1;
	local parametry_modul=require("Module:Parametry");
	local liczba_elementow_w_tablicy_args=parametry_modul["LiczbaElementówNumerowanychZPrzedrostkiemLubNieTablicy"](args,"test");
	local licznik=1;
	while true do
		local test=args["test"..i];
		local _i=args[i];
		local zmienna=test or _i;
		local czy_tak=parametry_modul.CzyTak(zmienna);
		if(czy_tak)then
			return (_i)and _i or "{{{"..i.."}}}";
		end;
		if(licznik>=liczba_elementow_w_tablicy_args)then return "";end;
		if(zmienna)then licznik=licznik+1;end;
		i=i+1;
	end;
	return;
end;
p["PełnaNazwaOpisuModułu"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local pelna_nazwa_strony=PobierzParametr(1) or PobierzParametr("nazwa");
	local komunikat = mw.message.new('Scribunto-doc-page-name', '$1');
	local zawartosc_komunikatu;
	if(komunikat:exists())then
		zawartosc_komunikatu=komunikat:plain();
		zawartosc_komunikatu=mw.getCurrentFrame():preprocess(zawartosc_komunikatu);
	else
		zawartosc_komunikatu="Module:$1/opis";
	end;
    local nazwy_modul=require("Module:Nazwy");
	local pelna_nazwa_strony_wedlug_strony_komunikatu=nazwy_modul["PEŁNANAZWASTRONY"](zawartosc_komunikatu);
	local pelna_nazwa_strony_podanej_lub_aktualnej=pelna_nazwa_strony and nazwy_modul["PEŁNANAZWASTRONY"](pelna_nazwa_strony) or nazwy_modul["PEŁNANAZWASTRONY"]();
	local wzor_pelnej_nazwy_strony=mw.ustring.gsub(pelna_nazwa_strony_wedlug_strony_komunikatu,"%$1",".-");
	if(not mw.ustring.match(pelna_nazwa_strony_podanej_lub_aktualnej,"^"..wzor_pelnej_nazwy_strony.."$"))then
		local nazwa_strony=nazwy_modul["NAZWASTRONY"](pelna_nazwa_strony_podanej_lub_aktualnej);
		local przetworzona_nazwa_strony=p["TekstBezOdwołańDoParametrówWeWzorze"](nazwa_strony);
		local pelna_nazwa_strony_opisu, _=mw.ustring.gsub(zawartosc_komunikatu,"%$1",przetworzona_nazwa_strony)
		local pelna_strona_opisu=nazwy_modul["PEŁNANAZWASTRONY"](pelna_nazwa_strony_opisu);
		return pelna_strona_opisu;
	else
		return pelna_nazwa_strony_podanej_lub_aktualnej;
	end;
end;
p["CzyIstniejeDanaPrzestrzeńNazw"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_przestrzeni_nazw_lub_jego_identyfikator=PobierzParametr(1) or PobierzParametr("nazwa");
	local klucz_projektu=PobierzParametr("klucz projektu");
	local kod_jezyka=PobierzParametr("kod języka");
	local kod_projektu=PobierzParametr("kod projektu");
	
	local wiki_modul=require("Module:Wiki");
	local czy_biezace_wiki=wiki_modul["CzyBieżącaWiki"]{["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod projektu"]=kod_projektu,}
	local nazwy_modul=require("Module:Nazwy");

	local uchwyt_przestrzeni_nazw;
	if(czy_biezace_wiki)then
		uchwyt_przestrzeni_nazw=nazwy_modul.Np{nazwa=nazwa_przestrzeni_nazw_lub_jego_identyfikator,uchwyt="tak",};
	else
		uchwyt_przestrzeni_nazw=nazwy_modul.NpDane{nazwa=nazwa_przestrzeni_nazw_lub_jego_identyfikator,["klucz projektu"]=klucz_projektu,["kod języka"]=kod_jezyka,["kod projektu"]=kod_projektu,uchwyt="tak",};
	end;
	if(uchwyt_przestrzeni_nazw)then
		return "tak";
	else
		return;
	end;
end;
p["WzórDanejPrzestrzeniNazw"] = function (frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa=PobierzParametr(1) or PobierzParametr("nazwa");
	
	local wzor, _ = mw.ustring.gsub(nazwa,"(.)",function (s) return ((mw.ustring.match(s,"^%a$"))and("["..mw.ustring.upper(s)..mw.ustring.lower(s).."]")or s);end )
	wzor,_=mw.ustring.gsub(wzor,"[%s_]+","[%%s_]+");
	wzor="[%s_]*"..wzor.."[%s_]*";
	return wzor;
end;
p["WzórNazwyStrony"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local strona=PobierzParametr(1) or PobierzParametr("nazwa");
	local wzor,_=mw.ustring.gsub(strona,"([%[%]%(%)%+%-%*%?%.%^%$%%'])","%%%1");
	wzor,_=mw.ustring.gsub(wzor,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
	wzor,_=mw.ustring.gsub(wzor,"[%s_]+","[%%s_]+");
	wzor="[%s_]*"..wzor.."[%s_]*";
	return wzor;
end;
p["WzórPełnejNazwyStrony"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local strona=PobierzParametr(1) or PobierzParametr("nazwa");
	local nazwy_modul=require("Module:Nazwy");
	local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](strona);
	local nazwa_strony=nazwy_modul["NAZWASTRONY"](strona);
	if(nazwa_przestrzeni~="")then
		nazwa_przestrzeni=p["WzórDanejPrzestrzeniNazw"](nazwa_przestrzeni);
	end;
	nazwa_strony=p["WzórNazwyStrony"](nazwa_strony);
	return ((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "")..nazwa_strony;
end;
p["TekstBezOdwołańDoParametrówWeWzorze"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local tekst=PobierzParametr(1) or PobierzParametr("nazwa");
	tekst,_=mw.ustring.gsub(tekst,"%%(%d+)","%%%%%1");
	return tekst;
end;
p["PrzekształćWzórDoCzystegoTekstu"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local tekst=PobierzParametr(1) or PobierzParametr("nazwa");
	tekst,_=mw.ustring.gsub(tekst,"([%^%$%(%)%%%.%[%]%*%+%-%?])","%%%1");
	return tekst;
end;
function p.PoliczZbiory(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame,true);

	local liczba_istniejacych_zbiorow=0;
	local tabela_uchwytow_stron={};
	for _,nazwa_strony in ipairs(args) do
	   local uchwyt_strony = mw.title.makeTitle('',nazwa_strony);
	   local tekst_artykulu = uchwyt_strony and uchwyt_strony:getContent() or nil;
	   
	   local czy_istnieje=tekst_artykulu and tekst_artykulu or (uchwyt_strony and uchwyt_strony.exists or nil);
	   
	   tabela_uchwytow_stron[#tabela_uchwytow_stron+1]={uchwyt_strony,tekst_artykulu,};
	   if(czy_istnieje)then 
	      liczba_istniejacych_zbiorow=liczba_istniejacych_zbiorow+1;
	   end;
	end;
    return liczba_istniejacych_zbiorow,tabela_uchwytow_stron;
end;
function p.TransformacjaWzoru(ciag)
	return mw.ustring.gsub(ciag,"[%^%$%(%)%%%.%[%]%*%+%-%?]","%%%1");
end;
p["WyświetlajKodySpecjalne"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local tekst=PobierzParametr(1) or PobierzParametr("nazwa");
    
	local html_modul=require("Module:Html");
	local i=html_modul.KodHTMLZnaku("&");
	local hash=html_modul.KodHTMLZnaku("#");
	local sr=html_modul.KodHTMLZnaku(";");
	text=mw.ustring.gsub(text,"&#(%d+);",i..hash.."%1"..sr);
	text=mw.ustring.gsub(text,"&(%a+);",i.."%1"..sr);
	return text;
end;
function p.Wikikod(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa=PobierzParametr("nazwa strony") or PobierzParametr("nazwa") or PobierzParametr(1);
	local przestrzen=PobierzParametr("miano przestrzeni nazw") or PobierzParametr("przestrzeń") or "Template";
	
	local nazwa_modulu=((parametry_modul["CzyTakCiąg"](przestrzen)) and (przestrzen..":") or "")..(nazwa or "Przykłowa strona");
	
	local stronicowyparser_tekst_modul=require("Module:StronicowyParser/Tekst");
	local tekst=stronicowyparser_tekst_modul.LadujZawartoscStrony(nil,nazwa_modulu,nil,false,nil,true);
	if(not tekst)then
		local blad_modul=require("Module:Błąd");
		return blad_modul.error{args={tag="span",tekst="Nie ma takiej strony lub artykulu."}};
	end;

	local html_modul=require("Module:Html");
	
	local i=html_modul.KodHTMLZnaku("&");
	local hash=html_modul.KodHTMLZnaku("#");
	local sr=html_modul.KodHTMLZnaku(";");
	tekst=mw.ustring.gsub(tekst,"&#(%d+);",i..hash.."%1"..sr);
	tekst=mw.ustring.gsub(tekst,"&(%a+);",i.."%1"..sr);
	
	local tab_znaki={
		["{"]="{{(}}",
		["}"]="{{)}}",
		["|"]="{{!}}",
		["="]="{{=}}";
	};
	local tab_linki={
		["["]="{{!(}}",
		["]"]="{{)!}}",
		["|"]="{{!}}",
	}
	local tab_tagow={
		["<"]="{{Mniejszy}}",
		[">"]="{{Większy}}",
	}
	local tab_zmienne={
		["NAMESPACE"]=true,
		["PAGENAME"]=true,
	};

    local tablica_obiektow_strony_dany_modul={};
    local szablonowe_modul=require("Module:Szablonowe")
    local tekst=szablonowe_modul.KodujStroneTekstuObiektowa(nil,tekst,nazwa_modulu,tablica_obiektow_strony_dany_modul);
	
	local szablonowe_modul=require("Module:Szablonowe");
	
	tekst=szablonowe_modul.SkladajSzablonoweWywolaniaTekstu(nil,tekst,nazwa_modulu,tablica_obiektow_strony_dany_modul,function(szablon,obiekt,kod)
				if(obiekt=="TEMPLATE")then
					local pseudoszablon,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon);
					if((pseudoszablon)and(((tabela_modyfikatorow)and((szablonowe_modul.CzyModyfikatorySzablonowe(tabela_modyfikatorow))
						                        		or(tabela_modyfikatorow["#invoke:"])
						                        			or(tabela_modyfikatorow["int:"]))
												and(not mw.ustring.match(pseudoszablon,"^[%s_]*#?[%s_]*a+[%s_]*:")))
													or((not tabela_modyfikatorow)and(not mw.ustring.match(pseudoszablon,"^[%s_]*#?[%s_]*a+[%s_]*:")))
												
					))then
						
						if(mw.ustring.match(szablon,"|"))then
							if(mw.ustring.match(szablon,"^{{[^|]*"..szablonowe_modul.OgolnyWzor().."[^|]*|"))then
								szablon,_=mw.ustring.gsub(szablon,"(.)",tab_znaki);
				        		return szablon;
							else
								szablon,_=mw.ustring.gsub(szablon,"=","{{=}}");
								szablon,_=mw.ustring.gsub(szablon,"^{{","{{s|oryginalna=tak|analiza=tak|");
								return szablon;
							end;
						else
							if(mw.ustring.match(szablon,szablonowe_modul.OgolnyWzor()))then
								szablon,_=mw.ustring.gsub(szablon,"(.)",tab_znaki);
				        		return szablon;
							end;
							if(pseudoszablon)then
									if(((not tabela_modyfikatorow)or((not tabela_modyfikatorow["int:"])and(not tabela_modyfikatorow["#invoke:"])))and(tab_zmienne[pseudoszablon]))then
										szablon,_=mw.ustring.gsub(szablon,"(.)",tab_znaki);
										return szablon;
									else
										szablon,_=mw.ustring.gsub(szablon,"^{{","{{s|oryginalna=tak|analiza=tak|");
										return szablon;
									end;
							else
								szablon,_=mw.ustring.gsub(szablon,"^{{","{{s|oryginalna=tak|analiza=tak|");
								return szablon;
							end;
						end;
					else
				         szablon,_=mw.ustring.gsub(szablon,"(.)",tab_znaki);
				         return szablon;
					end;
				elseif((obiekt=="LINKW")or(obiekt=="LINKZ"))then
					szablon,_=mw.ustring.gsub(szablon,"(.)",function(znak)
						local odpowied=tab_linki[znak] or tab_znaki[znak];
						if(odpowied)then return odpowied;end;
						return znak;
					end);
					return szablon;
				elseif(obiekt=="VAR")then
					szablon,_=mw.ustring.gsub(szablon,"(.)",function(znak)
						local odpowied=tab_linki[znak] or tab_znaki[znak];
						if(odpowied)then return odpowied;end;
						return znak;
					end);
					return szablon;
				elseif((obiekt=="NOWIKI")or(obiekt=="PRE")or(obiekt=="MATH"))then
					szablon,_=mw.ustring.gsub(szablon,"(.)",function(znak)
						local odpowied=tab_linki[znak] or tab_znaki[znak] or tab_tagow[znak];
						if(odpowied)then return odpowied;end;
						return znak;
					end);
					return szablon;
				else
					return szablon;
				end;
			end);
	return frame:getParent():preprocess(tekst);
end;
p["WikikodStrony"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa=PobierzParametr("nazwa strony") or PobierzParametr("nazwa") or PobierzParametr(1);
	local przestrzen=PobierzParametr("miano przestrzeni nazw") or PobierzParametr("przestrzeń") or "Template";
	
	if(not parametry_modul.CzyTak(nazwa))then return;end;
	local title=mw.title.makeTitle(przestrzen,nazwa);
	local text=title and title:getContent() or false;
	if(not text)then return;end;
	text=mw.ustring.gsub(text,"(<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>.-</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>)","");
	text=mw.ustring.gsub(text,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	return text;
end;
function p.LuaSubst(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame);
	
	local strona=args[1] or args["strona"];
	if(not parametry_modul.CzyTak(strona))then return "(Błąd: Podana nazwa strony jest pusta lub nie podana)";end;
	local title=mw.title.makeTitle('',strona);
	if((not title)or (not title.exists))then return "(Błąd: Podana strona nie istnieje)";end;
	local tekst=title:getContent();
	local inkludowany=parametry_modul.CzyTak(args["inkludowana"]);
	if(inkludowany)then
		tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","");
		tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	else
		local dokumentacja=parametry_modul.CzyTak(args["dokumentacja"]);
		if(dokumentacja)then
			tekst,_=mw.ustring.gsub(tekst,"<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>(.-)</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>","%1");
			tekst,_=mw.ustring.gsub(tekst,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","");
		end;
	end;
	return tekst;
end;
function p.NowaLinia(frame)
	return "\n";
end;
function p.Nowiki(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame);
	local PobierzParametr=parametry_modul.PobierzParametr(args);
	local tekst=PobierzParametr("tekst") or PobierzParametr(1);
	
	local html_modul=require("Module:Html");
	local i=html_modul.KodHTMLZnaku("&");
	local h=html_modul.KodHTMLZnaku("#");
	local s=html_modul.KodHTMLZnaku(";");
    tekst,_=mw.ustring.gsub(tekst,"&#(%d+);",i..h.."%1"..s);
    tekst,_=mw.ustring.gsub(tekst,"&(%a+);",i.."%1"..s);
    local sprawdz_modul=require("Module:Sprawdź");
    tekst=sprawdz_modul["UsuńKategorięSprawdzaniaParametrówSzablonu"]{args={[1]=tekst,},}
    tekst=frame:callParserFunction('#tag:nowiki',tekst);
	return tekst;
end;
function p.FunkcjaLua(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame);
	local modul=require("Module:"..(args[1] or args["moduł"]));
	if(modul)then
		if(modul[asgs[2] or args["nazwa"] or args["funkcja"]])then
			local args2=parametry_modul["KopiujTabelęElementówBezTablicyKluczy"](args,{[1]=true,["moduł"]=true,[2]=true,nazwa=true,funkcja=true,["wyspecjalizowana"]=true,})
			return modul[args[2] or args["nazwa"] or args["funkcja"]](args2);
		end;
	end;
end;
p["RozwińSzablonWzględemPodanychParametrów"]=function (frame)
    local parametry_modul=require("Module:Parametry");
    local args=parametry_modul.PobierzArgsParametry(frame)
	local PobierzParametr=parametry_modul.PobierzParametr(args);
	local nazwa=PobierzParametr("Nazwa strony") or PobierzParametr("Nazwa") or "Nazwa strony";
	local przestrzen=PobierzParametr("Miano przestrzeni nazw") or PobierzParametr("Przestrzeń") or "Template";
	
	local title=mw.title.makeTitle(przestrzen,nazwa);
	local text=title and title:getContent() or nil;
	if(not text)then
		local blad_modul=require("Module:Błąd");
		return blad_modul.error{args={tag="span",tekst="Strona nie istnieje lub nie ma zawartości."}};
	end;
	text=mw.ustring.gsub(text,"(<[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>.-</[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]>)","");
	text=mw.ustring.gsub(text,"<[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>(.-)</[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]>","%1");
	local bezkluczy={
		["Nazwa strony"]=true,
		["Nazwa"]=true,
		["Miano przestrzeni nazw"]=true,
		["Przestrzeń"]=true,
		["wyspecjalizowana"]=true,
		["nie rozwiń"]=true,
	};
	local tab=parametry_modul["KopiujTabelęElementówBezTablicyKluczy"](args,bezkluczy);
	local frame2=mw.getCurrentFrame():newChild{title=(parametry_modul.CzyTak(przestrzen)and (przestrzen..":"..nazwa) or nazwa),args=tab};
	text=parametry_modul.CzyTak(frame.args["nie rozwiń"]) and text or frame2:preprocess(text);
	return text;
end;
p["LiczbaBajtówCiąguDoNormy"] = function(frame)
	local str=frame.args[1] or frame.args["ciąg"];
	local ile=tonumber(frame.args[2] or frame.args["norma"]);
	if(not ile)then return #str;end;
	if(#str<=ile)then
		return #str;
	end;
	return nil;
end;
p["LiczbaStronJakoPozycjeDanejKategorii"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame);
	local kategoria=parametry_modul.CzyTak(args["kategoria"]) and args["kategoria"] or "Category:Przykładowa kategoria";
	local kat={
		["subcats"]=true,
		["files"]=true,
		["pages"]=true,
	}
	local typ=args["typ"];
	typ=(typ and kat[args["typ"]]) and args["typ"] or "all";
	local nazwy_modul=require("Module:Nazwy");
	kategoria=nazwy_modul["NAZWASTRONY"](kategoria);
	return mw.site.stats.pagesInCategory(kategoria,typ);
end;
p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local adres_wzgledny=PobierzParametr(1) or PobierzParametr("względny");
	if(not mw.ustring.match(adres_wzgledny,"/"))then return adres_wzgledny;end;
	local adres_biezacy=PobierzParametr(2) or PobierzParametr("bieżący");
	local adres;
	if(mw.ustring.match(adres_wzgledny,"^[%s_]*/"))then 
		if(adres_biezacy)then
			adres=adres_biezacy..adres_wzgledny;
		else
			return nil;
		end;
	else 
		if((mw.ustring.match(adres_wzgledny,"^[%s_]*%.[%s_]*/"))or(mw.ustring.match(adres_wzgledny,"^[%s_]*%.[%s_]*%.[%s_]*/")))then
			if(adres_biezacy)then
				adres=adres_biezacy.."/"..adres_wzgledny;
			else
				return nil;
			end;
		else
			adres=adres_wzgledny;
		end;
	end;
	while((mw.ustring.match(adres,"/[%.%s_]*[%s_]*%.[%s_]*%.[%s_]*/"))or(mw.ustring.match(adres,"/[%s_]*%.[%s_]*/"))or(mw.ustring.match(adres,"/[%s_]*/")))do
		adres,_=mw.ustring.gsub(adres,"/[%s_]*/","/");
		adres,_=mw.ustring.gsub(adres,"/[%s_]*%.[%s_]*/","/");
		adres,_=mw.ustring.gsub(adres,"/+","/");
		adres,_=mw.ustring.gsub(adres,"^/[%.%s_]*[%s_]*%.[%s_]*%.[%s_]*/","/");
		adres,_=mw.ustring.gsub(adres,"^[^/]*/[%.%s_]*[%s_]*%.[%s_]*%.[%s_]*/","/",1);
		adres,_=mw.ustring.gsub(adres,"/([^/]*)/[%.%s_]*[%s_]*%.[%s_]*%.[%s_]*/","/",1);
	end;
	adres=mw.ustring.gsub(adres,"[%s_]*/[%s_]*","/");
	adres=mw.ustring.gsub(adres,"^[%s_]*/+","");
	adres=mw.ustring.gsub(adres,"[%s_]*/+","/");
	adres=mw.ustring.gsub(adres,"/+[%s_]*$","");
	adres=mw.ustring.gsub(adres,"^[%s_]*","");
	adres=mw.ustring.gsub(adres,"[%s_]*$","");
	adres=mw.ustring.gsub(adres,"[%s_]+"," ");
	return adres;
end;
function p.PrzekierowanieDoStrony(frame)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_modulu=PobierzParametr(1);
	local title=mw.title.makeTitle('',nazwa_modulu);
	if(title)then
		local strona=title.redirectTarget;
		if(not strona)then return;end;
		return strona.fullText;
	else
		mw.log("Nieprawidłowy format nazwy modułu: "..nazwa_modulu..".");
		return;
	end;
end;
p["Forma wyrażenia po liczbie"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local czy_table_frame=parametry_modul.TypeTable(frame);
	local args=czy_table_frame and (frame.args or frame) or nil;
	local argument_funkcji_modulu_1=czy_table_frame and (args[1] or "0") or (frame or "0");
	local argument_funkcji_modulu_2=czy_table_frame and (args[2] or "zbiorów") or "zbiorów";
	local argument_funkcji_modulu_3=czy_table_frame and (args[3] or "zbiór") or "zbiór";
	local argument_funkcji_modulu_4=czy_table_frame and (args[4] or "zbiory") or "zbiory";
	local specjalne_modul=require("Module:Specjalne");
	local liczba_number=specjalne_modul["WydzielLiczbę"](argument_funkcji_modulu_1);
	if(not liczba_number)then return "(błąd)";end;
	if(liczba_number==0)then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_2;end;
    if(liczba_number==1)then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_3;end;
    if(liczba_number<5)then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_4;end;
    if(liczba_number<20)then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_2;end;
	local reszta=math.fmod(liczba_number,10);
	if((reszta==0)or(reszta==1))then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_2;end;
    if(reszta<5)then return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_4;end;
    return argument_funkcji_modulu_1.." "..argument_funkcji_modulu_2;
end;
return p;