Moduł:Kategorie

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={};
function PoliczLiczbeStronWPodkategoriach(z_kategoriami_bledow,parametry_modul,argumenty_szablonu,zebrane_kategorie,bledy,czy_korzystana_kategoria)
	local liczba_stron_w_kategoriach=0;
	for numer_argumentu_szablonu, nazwa_kategorii in ipairs(argumenty_szablonu) do
		if(numer_argumentu_szablonu~=0)then
			local nazwa_kategorii2=parametry_modul["OdstępyFun"](nazwa_kategorii,"tak");
			local liczba_stron_istniejacych,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..nazwa_kategorii2};
			if(liczba_stron_istniejacych==0)then
				if(z_kategoriami_bledow)then
					if(tabela_uchwytow_stron[1])then
		        		parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - nieistniejące kategorie]]");
		        	else
		        		parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - niepoprawne kategorie]]");
		        	end;
            	end;
		    else    
				local uchwyt_strony=tabela_uchwytow_stron[1];
				local zawartosc_strony=uchwyt_strony:getContent();
				zawartosc_strony=mw.ustring.gsub(zawartosc_strony,"%s*<!%-%-.-%-%->%s*","")
				local wywolanie_szablonu;
				local iterator=mw.ustring.gmatch(zawartosc_strony,"({{[^{}|]+|[^{}]-}})");
				for wywolanie_szablonu in iterator do
					local wywolanie_szablonu2=mw.text.trim(mw.ustring.match(wywolanie_szablonu,"^{{([^{}|]+)|"));
					if(mw.ustring.match(wywolanie_szablonu2,"^[_%s]-Łączna[_%s]+liczba[_%s]+stron[_%s]+w[_%s]+kategoriach[_%s]-$"))then
						local niepowtarzajace_sie_kategorie=true;
						if(zebrane_kategorie[nazwa_kategorii2])then
	    					if(z_kategoriami_bledow)then
	    						if(not czy_korzystana_kategoria)then
	    							parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - powtarzające się kategorie]]");
		    					else
	    							parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - powtarzające się parametry]]");
	    						end;
	    					end;
	    					niepowtarzajace_sie_kategorie=false;
	    				end;
	    				if(niepowtarzajace_sie_kategorie)then
	    		    		zebrane_kategorie[nazwa_kategorii2]=true;
	    	        		local tablica_argumentow_szablonu=parametry_modul["ParsujWywołanieSzablonu"](wywolanie_szablonu);
	    	        		local liczba_stron_w_kategorii=0;
	    	        		for licznik,elementy_nieponumerowane_argumentow_szablonu in ipairs(tablica_argumentow_szablonu)do
	    	        			if(licznik~=0)then
	    	        				 local elementy_nieponumerowane_argumentow_szablonu2=parametry_modul["OdstępyFun"](elementy_nieponumerowane_argumentow_szablonu,"tak");
	    	        	    		 liczba_stron_w_kategorii=liczba_stron_w_kategorii+mw.site.stats.pagesInCategory(elementy_nieponumerowane_argumentow_szablonu2,"all");
	    	        			end;
	    	        		end;
	    	        		liczba_stron_w_kategoriach=liczba_stron_w_kategoriach+liczba_stron_w_kategorii;
	    	        	end;
	    			elseif(mw.ustring.match(wywolanie_szablonu2,"^[_%s]-Rekurencyjna[_%s]+łączna[_%s]+liczba[_%s]+stron[_%s]+w[_%s]+kategoriach[_%s]-$"))then
	    				local tablica_argumentow_szablonu=parametry_modul["ParsujWywołanieSzablonu"](wywolanie_szablonu);
	    				for licznik,wartosc_argumentu in pairs(tablica_argumentow_szablonu) do
	    					wartosc_argumentu=parametry_modul["OdstępyFun"](wartosc_argumentu,"tak");
	    					if((type(licznik)=="number")and(wartosc_argumentu~=""))then
	    						tablica_argumentow_szablonu[licznik]=wartosc_argumentu
	    					end;
	    				end;
	    				local niepowtarzajace_sie_kategorie=true
	    				if(zebrane_kategorie[nazwa_kategorii2])then
	    					if(z_kategoriami_bledow)then
	    						if(not czy_korzystana_kategoria)then
	    								parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - powtarzające się kategorie]]");
		    					else
	    							parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - powtarzające się parametry]]");
	    						end;
	    					end;
	    					niepowtarzajace_sie_kategorie=false;
	    				end;
	    				zebrane_kategorie[nazwa_kategorii2]=true;
	    				if(niepowtarzajace_sie_kategorie)then 
	    					liczba_stron_w_kategoriach=liczba_stron_w_kategoriach+PoliczLiczbeStronWPodkategoriach(z_kategoriami_bledow,parametry_modul,tablica_argumentow_szablonu,zebrane_kategorie,bledy,false);
	    				end;
	    			end;
				end;
			end;
		end;
	end;
	return liczba_stron_w_kategoriach;
