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["ParsujWywołanieSzablonu"] = function(wywolanie_szablonu)
   local wywolanie_bez_parametrow=mw.ustring.match(wywolanie_szablonu,"^{{[^{}|]-}}$");
   if(not wywolanie_bez_parametrow)then 
   	  local parametry_szablonu={};
   	  parametry_szablonu[0]=mw.text.trim(mw.ustring.match(wywolanie_szablonu,"^{{%s*([^{}|]-)%s*|.-}}$"));
   	  if(parametry_szablonu[0])then
   	      return Parametry(wywolanie_szablonu,parametry_szablonu,"");
   	  else return nil;end;
   	else
   	  	local parametry_szablonu={};
   	  	parametry_szablonu[0]=mw.text.trim(mw.ustring.match(wywolanie_szablonu,"^{{%s*([^{}|]-)%s*}}$"));
   	  	if(parametry_szablonu[0])then
   	  	   return parametry_szablonu;
   	  	else return nil;end;
   end;
end;
function Parametry(wywolanie_szablonu, parametry_szablonu, tekst_do_rozwazania)
   if(parametry_szablonu)then
	local tekst_do_rozwazania2=mw.ustring.match(wywolanie_szablonu,"^{{[^{}|]-|"..tekst_do_rozwazania.."%s*([^{}|]-)%s*|.*}}$");
	if(tekst_do_rozwazania2)then
		if(tekst_do_rozwazania~="")then
		    parametry_szablonu=ZbierzParametry(parametry_szablonu, tekst_do_rozwazania2);
		    if(parametry_szablonu)then
		       return Parametry(wywolanie_szablonu,parametry_szablonu, tekst_do_rozwazania.."%s*[^{}|]-%s*|");
		    else
		       return nil;
		    end;
		else
		   parametry_szablonu=ZbierzParametry(parametry_szablonu, tekst_do_rozwazania2);
		   if(parametry_szablonu)then
		      return Parametry(wywolanie_szablonu,parametry_szablonu, "%s*[^{}|]-%s*|");
		   else
		   	  return nil;
		   end;
		end;
	end;
	tekst_do_rozwazania2=mw.ustring.match(wywolanie_szablonu,"^{{[^{}|]-|"..tekst_do_rozwazania.."%s*([^{}|]-)%s*}}$")
	if(tekst_do_rozwazania2)then
		   return ZbierzParametry(parametry_szablonu, tekst_do_rozwazania2);
	else
		return nil;
	end;
   end;
  return nil;
end;
function ZbierzParametry(tworzona_tabela, kawalek_wywolania)
   local kawalek_wywolania2=mw.ustring.match(kawalek_wywolania,"^%s*([^|{}=]-)%s*$");
   if(kawalek_wywolania2)then
	  tworzona_tabela[#tworzona_tabela+1]=mw.text.trim(kawalek_wywolania2);
	  return tworzona_tabela;
   else
	 local kawalek_wywolania21,kawalek_wywolania22=mw.ustring.match(kawalek_wywolania,"^%s*([^|{}=]-)%s*=%s*([^|{}]-)%s*$");
	 if((kawalek_wywolania21)and(kawalek_wywolania22))then
		for nazwa_elementu_tworzonej_tabeli, _ in pairs(tworzona_tabela) do
			if(type(nazwa_elementu_tworzonej_tabeli)=="string")then
		      if(nazwa_elementu_tworzonej_tabeli==kawalek_wywolania21)then return nil; end;
		    else
		    	local nazwa_elementu_tworzonej_tabeli=tworzona_tabela[tonumber(kawalek_wywolania21)];
		    	if(nazwa_elementu_tworzonej_tabeli)then return nil;end;
		    end;
		end;
		if(not mw.ustring.match(kawalek_wywolania21,"^%d+$"))then
		   tworzona_tabela[kawalek_wywolania21]=mw.text.trim(kawalek_wywolania22);
		   return tworzona_tabela;
		else
		   tworzona_tabela[tonumber(kawalek_wywolania21)]=mw.text.trim(kawalek_wywolania22);
		   return tworzona_tabela;
		end;
	 else
	 	return nil;
     end;
   end;
 return nil;
end;
p["PokażSzablon"]=function(szablon, args)
	local result = {}
	local flags = {}
	table.insert(result, mw.text.nowiki("{{"))
	if mw.isSubsting() then
		table.insert(result, "subst:")
	end
	
	table.insert(result, szablon);

	if args then
		for k, v in pairs(args) do
			if (type(k)~="number")then
				table.insert(result, "|")
				table.insert(result, tostring(k))
				table.insert(result, "=")
				table.insert(result, mw.text.nowiki(v))
			else
				table.insert(result, "|")
				table.insert(result, mw.text.nowiki(v))
			end
		end
	end

	table.insert(result, mw.text.nowiki("}}"))
	return table.concat(result)
end;
function p.NazwaSzablonu(nazwa)
    local nazwy_modul=require("Module:Nazwy");
	local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa);
	local nazwy_np_modul=mw.loadData("Module:Nazwy/Np")
	if(nazwa_przestrzeni==nazwy_np_modul.Template)then
	   return nazwy_modul["NAZWASTRONY"](nazwa);
	elseif(nazwa_przestrzeni==nazwy_np_modul.Main)then
		return ":"..nazwa;
	else
		return nazwa;
	end;
