Dokumentacja modułu [stwórz] [odśwież]
local p={};
p["LiczbaElementówNumerowanychTablicy"]=function(tabela, wliczac,mnoga)
  local liczba_elementow_ponumerowanych_w_tablicy=0;
  local czy_puste_wliczac=p.CzyTak(wliczac);
  local czy_mnoga=p.CzyTak(mnoga);
  for _1,_2 in ipairs(tabela)do
  	if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
		liczba_elementow_ponumerowanych_w_tablicy=liczba_elementow_ponumerowanych_w_tablicy+1;
		if((czy_mnoga)and(liczba_elementow_ponumerowanych_w_tablicy>1))then return liczba_elementow_ponumerowanych_w_tablicy;end;
	end;
  end;
  return liczba_elementow_ponumerowanych_w_tablicy;
end;
p["LiczbaElementówNumerowanychSzablonu"]=function(frame)
   local parametry_modul=require("Module:Parametry");
   return parametry_modul["LiczbaElementówNumerowanychTablicy"](frame:getParent().args,frame.args["niepuste"],frame.args["mnoga"]);
end;
p["LiczbaElementówNienazwanychTablicy"] = function(tabela,wliczac,mnoga)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  local czy_mnoga=p.CzyTak(mnoga);
  local liczba_elementow_nienazwanych_w_tablicy=0;
  for _1,_2 in pairs(tabela)do
  		if(type(_1)=="number")then
  			if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
				liczba_elementow_nienazwanych_w_tablicy=liczba_elementow_nienazwanych_w_tablicy+1;
				if((czy_mnoga)and(liczba_elementow_nienazwanych_w_tablicy>1))then return liczba_elementow_nienazwanych_w_tablicy;end;
			end;
		end;
  end;
  return liczba_elementow_nienazwanych_w_tablicy;
end;
p["LiczbaParametrówNienazwanychSzablonu"] = function (frame)
	return p["LiczbaElementówNienazwanychTablicy"](frame:getParent().args,frame.args["niepuste"],frame.args["mnoga"])