end;
p["RekurencyjnaŁącznaLiczbaStronWKategoriach"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local s=(parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent();
	return require("Module:Kategorie")["RekurencyjnaŁącznaLiczbaStronWKategoriachFun"](s.args)
end;
p["RekurencyjnaŁącznaLiczbaStronWKategoriachFun"] = function(args)
	local bledy={};
	local nazwy_modul=require("Module:Nazwy");
	local nazwa_kategorii=(args["aktualna kategoria"])and ('Category:'..args["aktualna kategoria"]) or nil;
	local nazwa_strony_aktualnej=nazwy_modul["NAZWASTRONYFUN"](nazwa_kategorii);
	local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIFUN"](nazwa_kategorii);
	local zebrane_kategorie={};
	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
	if(nazwa_przestrzeni==nazwy_np_modul.Category)then
		zebrane_kategorie[nazwa_strony_aktualnej]=true;
	end;
	local parametry_modul=require("Module:Parametry");
	local z_kategoriami_bledow=not parametry_modul.CzyTak(args["bez kategorii"]);
	local liczba_argumentow_ponumerowanych_w_argumentach_szablonu=parametry_modul["MaksymalnaLiczbaParametruNienazwanegoTablicy"](args,"tak");
	if(liczba_argumentow_ponumerowanych_w_argumentach_szablonu==0)then 
		if(z_kategoriami_bledow)then
			return "0[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - brak kategorii]]";
		else
			return "0";
		end;
    end;
    for licznik,wartosc_argumentu in pairs(args) do
    	local wartosc_argumentu=parametry_modul["OdstępyFun"](wartosc_argumentu,"tak");
    	if((type(licznik)=="number")and(wartosc_argumentu~=""))then
	    	args[licznik]=wartosc_argumentu;
	    end;
	end;
	local liczba_stron_w_kategortiach=PoliczLiczbeStronWPodkategoriach(z_kategoriami_bledow,parametry_modul,args,zebrane_kategorie,bledy,true);
	if((z_kategoriami_bledow)and(not parametry_modul["CzySąElementyNienazwaneTablicy"](bledy,"tak")))then
		if(nazwa_przestrzeni==nazwy_np_modul.Category)then
			local args2=parametry_modul["KopiujTabelęŁańcuchów"]{tabela=args,przedrostek='Category:'};
			local liczba_istniejacych_kategorii_w_aktualnej_kategorii,_=parametry_modul.PoliczZbioryFun(args2);
			if(liczba_argumentow_ponumerowanych_w_argumentach_szablonu~=mw.site.stats.pagesInCategory(nazwa_strony_aktualnej,"subcats")
				or(liczba_argumentow_ponumerowanych_w_argumentach_szablonu~=liczba_istniejacych_kategorii_w_aktualnej_kategorii)
			)then
				parametry_modul.DodajElementDoZbioru(bledy,"[[Kategoria:Szablon rekurencyjna łączna liczba stron w kategoriach - niezgodność kategorii]]");
			end;
		end;
	end;
	return liczba_stron_w_kategortiach..table.concat(bledy);
end;
p["ŁącznaLiczbaStronWKategoriach"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local s=(parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent();
	return require("Module:Kategorie")["ŁącznaLiczbaStronWKategoriachFun"](s.args)
end;
p["ŁącznaLiczbaStronWKategoriachFun"] = function(args)
	local parametry_modul=require("Module:Parametry");
	local z_kategoriami_bledow=not parametry_modul.CzyTak(args["bez kategorii"]);
	local liczba_argumentow_ponumerowanych_w_argumentach_szablonu=parametry_modul["MaksymalnaLiczbaParametruNienazwanegoTablicy"](args,"tak");
	if(liczba_argumentow_ponumerowanych_w_argumentach_szablonu==0)then 
		if(z_kategoriami_bledow)then
			return "0[[Kategoria:Szablon łączna liczba stron w kategoriach - brak kategorii]]";
		else
			return "0";
		end;
	end;
	local tabela_kategorii={};
	for licznik=1,liczba_argumentow_ponumerowanych_w_argumentach_szablonu,1 do args[licznik]=parametry_modul["OdstępyFun"](args[licznik],"tak");end;
	local liczba_stron_w_kategorii=0;
	local liczba_kategorii_w_korzystanej_kategorii=0;
	local czy_ma_liczyc_zgodnosc_kategorii=true;
	for licznik,wartosc_argumentu in pairs(args)do
		if((type(licznik)=="number")and(mw.text.trim(wartosc_argumentu)~=""))then
			local liczba_istniejacych_kategorii,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..args[licznik]};
			if(liczba_istniejacych_kategorii==0)then
				if(z_kategoriami_bledow)then
					if(tabela_uchwytow_stron[1])then
						parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[[Kategoria:Szablon łączna liczba stron w kategoriach - nieistniejące kategorie]]");
					else
						parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[[Kategoria:Szablon łączna liczba stron w kategoriach - niepoprawne kategorie]]");
					end;
				end;
				czy_ma_liczyc_zgodnosc_kategorii=false;
			else
		    	local czy_niepowtarzajace_kategorie=true;  
    	    	for licznik2=licznik+1,liczba_argumentow_ponumerowanych_w_argumentach_szablonu,1 do
    	    		if(args[licznik]==args[licznik2])then
    	    			if(z_kategoriami_bledow)then
    	    				parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[[Kategoria:Szablon łączna liczba stron w kategoriach - powtarzające się parametry]]");
    	    			end;
    	    			czy_niepowtarzajace_kategorie=false;
    	    			czy_ma_liczyc_zgodnosc_kategorii=false;
                    	break;
    	    		end;
    	    	end;
    	    	if(czy_niepowtarzajace_kategorie)then 
    	    		liczba_kategorii_w_korzystanej_kategorii=liczba_kategorii_w_korzystanej_kategorii+1;
    	    		liczba_stron_w_kategorii=liczba_stron_w_kategorii+mw.site.stats.pagesInCategory(args[licznik],"all");
    	    	end;
			end;
		end;
	end;
	if(z_kategoriami_bledow)then
		if(czy_ma_liczyc_zgodnosc_kategorii)then
			local nazwy_modul=require("Module:Nazwy");
			local nazwa_kategorii=(args["aktualna kategoria"])and ('Category:'..args["aktualna kategoria"]) or nil;
			local nazwa_strony_aktualnej=nazwy_modul["NAZWASTRONYFUN"](nazwa_kategorii);
	        local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENIFUN"](nazwa_kategorii);
	        local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
	        if(nazwa_przestrzeni==nazwy_np_modul.Category)then
        		local liczba_kategorii_w_kategorii_aktualnej=mw.site.stats.pagesInCategory(nazwa_strony_aktualnej,"subcats")+(((args["kategoria alternatywna jako podkategoria"])and(args["kategoria alternatywna jako podkategoria"]~="")) and -1 or 0);
        		local liczba_kategorii_w_kategorii_alternatywnej=(args["kategoria alternatywna"])and mw.site.stats.pagesInCategory(args["kategoria alternatywna"],"subcats") or 0;
				if(liczba_kategorii_w_korzystanej_kategorii~=liczba_kategorii_w_kategorii_aktualnej+liczba_kategorii_w_kategorii_alternatywnej)then
					parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[[Kategoria:Szablon łączna liczba stron w kategoriach - niezgodność kategorii]]");
				end;	
			end;
		end;
	end;
	return liczba_stron_w_kategorii..table.concat(tabela_kategorii);
end;
function p.Kategoria(frame)
	local parametry_modul=require("Module:Parametry");
    local s=(parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent();
	return p.KategoriaFun(s.args);
end;
function p.KategoriaFun(args)
	local parametry_modul=require("Module:Parametry");
	local z_kategoriami_bledow=not parametry_modul.CzyTak(args["bez kategorii"]);
	local kategoria=args[1] and parametry_modul["OdstępyFun"](args[1],"tak");
	local nazwa_sortowania=args[2] and parametry_modul["OdstępyFun"](args[2],"tak");
	if((kategoria)and(kategoria~="")and(nazwa_sortowania)and(nazwa_sortowania~=""))then
		local sortuj=args["sortuj spacją"] or args["s"];
		local liczba_istniejacych_stron,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..kategoria};
		local dotatkowekategorie="";
		if(z_kategoriami_bledow)then
			if(liczba_istniejacych_stron==0)then
				if(tabela_uchwytow_stron[1])then
					dotatkowekategorie="[[Category:Szablon kategoria - nieistniejąca kategoria]]";
				else
					dotatkowekategorie="[[Category:Szablon kategoria - niepoprawna kategoria]]";
				end;
			end;
		end;
		return ((tabela_uchwytow_stron[1])and "[[Category:"..kategoria.."|"..(((sortuj)and(sortuj~=""))and " " or "")..nazwa_sortowania.."]]" or "")..dotatkowekategorie;
	elseif((kategoria)and(kategoria~="")and((not nazwa_sortowania)or(nazwa_sortowania=="")))then
		local sortuj=args["sortuj spacją"] or args["s"];
		local liczba_istniejacych_stron,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..kategoria};
		local dotatkowekategorie="";
		if(z_kategoriami_bledow)then
			if(liczba_istniejacych_stron==0)then
				if(tabela_uchwytow_stron[1])then
					dotatkowekategorie="[[Category:Szablon kategoria - nieistniejąca kategoria]]";
				else
					dotatkowekategorie="[[Category:Szablon kategoria - niepoprawna kategoria]]";
				end;
			end;
		end;
		if((sortuj)and(sortuj~=""))then
			return ((tabela_uchwytow_stron[1])and "[[Category:"..kategoria.."| ]]" or "")..dotatkowekategorie;
		else
			return ((tabela_uchwytow_stron[1])and "[[Category:"..kategoria.."]]" or "")..dotatkowekategorie;
		end;
	end;
	return "[[Category:Szablon kategoria - nazwa kategorii pusta lub niepodana]]";
end;
function p.Kategorie(frame)
	local parametry_modul=require("Module:Parametry");
	local s=(parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent();
	return p.KategorieFun(s.args);
end;
function p.KategorieFun(args)
	local tablica_kategorii_bledow={};
	local tablica_kategorii={};
	local tablica_czy_kategorie_sie_powtarzaja={};
	local parametry_modul=require("Module:Parametry");
	local z_kategoriami_bledow=not parametry_modul.CzyTak(args["bez kategorii"]);
	local czy_sa_argumenty_ponumerowane=parametry_modul["CzySąElementyNienazwaneTablicy"](args);
	if(not czy_sa_argumenty_ponumerowane)then 
		if(z_kategoriami_bledow)then
			return "[[Category:Szablon kategorie - nie podano nazw kategorii]]";
		else
			return "";
		end;
	end;
	for licznik,wartosc_argumentu in pairs(args)do
		if((type(licznik)=="number")and(mw.text.trim(wartosc_argumentu)~=""))then
	   		local kategoria=wartosc_argumentu and parametry_modul["OdstępyFun"](wartosc_argumentu,"tak");
	   		if((kategoria)and(kategoria~=""))then
	   			local _i=args["_"..licznik] or args["_i"];
				local nazwa_sortowania=_i and parametry_modul["OdstępyFun"](_i,"tak");
				local sortuj=args["sortuj spacją "..licznik] or args["s"..licznik];
				if((nazwa_sortowania)and(nazwa_sortowania~=""))then
					local liczba_istniejacych_stron,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..kategoria};
					if(z_kategoriami_bledow)then
						if(liczba_istniejacych_stron==0)then
							if(tabela_uchwytow_stron[1])then
			    				parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - nieistniejące kategorie]]");
			    			else
			    				parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - niepoprawne kategorie]]");
			    			end;
			    		end;
					end;
					local czy_sie_nie_powtarza=true;
					if(tablica_czy_kategorie_sie_powtarzaja[kategoria])then
				    	if(z_kategoriami_bledow)then		
							parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - powtarzające się kategorie]]");
						end;
						czy_sie_nie_powtarza=false;
					end;
					if((czy_sie_nie_powtarza)and (tabela_uchwytow_stron[1]))then 
						tablica_kategorii[#tablica_kategorii+1]="[[Category:"..kategoria.."|"..(((sortuj)and(sortuj~=""))and " " or "")..nazwa_sortowania.."]]";
					end;
					tablica_czy_kategorie_sie_powtarzaja[kategoria]=true;
				elseif(((not nazwa_sortowania)or(nazwa_sortowania=="")))then
					local sortuj=args["sortuj spacją "..licznik] or args["s"..licznik];
					local liczba_stron_istniejacych,tabela_uchwytow_stron=parametry_modul.PoliczZbioryFun{[1]="Category:"..kategoria};
					if(z_kategoriami_bledow)then
						if(liczba_stron_istniejacych==0)then
							if(tabela_uchwytow_stron[1])then
								parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - nieistniejące kategorie]]");
							else
								parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - niepoprawne kategorie]]");
							end;
						end;
					end;
					local czy_sie_nie_powtarza=true;
					if(tablica_czy_kategorie_sie_powtarzaja[kategoria])then
						if(z_kategoriami_bledow)then
							parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - powtarzające się kategorie]]");
						end;
						czy_sie_nie_powtarza=false;
					end;
					tablica_czy_kategorie_sie_powtarzaja[kategoria]=true;
					if((czy_sie_nie_powtarza)and (tabela_uchwytow_stron[1]))then
						if((sortuj)and(sortuj~=""))then
							tablica_kategorii[#tablica_kategorii+1]="[[Category:"..kategoria.."| ]]";
						else
							tablica_kategorii[#tablica_kategorii+1]="[[Category:"..kategoria.."]]";
						end;
					end;
				end;
			elseif((kategoria)and(kategoria==""))then
				parametry_modul.DodajElementDoZbioru(tablica_kategorii_bledow,"[[Category:Szablon kategorie - puste kategorie]]");
			end;
		end;
	end;
	local lancuch_kategorii=table.concat(tablica_kategorii,"")..table.concat(tablica_kategorii_bledow);
	if(lancuch_kategorii~="")then
		local klucz_sortowania=args["klucz sortowania"] or args["k"];
		if(klucz_sortowania)then
			klucz_sortowania=parametry_modul["OdstępyFun"](klucz_sortowania,"tak");
			local domyslne_sortowanie=mw.getCurrentFrame():getParent():callParserFunction("DEFAULTSORT",klucz_sortowania);
			lancuch_kategorii=domyslne_sortowanie..lancuch_kategorii;
		end;
	end;
	return lancuch_kategorii;
end;
return p;