end;
p["Pierwszy niepusty"]= function(frame)
	local parametry_modul=require("Module:Parametry");
	local args=frame and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or {};
	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 czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame)or nil;
	local pelna_nazwa_strony=czy and (args["nazwa"] or args[1]) or (not czy and frame);
	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_strony0=nazwy_modul["PEŁNANAZWASTRONY"](zawartosc_komunikatu);
	local pelna_nazwa_strony2=pelna_nazwa_strony and nazwy_modul["PEŁNANAZWASTRONY"](pelna_nazwa_strony) or nazwy_modul["PEŁNANAZWASTRONY"]();
	local patternopis=mw.ustring.gsub(pelna_nazwa_strony0,"%$1",".-");
	if(not mw.ustring.match(pelna_nazwa_strony2,"^"..patternopis.."$"))then
		local nazwa_strony=nazwy_modul["NAZWASTRONY"](pelna_nazwa_strony2);
		local przetworzona_nazwa_strony,_=mw.ustring.gsub(nazwa_strony,"(%%)","%%%%");
		przetworzona_nazwa_strony,_=mw.ustring.gsub(przetworzona_nazwa_strony,"/%s*$","");
		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_strony2;
	end;
end;
p["WzórDanejPrzestrzeniNazw"] = function (frame)
	local parametry_modul=require("Module:Parametry");
	local czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or nil;
	local nazwa=czy and (args["nazwa"] or args[1]) or (not czy and frame);
	
	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_]+");
	return wzor;