end;
p["LiczbaElementówTablicy"]=function(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  local liczba_elementow_w_tablicy=0;
  for _1,_2 in pairs(tabela)do
  	  if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
			liczba_elementow_w_tablicy=liczba_elementow_w_tablicy+1;
	  end;
  end;
  return liczba_elementow_w_tablicy;
end;
p["LiczbaElementówNienazwanychZPrzedrostkiemLubNieTablicy"]=function(tabela,przedrostek,wliczac,czy_formy_numerkowe)
	local czy_puste_wliczac=p.CzyTak(wliczac);
    local liczba_elementow_w_tablicy=0;
    local techniczne_modul=require("Module:Techniczne");
    local wzor="^"..techniczne_modul["PrzekształćWzórDoCzystegoTekstu"](przedrostek).."(%d+)$";
	for _1,_2 in pairs(tabela)do
		local string_liczba=tostring(_1);
		local czy_liczba=((mw.ustring.match(string_liczba,"^%d+$"))and(czy_formy_numerkowe or p.TypeNumber(_1))and((tonumber(_1))>0));
		local zmienna=czy_liczba and przedrostek.._1 or nil;
		local element=(czy_liczba and tabela[zmienna] or nil) or (czy_liczba and tabela[_1] or (mw.ustring.match(string_liczba,wzor) and tabela[_1] or nil));
		if(element)then
  			if((not czy_puste_wliczac)or((czy_puste_wliczac)and(element~="")))then
	  			liczba_elementow_w_tablicy=liczba_elementow_w_tablicy+1;
	  		end;
		end;
	end;
	return liczba_elementow_w_tablicy;
end;
function p.MaksymalnaLiczbaParametruNienazwanegoSzablonu(frame)
	return p.MaksymalnaLiczbaParametruNienazwanegoTablicy(frame:getParent().args,frame.args["niepuste"]);
end;
function p.MaksymalnaLiczbaParametruNienazwanegoTablicy(tabela, wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  local liczba_elementow_ponumerowanych_w_tablicy=0;
  for _1,_2 in pairs(tabela)do
  		if(type(_1)=="number")then
  			if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
				liczba_elementow_ponumerowanych_w_tablicy=math.max(liczba_elementow_ponumerowanych_w_tablicy,_1);
			end;
		end;
  end;
  return (liczba_elementow_ponumerowanych_w_tablicy)and liczba_elementow_ponumerowanych_w_tablicy or 0;
end;
function p.MinimalnaLiczbaParametruNienazwanegoSzablonu(frame)
	return p.MinimalnaLiczbaParametruNienazwanegoTablicy(frame:getParent().args,frame.args["niepuste"]);
end;
function p.MinimalnaLiczbaParametruNienazwanegoTablicy(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  local liczba_elementow_ponumerowanych_w_tablicy;
  for _1,_2 in pairs(tabela)do
  		if(type(_1)=="number")then
  			if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
  				if(not liczba_elementow_ponumerowanych_w_tablicy)then liczba_elementow_ponumerowanych_w_tablicy=_1;end;
				liczba_elementow_ponumerowanych_w_tablicy=math.min(liczba_elementow_ponumerowanych_w_tablicy,_1);
			end;
		end;
  end;
  return (liczba_elementow_ponumerowanych_w_tablicy)and liczba_elementow_ponumerowanych_w_tablicy or 1;
end;
function p.MinimalnyIMaksymalnyNumerParametru(tabela,nazwa_parametru_okreslona)
	local liczba_maksimum=0;
	local liczba_minimum;
	for nazwa_parametru,wartosc_parametru in pairs(tabela)do
		local liczba_z_parametru=mw.ustring.match(nazwa_parametru,"^"..nazwa_parametru_okreslona.."%s(%d+)$")
		if(liczba_z_parametru)then 
			local liczba=tonumber(liczba_z_parametru) or 0;
			liczba_maksimum=math.max(liczba_maksimum,liczba);
			if(not liczba_minimum)then 
				 liczba_minimum=(liczba>0)and liczba or 1;
		    else 
		    	liczba_minimum=math.min(liczba_minimum,(liczba>0)and liczba or 1);
			end;	
		elseif(nazwa_parametru_okreslona==nazwa_parametru)then
			liczba_maksimum=math.max(liczba_maksimum,1);
			if(not liczba_minimum)then 
				 liczba_minimum=1;
		    else 
		    	liczba_minimum=math.min(liczba_minimum,1);
			end;
		end;
	end;
	if(not liczba_minimum)then liczba_minimum=1;end;
	return liczba_minimum,liczba_maksimum;
end;
p["CzySąParametryNumerowaneSzablonu"] = function(frame)
	local czy_sa_elementy_tablicy=require("Module:Parametry")["CzySąElementyNumerowaneTablicy"](frame:getParent().args,frame.args["niepuste"]);
	if(czy_sa_elementy_tablicy)then return "tak";end;
	return;
end;
p["CzySąElementyNumerowaneTablicy"]=function(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  for _1,_2 in ipairs(tabela)do
  	if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
		return true;
	end;
  end;
  return false;
end;
p["CzySąParametryNienazwaneSzablonu"] = function(frame)
	local czy_sa_elementy_tablicy=require("Module:Parametry")["CzySąElementyNienazwaneTablicy"](frame:getParent().args,frame.args["niepuste"]);
	if(czy_sa_elementy_tablicy)then return "tak";end;
	return;
end;
p["CzySąElementyNienazwaneTablicy"]=function(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  for _1,_2 in pairs(tabela)do
  	if(type(_1)=="number")then
  		if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
			return true;
		end;
	end;
  end;
  return false;
end;
p["CzySąParametryNazwaneSzablonu"] = function(frame)
	local czy_sa_elementy_tablicy=require("Module:Parametry")["CzySąElementyNazwaneTablicy"](frame:getParent().args,frame.args["niepuste"]);
	if(czy_sa_elementy_tablicy)then return "tak";end;
	return;
end;
p["CzySąElementyNazwaneTablicy"]=function(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  for _1,_2 in pairs(tabela)do
  	if(type(_1)~="number")then
  		if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
			return true;
		end;
	end;
  end;
  return false;
end;
p["CzySąParametrySzablonu"] = function(frame)
	local czy_sa_elementy_tablicy=require("Module:Parametry")["CzySąElementyTablicy"](frame:getParent().args,frame.args["niepuste"]);
	if(czy_sa_elementy_tablicy)then return "tak";end;
	return;
end;
p["CzySąElementyTablicy"]=function(tabela,wliczac)
  local czy_puste_wliczac=p.CzyTak(wliczac);
  for _1,_2 in pairs(tabela)do
  	  if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
			return true;
	  end;
  end;
  return false;
end;
p["CzyCoNajwyżejJedenNumerowanyParametrSzablonu"] = function (frame)
	local parametry_modul=require("Module:Parametry");
	return parametry_modul["CzyCoNajwyżejJedenNumerowanyElementTablicy"](frame:getParent().args,frame.args["niepuste"]);
end;
p["CzyCoNajwyżejJedenNumerowanyElementTablicy"] = function (args,wliczac)
	local czy_puste_wliczac=p.CzyTak(wliczac);
	local i=1;
	local czy=false;
	for _1,_2 in pairs(args)do
		if(type(_1)=="number")then
			if((not czy_puste_wliczac)or((czy_puste_wliczac)and(p.CzyTak(_2))))then
				if(_1==1)then czy=true;end;
				if(i>1)then
					return "";
				else
	    			i=i+1;
	    		end;
			end;
	 	end;
	end;
	if((czy)or(i==1))then return "tak";else return;end;
end;
p["KopiujTabelęŁańcuchów"]=function(args)
	local args2={};
	for name,value in pairs(args.tabela)do
		if(args.wzor and args.podstawienie)then value=mw.ustring.gsub(value,args.wzor,args.podstawienie);end;
		if(args.wzor2)then value=mw.ustring.match(value,args.wzor2);end;
		args2[name]=((args.przedrostek)and args.przedrostek or '')..value..((args.przyrostek)and args.przyrostek or '');
	end;
	return args2;
end;
p["KopiujTabelęElementów"]=function(tabelka,wliczac_1,wliczac_2)
	local czy_puste_wliczac_1=p.CzyTak(wliczac_1);
	local czy_puste_wliczac_2=p.CzyTak(wliczac_2);
	local tabelka2={};
	for name,value in pairs(tabelka)do
		if(((not czy_puste_wliczac_1)or((czy_puste_wliczac_1)and(p.CzyTak(name))))and((not czy_puste_wliczac_2)or((czy_puste_wliczac_2)and(p.CzyTak(value)))))then
			tabelka2[name]=value;
		end;
	end;
	return tabelka2;
end;
p["KopiujTabelęElementówBezTablicyKluczy"]=function(tabelka,tabelka2,wliczac_1,wliczac_2)
	local czy_puste_wliczac_1=p.CzyTak(wliczac_1);
	local czy_puste_wliczac_2=p.CzyTak(wliczac_2);
	local tabelka3={};
	for name,value in pairs(tabelka)do
		if(((not czy_puste_wliczac_1)or((czy_puste_wliczac_1)and(p.CzyTak(name))))and((not czy_puste_wliczac_2)or((czy_puste_wliczac_2)and(p.CzyTak(value)))))then
			local czy=p.CzyJestTakiKluczTabeli(tabelka2,name);
			if(not czy)then
				tabelka3[name]=value;
			end;
		end;
	end;
	return tabelka3;
end;
p["KopiujRekurencyjnieTabelęElementów"]=function(tabelka,wliczac_1,wliczac_2)
	local czy_puste_wliczac_1=p.CzyTak(wliczac_1);
	local czy_puste_wliczac_2=p.CzyTak(wliczac_2);
	local function kopiuj(tabelka)
		local tabelka2={};
		for name,value in pairs(tabelka)do
			if(((not czy_puste_wliczac_1)or((czy_puste_wliczac_1)and(p.CzyTak(name))))and((not czy_puste_wliczac_2)or((czy_puste_wliczac_2)and(p.CzyTak(value)))))then
				if(type(value)=="table")then
					tabelka2[name]=kopiuj(value);
				else
					tabelka2[name]=value;
				end;
			end;
		end;
		return tabelka2;
	end;
	return kopiuj(tabelka);
end;
p["NazwanyLiczbą"] = function(frame)
	local pf=frame:getParent()
	local numer_parametru=frame.args[1]
	if(numer_parametru)then
		numer_parametru=tonumber(numer_parametru);
		if(numer_parametru and pf.args[numer_parametru])then
			return "tak"
		end
	end;
	return;
end
p["NazwanyCiągiem"] = function (frame)
	local pf=frame:getParent()
	local klucz_parametru=frame.args[1]
	if(klucz_parametru)then
		local klucz_parametru_do_liczby=tonumber(klucz_parametru);
		if((not klucz_parametru_do_liczby)and(pf.args[klucz_parametru]))then
			return "tak"
		end
	end;
	return;
end;
function p.Nazwane(frame)
    local pf = frame:getParent()
    for _, nazwa_parametru in ipairs(frame.args)do
    	local wartosc_parametru_nazwanego=pf.args[mw.text.trim(nazwa_parametru)]
    	if(wartosc_parametru_nazwanego)then return "tak" end 
    end
    return;
end
function p.Nienazwane(frame)
    local pf = frame:getParent()
    for _, wartosc_parametru in ipairs(frame.args)do
    	wartosc_parametru=mw.text.trim(wartosc_parametru)
    	for name, wartosc_parametru2 in pairs(pf.args) do
    	   if(type(name)=="number")then
    			if(mw.text.trim(wartosc_parametru2)==wartosc_parametru)then	 	
    	    		return "tak"
    			end
    		end;
        end
    end
    return;
end
function p.Numerowane(frame)
    local pf = frame:getParent()
    for _, wartosc_parametru in ipairs(frame.args)do
    	wartosc_parametru=mw.text.trim(wartosc_parametru)
    	for _, wartosc_parametru2 in ipairs(pf.args) do
    	   if(mw.text.trim(wartosc_parametru2)==wartosc_parametru)then	 	
    	       return "tak"
    	   end
        end
    end
    return;
end
p["Odstępy"] = function(frame)
	local PobierzParametr=p.PobierzParametr(frame);
    local nazwa=PobierzParametr(1) or PobierzParametr("nazwa");
    local czy=PobierzParametr(2) or PobierzParametr("wewnątrz");
    local dolny_myslnik=PobierzParametr(3) or PobierzParametr("dolny-myślnik");
    local odstep_spacje=PobierzParametr(4) or PobierzParametr("spacje");

	if(not p.CzyTak(nazwa))then return nazwa;end;
	
	local m_=(p.CzyTak(odstep_spacje) and "" or "_");
	nazwa=mw.ustring.gsub(nazwa,"^[%s"..m_.."]+","");
	nazwa=mw.ustring.gsub(nazwa,"[%s"..m_.."]+$","")
	if(p.CzyTak(czy))then
		nazwa,_=mw.ustring.gsub(nazwa,"[%s"..m_.."]+",(p.CzyTak(dolny_myslnik) and "_" or " "));
	end;
	return nazwa;
end;
function p.DodajElementDoZbioru(tabela,wartosc)
	if(wartosc==nil)then return; end;
	if(type(tabela)~="table")then return;end;
  	for _,element_tabeli in pairs(tabela)do
  		if(element_tabeli==wartosc)then
  			return false;
  		end;
  	end;
  	table.insert(tabela,wartosc);
  	return true;
end;
function p.CzyJestTakiElementNumerowanyTabeli(tabela,wartosc)
	if(wartosc==nil)then return;end;
	if(type(tabela)~="table")then return;end;
	for _, element_tabeli in ipairs(tabela)do
		if(element_tabeli==wartosc)then
			return true;
		end;
	end;
	return false;
end;
function p.CzyJestTakiElementNienazwanyTabeli(tabela,wartosc)
	if(wartosc==nil)then return;end;
	if(type(tabela)~="table")then return;end;
	for name,value in pairs(tabela)do
		if(type(name)=="number")then
			if(value==wartosc)then
				return true;
			end;
		end;
	end;
	return false;
end;
function p.CzyJestTakiKluczTabeli(tabela,klucz)
	if(klucz==nil)then return;end;
	if(type(tabela)~="table")then return;end;
	local wartosc=tabela[klucz];
	if(wartosc~=nil)then return true;end;
	return false;
end;
function p.CzyJestTakiElementTabeli(tabela,klucz,wartosc)
	if((klucz==nil)or(wartosc==nil))then return;end;
	if(type(tabela)~="table")then return;end;
	for __klucz, __wartosc in pairs(tabela)do
		if((__klucz==klucz)and(__wartosc==wartosc))then
			return true;
		end;
	end;
	return false;
end;
p["ŁączDwieTabele"] = function (tabelka1,tabelka2)
   local parametry_modul=require("Module:Parametry");
   return (tabelka2 and parametry_modul["CzySąElementyTablicy"](tabelka2))
                 and ((tabelka1 and parametry_modul["CzySąElementyTablicy"](tabelka1))
                 	         and parametry_modul["ŁączNumerowaneTabele"]{[1]=tabelka1,[2]=tabelka2,}
                 	                or tabelka2) 
                 	  or tabelka1;
end;
p["ŁączZbioryElementówNumerowanychDwóchTabel"]=function(tabelka1,tabelka2)
    local parametry_modul=require("Module:Parametry");
	return (tabelka1 and parametry_modul["CzySąElementyNumerowaneTablicy"](tabelka1))and ((tabelka2 and parametry_modul["CzySąElementyNumerowaneTablicy"](tabelka2))and parametry_modul["ŁączZbioryNumerowanychElementówNumerowanychTabel"]{[1]=tabelka1,[2]=tabelka2} or tabelka1) or tabelka2;
end;
p["ŁączZbioryElementówNienazwanychDwóchTabel"]=function(tabelka1,tabelka2)
    local parametry_modul=require("Module:Parametry");
	return (tabelka1 and parametry_modul["CzySąElementyNienazwaneTablicy"](tabelka1))and ((tabelka2 and parametry_modul["CzySąElementyNienazwaneTablicy"](tabelka2))and parametry_modul["ŁączZbioryNienazwanychElementówNumerowanychTabel"]{[1]=tabelka1,[2]=tabelka2} or tabelka1) or tabelka2;
end;
p["ŁączZbioryElementówNazwanychDwóchTabel"]=function(tabelka1,tabelka2)
    local parametry_modul=require("Module:Parametry");
	return (tabelka1 and parametry_modul["CzySąElementyNazwaneTablicy"](tabelka1))and ((tabelka2 and parametry_modul["CzySąElementyNazwaneTablicy"](tabelka2))and parametry_modul["ŁączZbioryNazwanychElementówNumerowanychTabel"]{[1]=tabelka1,[2]=tabelka2} or tabelka1) or tabelka2;
end;
p["ŁączZbioryNumerowanychElementówNienazwanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=true,["CzyPairsElementówTablic"]=false,CzyNazwaneElementyTabel=false,CzyTylkoNazwaneElementyTabel=false,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączZbioryNienazwanychElementówNienazwanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=true,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=false,CzyTylkoNazwaneElementyTabel=false,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączZbioryNazwanychElementówNienazwanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=true,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=true,CzyTylkoNazwaneElementyTabel=true,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączZbioryNumerowanychElementówNumerowanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=false,["CzyPairsElementówTablic"]=false,CzyNazwaneElementyTabel=false,CzyTylkoNazwaneElementyTabel=false,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączZbioryNienazwanychElementówNumerowanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=false,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=false,CzyTylkoNazwaneElementyTabel=false,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączZbioryNazwanychElementówNumerowanychTabel"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=false,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=true,CzyTylkoNazwaneElementyTabel=true,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączNumerowaneTabele"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=false,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=true,CzyTylkoNazwaneElementyTabel=false,NazwijElementyNumerowane=true,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączNienazwaneTabele"]=function(args)
	local parametry_modul=require("Module:Parametry");
	local args2={CzyPairsTablic=true,["CzyPairsElementówTablic"]=true,CzyNazwaneElementyTabel=true,CzyTylkoNazwaneElementyTabel=false,NazwijElementyNumerowane=true,};
	return parametry_modul["ŁączTabele"](args,args2);
end;
p["ŁączTabele"] = function(args,args2)
	local tabela={};
	local par1=(args2.CzyPairsTablic)and pairs or ipairs;
	local czy_number_nie_tylko_tablic=(not args2.CzyPairsTablic)and true or false;
	local par2=(args2["CzyPairsElementówTablic"])and pairs or ipairs;
	local czy_number_nie_tylko_elementow_tablic=(not args2["CzyPairsElementówTablic"])and true or false;
	local czy_nazwane=(args2.CzyNazwaneElementyTabel)and true or false;
	local czy_nie_tylko_nazwane=(not args2.CzyTylkoNazwaneElementyTabel)and true or false;
	local nazwij_elementy_numerowane=(args2.NazwijElementyNumerowane) and true or false;
	for licznik, args_tabeli in par1(args)do
		if(((czy_number_nie_tylko_tablic)or(type(licznik)=="number"))and(type(args_tabeli)=="table"))then
			for name,value in par2(args_tabeli)do
				if((czy_nie_tylko_nazwane)and((czy_number_nie_tylko_elementow_tablic)or(type(name)=="number")))then
					if(nazwij_elementy_numerowane)then
						if(not tabela[name])then tabela[name]=value;end;
					else
						table.insert(tabela,value);
					end;
				elseif((czy_nazwane)and(czy_nie_tylko_nazwane or ((not czy_nie_tylko_nazwane)and(type(name)~="number"))))then
					if(not tabela[name])then tabela[name]=value;end;
				end;
			end;
		end;
	end;
	return tabela;
end;
p["UsuńElementyTabeli"]=function(tabelka_1,tabelka_2)
	if(not tabelka_1)then return nil;end;
	if(not tabelka_2)then return tabelka_1;end;
	for name,_ in pairs(tabelka_1)do
		if(tabelka_2[name]~=nil)then 
			tabelka_1[name]=nil;
		end;
	end;
	return tabelka_1;
end;
p["TwórzTabelęBezElementówTabel"]=function(args)
	local tabela_poczatkowa=args[1];
	local tabela={};
	local lens=#args;
	for name,value in pairs(tabela_poczatkowa)do
		local yes=false;
		for i=2,lens,1 do
			if(args[i][name]~=nil)then
				yes=true;
				break;
			end;
		end;
		if(not yes)then
			tabela[name]=value;
		end;
	end;
	return tabela;
end;
function p.TypeTable(zmienna)
	return (type(zmienna)=="table");
end;
function p.TypeFunction(zmienna)
	return (type(zmienna)=="function");
end;
function p.TypeString(zmienna)
	return (type(zmienna)=="string");
end;
function p.TypeBoolean(zmienna)
	return (type(zmienna)=="boolean");
end;
function p.TypeNumber(zmienna)
	return (type(zmienna)=="number");
end;
function p.TypeNil(zmienna)
	return (type(zmienna)=="nil");
end;
local function CzyTakSilnik(args,funkcja)
	local parametry_modul=require("Module:Parametry");
	local parametr=p.CzyTak(args[2]) and require("Module:"..args[2])[args[1]] or args[1];
	local argsfun;
	if(p.CzyTak(args[2]))then
		for name,value in pairs(args)do
			local typen=(type(name)=="number");
			if(((typen)and((name~=1)and(name~=2)))or(not typen))then
				if(not argsfun)then argsfun={};end;
				argsfun[(typen and name>2) and (name-2) or name]=value;
			end;
		end;
	else
		parametr=tonumber(parametr) or parametr;
		if(type(parametr)=="string")then
			local parametr2=parametry_modul["Odstępy"](parametr);
			if(parametr2=="true")then 
				parametr=true;
			elseif(parametr2=="false")then
				parametr=false;
			elseif(parametr2=="nil")then
				parametr=nil;
			else
				parametr=tonumber(parametr2) or parametr;
			end;
		end;
	end;
	return (parametry_modul[funkcja]{[1]=parametr,[2]=argsfun,})and "tak" or nil;
end;
p["CzyTakCiąg"]=function(frame)
  local czy_table=p.TypeTable(frame);
  if((czy_table and (not frame.getParent)) or (not czy_table))then
  	 local PobierzParametr=p.PobierzParametr(frame);
     local ciag=PobierzParametr("ciąg") or PobierzParametr(1);
	 local parametry=PobierzParametr("parametry") or PobierzParametr(2);
   	 local parametry_modul=require("Module:Parametry");
	 return ciag and p.CzyTak{[1]=(p.TypeString(ciag) and parametry_modul["Odstępy"]{[1]=ciag,[2]="tak",} or ciag),[2]=parametry,} or false;
  else
  	 local args=p.PobierzArgsParametry(frame);
	 return CzyTakSilnik(args,"CzyTakCiąg");
  end;
end;
function p.CzyTak(...)
  local frame_parametry={...};
  local frame=(#frame_parametry>1)and frame_parametry or frame_parametry[1];
  local czy_table=p.TypeTable(frame);
  if((czy_table and (not frame.getParent)) or (not czy_table))then
	   local PobierzParametr=p.PobierzParametr(frame);
	   local zmiernna;local parametry;
	   if(czy_table)then
			local zmienna_temp=PobierzParametr("zmienna") or PobierzParametr(1);
			zmienna=zmienna_temp or frame;
			parametry=zmienna_temp and (PobierzParametr("parametry") or PobierzParametr(2)) or nil;
	   else
	   		zmienna=frame;
	   		parametry=nil;
	   end;
	   if(zmienna~=nil)then
			if(p.TypeString(zmienna))then
				if(zmienna~="")then
					return "tak";
				else	
					return nil;
				end;
			elseif(p.TypeNumber(zmienna))then
				if(zmienna~=0)then
					return "tak";
				else
					return nil;
				end;
			elseif(p.TypeBoolean(zmienna))then
				return (zmienna and "tak" or nil);
			elseif(p.TypeTable(zmienna))then
			    local parametry_modul=require("Module:Parametry");
				return (parametry_modul["CzySąElementyTablicy"](zmienna) and "tak" or nil);
			elseif(p.TypeFunction(zmienna))then
				return (zmienna(parametry) and "tak" or nil);
			else
				return nil;
			end;	
	  else
			return nil;
	  end;
  else
  	   local args=p.PobierzArgsParametry(frame);
	   return CzyTakSilnik(args,"CzyTak");
  end;
end;
function p.PobierzFrameEwentualnieParent(frame)
	return (frame.getParent and (p.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame);
end;
function p.PobierzArgsParametry(frame, czy_nie_tablica_jako_tablica)
	return frame and (p.TypeTable(frame) and (p.PobierzFrameEwentualnieParent(frame).args or frame) or ((czy_nie_tablica_jako_tablica)and {frame,} or frame)) or {};
end;
function p.PobierzParametr(frame,czy_frame_lub_parent,czy_frame)
	local __pobierz_parametr_table_args=nil;
	local __pobierz_parametr_nie_table_nie_args=nil;
	local __pobierz_parametr_parent_lub_frame=nil;
	local function PobierzParametrFrameLubParent(name)
		return frame.args[name or 1] or (((frame.getParent)and(frame:getParent())) and frame:getParent().args[name or 1] or nil);
	end;
	return function(name)
		if(__pobierz_parametr_table_args)then
			return __pobierz_parametr_table_args[name or 1],1;
		elseif(__pobierz_parametr_nie_table_nie_args)then
			return nil,0;
		elseif(__pobierz_parametr_parent_lub_frame)then
			return PobierzParametrFrameLubParent(name),2;
		end;
    	if(frame)then
			if(p.TypeTable(frame))then
				local tak_frame_lub_parent=p.CzyTak(czy_frame_lub_parent);
				if((not tak_frame_lub_parent)or(not frame.getParent))then
					local tak_frame=p.CzyTak(czy_frame);
	    			__pobierz_parametr_table_args=tak_frame and frame.args or p.PobierzArgsParametry(frame);
	    			return __pobierz_parametr_table_args[name or 1],1;
	    		elseif(tak_frame_lub_parent)then
	    	        __pobierz_parametr_parent_lub_frame=true;
	    	        return PobierzParametrFrameLubParent(name),2;
	    		end;
			else
				__pobierz_parametr_nie_table_nie_args=true;
				return frame,0;
			end;
		else
			return nil,0;
    	end;
	end;
end;
function p.And(frame)
	local czy="tak";
	local parametry_modul=require("Module:Parametry");
	for _,wartosc in ipairs(frame.args)do
		czy=czy and parametry_modul["CzyTakCiąg"](wartosc);
		if(not czy)then return nil;end;
	end;
	return czy and "tak" or nil;
end;
function p.Or(frame)
	local czy=nil;
	local parametry_modul=require("Module:Parametry");
	for _,wartosc in ipairs(frame.args)do
		czy=czy or parametry_modul["CzyTakCiąg"](wartosc);
		if(czy)then return "tak";end;
	end;
	return czy and "tak" or nil;
end;
function p.Not(frame)
	local parametry_modul=require("Module:Parametry");
	return (not parametry_modul["CzyTakCiąg"](frame.args[1]))and "tak" or nil;
end;
function p.Mniejszy(frame)
	local wyraz1=tonumber(frame.args[1]) or 0;
	local wyraz2=tonumber(frame.args[2]) or 0;
	if(wyraz1<wyraz2)then
		return "tak";
	end;
	return;
end;
function p.IlePodano(frame)
	local args=frame.args;
	local args2=frame:getParent().args;
	local licznik=0;
	for _,name in pairs(args)do
		if(args2[name])then
			licznik=licznik+1;
		end;
	end;
	return licznik;
end;
p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter={};
function p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter.__index(t,klucz)
  	local klucz=mw.getContentLanguage():lc(klucz);
  	klucz=p["Odstępy"]{[1]=klucz,[2]="tak",};
  	return rawget(t,klucz);
end;
function p.IteratorPoNumerowanychElementachTablicy(t)
	local i=1;
	return function()
		local v=t[i];
		if(v~=nil)then i=i+1;end;
		return v;
	end;
end;
function p.Max(frame)
	local parametr1=tonumber(frame.args[1]);
	local parametr2=tonumber(frame.args[2]);
	return math.max(parametr1,parametr2);
end;
function p.Min(frame)
	local parametr1=tonumber(frame.args[1]);
	local parametr2=tonumber(frame.args[2]);
	return math.min(parametr1,parametr2);
end;
return p;