end;
p["CzyIstniejeDanaPrzestrzeńNazw"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or nil;
	local nazwa_przestrzeni_nazw_lub_jego_identyfikator=czy and (args["nazwa"] or args[1]) or (not czy and frame);
	
	local uchwyt_przestrzeni_nazw;
	if(mw.ustring.match(nazwa_przestrzeni_nazw_lub_jego_identyfikator,"^%s*[%+%-]?%d+%s*$"))then
		local identyfikator,_=mw.ustring.match(nazwa_przestrzeni_nazw_lub_jego_identyfikator,"^%s*([%+%-]?%d+)%s*$");
		uchwyt_przestrzeni_nazw=mw.site.namespaces[tonumber(mw.text.trim(identyfikator))];
	else
	    uchwyt_przestrzeni_nazw=mw.site.namespaces[nazwa_przestrzeni_nazw_lub_jego_identyfikator];
	end;
	if(uchwyt_przestrzeni_nazw)then
		return "tak";
	else
		return;
	end;
end;
p["WzórNazwyStrony"] = function(frame)
	local parametry_modul=require("Module:Parametry");
	local czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or nil;
	local strona=czy and (args["nazwa"] or args[1]) or (not czy and frame);
	local wzor,_=mw.ustring.gsub(strona,"^(.)",function(s)return "["..mw.ustring.upper(s)..mw.ustring.lower(s).."]";end);
	wzor,_=mw.ustring.gsub(wzor,"[%s_]+","[%%s_]+");
	return wzor;
end;
function p.PoliczZbiory(frame)
	local parametry_modul=require("Module:Parametry");
	local czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or nil;
	args=czy and args or ((not czy and frame~=nil)and {frame,} or {});

	local liczba_istniejacych_zbiorow=0;
	local tabela_uchwytow_stron={};
	for _,nazwa_strony in ipairs(args) do
	   local uchwyt_strony = mw.title.makeTitle('',nazwa_strony);
	   tabela_uchwytow_stron[#tabela_uchwytow_stron+1]=uchwyt_strony;
	   if(((uchwyt_strony~=nil)and(uchwyt_strony.exists)))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["UrlBezProtokołu"]=function(url)
   return mw.ustring.gsub(url,"^(%a+:)(//)","%2");
end;
p["WyświetlajKodySpecjalne"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local czy=(type(frame)=="table");
	local args=czy and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or nil;
	local techniczne_modul=require("Module:Techniczne");
	local text=czy and (args["nazwa"] or args[1]) or (not czy and frame);
    
	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 przestrzen;local nazwa;
	if (type(frame)=="table") then
		local args=frame and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or {};
		przestrzen=args["miano przestrzeni nazw"] or args["przestrzeń"] or "Template";
		nazwa=args["nazwa strony"] or args["nazwa"] or args[1];
	elseif(frame)then
		przestrzen="Template";
		nazwa=frame;
	else
		return;
	end;
	local title=mw.title.makeTitle(przestrzen,nazwa);
	if((not title)or (not title.exists))then return;end;
	local text=title:getContent();
	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 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);
	
	local nko=html_modul.KodHTMLZnaku("{");
	local nkz=html_modul.KodHTMLZnaku("}");
	local k=html_modul.KodHTMLZnaku("|");
	local r=html_modul.KodHTMLZnaku("=");
	local s=1;
	repeat
		repeat
			text=mw.ustring.gsub(text,"{{{([^{}|]+)|([^{}]*)}}}",nko..nko..nko.."%1"..k.."%2"..nkz..nkz..nkz);
			text=mw.ustring.gsub(text,"{{{([^{}|]+)}}}",nko..nko..nko.."%1"..nkz..nkz..nkz);
		until not(mw.ustring.match(text,"{{{([^{}|]+)|([^{}]*)}}}") or mw.ustring.match(text,"{{{([^{}|]+)}}}"));
		text=mw.ustring.gsub(text,"{{([^{}]+)}}","&#@p"..s..";%1&#@k"..s..";");
		repeat
			text=mw.ustring.gsub(text,"&#@p"..s..";([^|]-)|(.-)&#@k"..s..";","&#@p"..s..";%1&#@s"..s..";%2&#@k"..s..";");
		until not mw.ustring.match(text,"&#@p"..s..";([^|]-)|(.-)&#@k"..s..";");
		s=s+1;
	until not (mw.ustring.match(text,"{{[^{}]+}}") or (mw.ustring.match(text,"{{{([^{}|]+)|([^{}]*)}}}") or mw.ustring.match(text,"{{{([^{}|]+)}}}")));
	
	for w=1,s-1,1 do
		repeat
			text=mw.ustring.gsub(text,"(&#@p"..w..";[^#{}|].-)&#@s"..w..";(.-".."&#@k"..w..";)","%1|%2");
		until not mw.ustring.match(text,"(&#@p"..w..";[^#{}|].-)&#@s"..w..";(.-".."&#@k"..w..";)");
		text=mw.ustring.gsub(text,"&#@p"..w..";([^#{}|].-)".."&#@k"..w..";","{{s|%1}}");
		
		repeat
			text=mw.ustring.gsub(text,"(&#@p"..w..";#invoke:.-)&#@s"..w..";(.-".."&#@k"..w..";)","%1|%2");
		until not mw.ustring.match(text,"(&#@p"..w..";#invoke:.-)&#@s"..w..";(.-".."&#@k"..w..";)");
		text=mw.ustring.gsub(text,"&#@p"..w..";#invoke:(.-)".."&#@k"..w..";","{{m|%1}}");
		
		repeat
			text=mw.ustring.gsub(text,"(&#@p"..w..";#%w+:.-)&#@s"..s..";(.-".."&#@k"..w..";)","%1"..k.."%2");
		until not mw.ustring.match(text,"(&#@p"..w..";#%w+:.-)&#@s"..s..";(.-".."&#@k"..w..";)")
		text=mw.ustring.gsub(text,"&#@p"..w..";(#%w+:.-)".."&#@k"..w..";",nko..nko.."%1"..nkz..nkz);
	end;
	text=mw.ustring.gsub(text,"=",r)
	local mniejszy=html_modul.KodHTMLZnaku("<");
	local wiekszy=html_modul.KodHTMLZnaku(">");
	text=mw.ustring.gsub(text,"<",mniejszy);
	text=mw.ustring.gsub(text,">",wiekszy)
	
	local kwaratowy_lewy=html_modul.KodHTMLZnaku("[");
	local kwadratowy_prawy=html_modul.KodHTMLZnaku("]");
	local kreska_pionowa=html_modul.KodHTMLZnaku("|");
	text=mw.ustring.gsub(text,"%[%[([^%[%]|]*)|([^%[%]]*)%]%]",kwaratowy_lewy..kwaratowy_lewy.."%1"..kreska_pionowa.."%2"..kwadratowy_prawy..kwadratowy_prawy);
	text=mw.ustring.gsub(text,"%[%[([^%[%]|]*)%]%]",kwaratowy_lewy..kwaratowy_lewy.."%1"..kwadratowy_prawy..kwadratowy_prawy);
	
	text=mw.ustring.gsub(text,"\n#","\n"..hash);
	text=mw.ustring.gsub(text,"^#",hash);
	
	text=frame:getParent():preprocess(text);
	return text;
end;
p["WikikodStrony"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local przestrzen;local nazwa;
	if (type(frame)=="table") then
		local args=frame and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or {};
		przestrzen=args["miano przestrzeni nazw"] or args["przestrzeń"] or "Template";
		nazwa=args["nazwa strony"] or args["nazwa"] or args[1];
	elseif(frame)then
		przestrzen="Template";
		nazwa=frame;
	else
		return;
	end;
	local title=mw.title.makeTitle(przestrzen,nazwa);
	if((not title)or (not title.exists))then return;end;
	local text=title:getContent();
	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;
p["RozwiniętyWikikodStrony"]=function (frame)
    local parametry_modul=require("Module:Parametry");
    local czy=(type(frame)=="table");
    local czy_wyspecjalizowana=(czy and frame.args) and parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) or false;
	local przestrzen;local nazwa;local args;
	if czy then
		args=frame and ((frame.getParent and (czy_wyspecjalizowana and frame or frame:getParent()) or frame).args or frame) or nil;
		przestrzen=args["Miano przestrzeni nazw"] or args["Przestrzeń"] or "Template";
		nazwa=args["Nazwa strony"] or args["Nazwa"];
	elseif(frame)then
		przestrzen="Template";
		nazwa=frame;
	else
		return;
	end;
	local title=mw.title.makeTitle(przestrzen,nazwa);
	if((not title)or (not title.exists))then return;end;
	local text=title:getContent();
	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,};
	if czy_wyspecjalizowana then
		bezkluczy["wyspecjalizowana"]=true;
		bezkluczy["nie rozwiń"]=true;
	end;
	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};
	local czy2=(czy and frame.args);
	text=(czy2 and (not parametry_modul.CzyTak(frame.args["nie rozwiń"])) or (not czy2 and true)) and frame2:preprocess(text) or text;
	return text;
end;
function p.NowaLinia(frame)
	return "\n";
end;
function p.Nowiki(frame)
	local tekst;
	if (type(frame)=="table") then
		local parametry_modul=require("Module:Parametry");
		local args=frame and ((frame.getParent and (parametry_modul.CzyTak(frame.args["wyspecjalizowana"]) and frame or frame:getParent()) or frame).args or frame) or {};
		tekst=args["tekst"] or args[1];
	else
		tekst=frame;
	end;
	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);
    tekst="<nowiki>"..tekst.."</nowiki>";
    local ramka_modul=require("Module:Ramka");
    local frame2=frame:getParent():newChild{args={[1]=tekst,}}
    tekst=ramka_modul["Rozwiń"](frame2);
	return tekst;
end;
return p;