Moduł:StronicowyParser/DalszeFunkcje2

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={};
--zamykanie
local znak_127=mw.ustring.char(127);
function p.ZamieniajSzablonyStart(self)
	 self.numer_szablonu=1;
end;
function p.ZamieniajSzablony(self,szablon1,szablon2,szablon3)
	local lewy=znak_127.."'\"`UNIQ--templatenamezamykaniepoczatkowe-"..self.numer_szablonu.."-QINU`\"'"..znak_127;
	local prawy=znak_127.."'\"`UNIQ--templatenamezamykaniekoncowe-"..self.numer_szablonu.."-QINU`\"'"..znak_127;
	local rownosc=znak_127.."'\"`UNIQ--templatenamerownosc-"..self.numer_szablonu.."-QINU`\"'"..znak_127;
	local pionowa=znak_127.."'\"`UNIQ--templatenamepionowa-"..self.numer_szablonu.."-QINU`\"'"..znak_127;
    local szablon2,_= mw.ustring.gsub(szablon2,"{{",lewy);
    local szablon2,_= mw.ustring.gsub(szablon2,"}}",prawy);
    local szablon2,_= mw.ustring.gsub(szablon2,"=",rownosc);
    local szablon2,_= mw.ustring.gsub(szablon2,"|",pionowa);
    self.numer_szablonu=self.numer_szablonu+1;
    return szablon1..szablon2..szablon3;
end;
function p.AnalizaSzablonu(numer_szablonu)
    local function LewyPrawyRownoscPionowa()
		local lewy=znak_127.."'\"`UNIQ--templatenamezamykaniepoczatkowe-"..numer_szablonu.."-QINU`\"'"..znak_127;
		local prawy=znak_127.."'\"`UNIQ--templatenamezamykaniekoncowe-"..numer_szablonu.."-QINU`\"'"..znak_127;
		local rownosc=znak_127.."'\"`UNIQ--templatenamerownosc-"..numer_szablonu.."-QINU`\"'"..znak_127;
		local pionowa=znak_127.."'\"`UNIQ--templatenamepionowa-"..numer_szablonu.."-QINU`\"'"..znak_127;
    	local zamykanie={
        	[lewy]="{{",
        	[prawy]="}}",
        	[rownosc]="=",
        	[pionowa]="|",
        };
        return zamykanie;
    end;
    return LewyPrawyRownoscPionowa();
end;
function p.OgolnyWzor(numer_szablonu)
	if(not numer_szablonu)then
		local wzor=znak_127.."'\"`UNIQ%-%-templatename%a+%-(%d+)%-QINU`\"'"..znak_127;
    	return wzor;
	end;
    local wzor=znak_127.."'\"`UNIQ%-%-templatename%a+%-"..numer_szablonu.."%-QINU`\"'"..znak_127;
    return wzor;
end;
function p.WzorRownosc(numer_szablonu)
    if(not numer_szablonu)then
    	local wzor=znak_127.."'\"`UNIQ%-%-templatenamerownosc%-(%d+)%-QINU`\"'"..znak_127;
    	return wzor;
    end;
    local wzor=znak_127.."'\"`UNIQ%-%-templatenamerownosc%-"..numer_szablonu.."%-QINU`\"'"..znak_127;
    return wzor;
end;
function p.WzorPionowa(numer_szablonu)
    if(not numer_szablonu)then
    	local wzor=znak_127.."'\"`UNIQ%-%-templatenamepionowa%-(%d+)%-QINU`\"'"..znak_127;
    	return wzor;
    end;
    local wzor=znak_127.."'\"`UNIQ%-%-templatenamepionowa%-"..numer_szablonu.."%-QINU`\"'"..znak_127;
    return wzor;
end;
function p.WzorSzablon(numer_szablonu,ktore)
    if(not numer_szablonu)then
    	if(not ktore)then
    		local wzor=znak_127.."'\"`UNIQ%-%-templatenamezamykaniepoczatkowe%-(%d+)%-QINU`\"'"..znak_127;
    		return wzor;
    	else
    		local wzor=znak_127.."'\"`UNIQ%-%-templatenamezamykaniekoncowe%-(%d+)%-QINU`\"'"..znak_127;
    		return wzor;  
    	end;
    end;
    if(not ktore)then
    	local wzor=znak_127.."'\"`UNIQ%-%-templatenamezamykaniepoczatkowepoczatkowe%-"..numer_szablonu.."%-QINU`\"'"..znak_127;
    	return wzor;
    else
     	local wzor=znak_127.."'\"`UNIQ%-%-templatenamezamykaniekoncowe%-"..numer_szablonu.."%-QINU`\"'"..znak_127;
    	return wzor;   		
    end;
end;
function p.MinMaxSzablon(zmienna)
    local numer_szablonu=1;
    local iterator=mw.ustring.gmatch(zmienna,p.WzorSzablon(nil,false));
    local __min=nil;
    local __max=0;
    for numer_zamykania in iterator do
    	numer_zamykania=tonumber(numer_zamykania) or 0;
    	if(not __min)then __min=numer_zamykania;else __min=math.min(__min,numer_zamykania) end;
    	__max=math.max(numer_zamykania,__max);
    end;
    return __min,__max;
end;
--koniec zamykanie
function p.LiczonyHNumer()
	local ulozenie=nil;
	local ostanie=0;
	return function(h_numer)
		if((ulozenie==nil)or(ulozenie>=h_numer))then
			ulozenie=h_numer-1;
        elseif(ostatnie+1<h_numer-ulozenie)then
                ulozenie=h_numer-ostatnie-1;
	    end;
    	ostatnie=h_numer-ulozenie;
    	h_numer=h_numer-ulozenie;
    	return h_numer;
	end;
end;
function p.PoziomAdresu(adres)
	local lens=#adres;
	local i=1;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
		end;
	end;
	return i;
end;
function p.NazwaNadStrony(adres,numer)
	if((numer)and(numer==1))then return nil;end;
	if((not numer)and(numer<1)or(numer~=math.floor(numer)))then return adres;end;
	local lens=#adres;
	local i=1;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
		end;
		if(i==numer)then
			return mw.ustring.sub(adres,1,p-1);
		end;
	end;
	return adres;
end;
function p.SubNazwaNadStrony(adres,numer,krok)
	if((not numer)or(numer<1)or(numer~=math.floor(numer)))then return adres;end;
	krok=krok or 1;
	if((krok<1)or(krok~=math.floor(krok)))then return adres;end;
	local lens=#adres;
	local i=1;
	local a=nil;local b=nil;
	for p=1, lens,1 do
		local znak=mw.ustring.sub(adres,p,p);
		if(znak=="/")then
			i=i+1;
			if(i==numer)then
				if(not a)then a=p+1;end;
			end;
			if(i==numer+krok)then 
				if(not b)then b=p-1;break;end;
			end;
		end;
	end;
	if(not a)then a=1;end;
	if(not b)then b=lens;end;
	return mw.ustring.sub(adres,a,b);
end;
function p.ParametryPudelkaKsiazki(self,frame)
  local nazwa_przestrzeni=self.args["nazwa przestrzeni nazw"];
  local nazwa_jednostki=self.args["nazwa jednostki"];
  if(((nazwa_przestrzeni)and(nazwa_jednostki))or((nazwa_przestrzeni)and(not nazwa_jednostki))or((not nazwa_przestrzeni)and(nazwa_jednostki)))then
		local pudelko_modul=require("Module:Pudełko");
		local nazwa_jednostki=pudelko_modul["Pełna nazwa jednostki 2"](frame);
		local nazwy_modul=require("Module:Nazwy");
		self.nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_jednostki);
		self.nazwa_ksiazki=nazwy_modul["NAZWAKSIĄŻKI"](nazwa_jednostki);
		self.nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](nazwa_jednostki);
  else
  	  local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
  	  self.nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
	  self.nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
	  self.nazwa_artykulu=tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
  end;
end;
function p.TabelaListyArtykulowKsiazki(self,frame)
  local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;	
  local lista_artykulow_w_ksiazkach_w_danej_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[self.nazwa_przestrzeni];
  if(not lista_artykulow_w_ksiazkach_w_danej_przestrzeni)then return nil;end;
  local tab_lista_artykulow_w_ksiazce=lista_artykulow_w_ksiazkach_w_danej_przestrzeni[self.nazwa_ksiazki];
  if(not tab_lista_artykulow_w_ksiazce)then return nil;end;
  return tab_lista_artykulow_w_ksiazce.spis;
end;
function p.AnalizujArgumentySzablonu(self,frame)
  local parametry_modul=require("Module:Parametry");
  self.args=frame and ((frame.getParent and ((parametry_modul.CzyTak(frame.args["wyspecjalizowana"]))and frame or frame:getParent()) or frame).args or frame) or {};
end;
function p.Args(self)
	return self.args;
end;
function p.PelnaNazwaKsiazki(self,frame)
   return ((self.nazwa_przestrzeni~="")and(self.nazwa_przestrzeni..":") or "")..self.nazwa_ksiazki;
end;
function p.NazwaArtykuluKsiazki(self,frame)
   return self.nazwa_artykulu;
end;
function p.ObliczeniaInformacje(self,frame)
  local stronicowyparser_dalszefunkcje2_modul=require("Module:StronicowyParser/DalszeFunkcje2");
  stronicowyparser_dalszefunkcje2_modul:AnalizujArgumentySzablonu(frame);
  stronicowyparser_dalszefunkcje2_modul:ParametryPudelkaKsiazki(frame);
  local tab_lista_artykulow_w_ksiazce=stronicowyparser_dalszefunkcje2_modul:TabelaListyArtykulowKsiazki(frame);
  if(not tab_lista_artykulow_w_ksiazce)then return nil;end;
  self.tab_artykul={};
  for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
	if(tab_lista[2])then
  		for _,artykul_w_bazie in ipairs(tab_lista[2])do
  			table.insert(self.tab_artykul,artykul_w_bazie[1]);
  		end;
  	end;
  end;
  self.len_tab_artykul=#self.tab_artykul;
  return true;
end;
function p.PomiedzyArtykul(self,frame)
  self.numer=tonumber(frame.args[1]) or 1;
  self.reszta=math.fmod(self.numer,self.len_tab_artykul-2)+1;
  return self.tab_artykul[self.reszta+1];
end;
function p.LosowyArtykul(self,frame)
	self.numer=tonumber(frame.args[1]) or 1;
	self.reszta=math.fmod(self.numer,self.len_tab_artykul)+1;
	return self.tab_artykul[self.reszta];
end;
function p.PobierzNazwaArtykul(self,frame)
	local numer=tonumber(self.args[1]) or 1;
	return self.tab_artykul[numer];
end;
function p.PobierzNumerArtykul(self,frame)
	local parametry_modul=require("Module:Parametry");
	local nazwa_artykul=parametry_modul["Odstępy"]{[1]=self.args[1],[2]="tak",};
	for name,value in pairs(self.tab_artykul)do
		if(type(value)=="table")then
			if(value[1]==nazwa_artykul)then
				return name;
			end;
		else
			if(value==nazwa_artykul)then
				return name;
			end;
		end;
	end;
	return nil;
end;
function p.AnalizaStronaSubst(tabela_listy_danych_analizy_ksiazki,pelnanazwastrony,TakFun,NieFun,FunRozdzial)
	local nazwy_modul=require("Module:Nazwy");
	local nazwa_przestrzeni;local nazwa_ksiazki;local nazwa_artykulu;
	if(tabela_listy_danych_analizy_ksiazki)then
		nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
		nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
		nazwa_artykulu=tabela_listy_danych_analizy_ksiazki.nazwa_artykulu;
	else
		nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"]{nazwa=pelnanazwastrony};
		nazwa_ksiazki=nazwy_modul["NAZWAKSIĄŻKI"]{nazwa=pelnanazwastrony};
		nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"]{nazwa=pelnanazwastrony};
	end;
	
	local tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki 
	                                              or mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
	local lista_artykulow_w_ksiazkach_w_danej_przestrzeni=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu[nazwa_przestrzeni];
	if(lista_artykulow_w_ksiazkach_w_danej_przestrzeni)then
		local tab_lista_artykulow_w_ksiazce_spis=lista_artykulow_w_ksiazkach_w_danej_przestrzeni[nazwa_ksiazki];
		if(tab_lista_artykulow_w_ksiazce_spis)then
			local tab_lista_artykulow_w_ksiazce=tab_lista_artykulow_w_ksiazce_spis.spis;
			if(tab_lista_artykulow_w_ksiazce)then
        		local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
				if((((nazwa_przestrzeni==nazwy_np_modul.Main)
  					or(nazwa_przestrzeni==nazwy_np_modul.Wikijunior))and(mw.ustring.match(nazwa_ksiazki,"^[^/]+")))
  						or(mw.ustring.match(nazwa_ksiazki,"^"..nazwy_np_modul.Wikibooks..":Brudnopis/[^/]+/[^/]+$"))
  							or(mw.ustring.match(nazwa_ksiazki,"^"..nazwy_np_modul.User..":[^/]+/[^/]+$")))then
                        		local ksiazka=mw.ustring.match(nazwa_ksiazki,"([^/]+)$");
                        		if((nazwa_artykulu~="Spis treści")and(nazwa_artykulu~="Bibliografia")and(nazwa_artykulu~="Licencja"))then
                        				if((ksiazka==nazwa_artykulu)or(nazwa_artykulu=="Wersja do druku"))then
                        						return TakFun(tab_lista_artykulow_w_ksiazce)
                        				else
                        					local function StronaRozdzial()
                        						for _,tab_lista in pairs(tab_lista_artykulow_w_ksiazce)do
     	                                			local rozdzial=tab_lista[1][1];
     	                                			if(rozdzial==nazwa_artykulu)then
     	                                    			return TakFun(frame);
     	                                			end;
                        						end;
 	                            	    		return;
                        					end;
                        					if(not FunRozdzial)then
                        		   				local val=StronaRozdzial();
                        		   				if(val)then return val;end;
                        					else
                        		   	    		local val=FunRozdzial(tab_lista_artykulow_w_ksiazce,nazwa_artykulu);
                        		   	    		if(not val)then return val;end;
                        					end;
                        				end;
                        		end;
                 end;
  			end;
		end;
	end;
  	return NieFun(nil);
end;
function p.TOCSilnik(lista_elementow_spisu_tresci, atrybuty)
        if(lista_elementow_spisu_tresci==nil)then return nil;end;
        local twor_listy="";
        local liczba_ulozenia_w_menu_spisu_tresci=lista_elementow_spisu_tresci[1][2];
        local poziom=1;
        local num={};
        for licznik, element_w_tablicy in ipairs(lista_elementow_spisu_tresci) do
        	if(licznik==1)then
        		   num[#num+1]=1;
                   twor_listy=(atrybuty and '<ul '..atrybuty..'>' or '<ul>')..'<li class=\"toclevel-1 tocsection-1\">'.."[["..element_w_tablicy[1][1].."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..element_w_tablicy[1][2].."</span>]]";
                else
                  if(element_w_tablicy[2]==liczba_ulozenia_w_menu_spisu_tresci)then
                  	   num[#num]=num[#num]+1;
                       twor_listy=twor_listy..'</li><li class="toclevel-'..poziom..' tocsection-'..licznik..'">'.."[["..element_w_tablicy[1][1].."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..element_w_tablicy[1][2].."</span>]]";
                  elseif(element_w_tablicy[2]>liczba_ulozenia_w_menu_spisu_tresci)then
                  	  num[#num+1]=1;
                  	  poziom=poziom+1;
                      twor_listy=twor_listy..'<ul><li class="toclevel-'..poziom..' tocsection-'..licznik..'">'.."[["..element_w_tablicy[1][1].."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..element_w_tablicy[1][2].."</span>]]";
                      liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  elseif(element_w_tablicy[2]<liczba_ulozenia_w_menu_spisu_tresci)then
                  	   local num_length=#num;
                  	   for i=num_length,num_length-liczba_ulozenia_w_menu_spisu_tresci+element_w_tablicy[2]+1,-1 do 
                  	   	   table.remove(num);
                  	   end;
                  	   num[#num]=num[#num]+1;
                  	   
                  	   local roznica_poziomow=liczba_ulozenia_w_menu_spisu_tresci-element_w_tablicy[2];
                  	   poziom=poziom-roznica_poziomow;
                  	   
                       twor_listy=twor_listy..mw.ustring.rep('</li></ul>',roznica_poziomow)..'</li><li class="toclevel-'..poziom..' tocsection-'..licznik..'">'
                                             .."[["..element_w_tablicy[1][1].."|<span class=\"tocnumber\">"..table.concat(num,".").."</span><span class=\"toctext\">"..element_w_tablicy[1][2].."</span>]]";
                       liczba_ulozenia_w_menu_spisu_tresci=element_w_tablicy[2];
                  end;
               end;	
        end;
        twor_listy=twor_listy..mw.ustring.rep('</li></ul>',liczba_ulozenia_w_menu_spisu_tresci);
        return twor_listy;
end;
function p.TOC(lista_elementow_spisu_tresci,toc_czy_tocramka)
	    local twor_listy=p.TOCSilnik(lista_elementow_spisu_tresci);
	    if(not toc_czy_tocramka)then
        	local parametry_modul=require("Module:Parametry");
        	local frame=mw.getCurrentFrame();
        	local args=frame.args;
        	local funkcja=args["funkcja"] or "UkrytaWikitabelowaListaMenu";
        	local wysokosc=parametry_modul.CzyTak(args["wysokość"]) and args["wysokość"]  or "700px";
        	local szerokosc=parametry_modul.CzyTak(args["szerokość"])and args["szerokość"]  or "100%";
        	local spis_tresci=parametry_modul.CzyTak(args["spis treści"])and args["spis treści"]  or "Spis treści";
        	twor_listy='<div class="toc_spis" style="width:'..szerokosc..';max-height:'..wysokosc..';overflow:auto;padding-right:5px;">'..twor_listy.."</div>";
        	local wikikod_menu='{{Tabela nawigacyjna|styl=width:100%|tytuł=<div style="text-align:left;font-size:1.1em;">'..spis_tresci..'</div>|spis='..twor_listy..'|funkcja='..funkcja..'}}';
        	local rozwiniety_wikikod=frame:preprocess(wikikod_menu);
	    	return rozwiniety_wikikod;
	    else
	    	return (twor_listy and ("\n=Spis treści=\n<div class=\"toc_spis\" style=\"margin-left:10px\">"..twor_listy.."</div>") or "");
	    end;
end;
function p.NumerObiektu(frame, nazwa_obiektu)
  local pf=frame:getParent();
  local parametry_modul=require("Module:Parametry");
  local uchwyt_obiektu=(frame.args["uchwyt"])and parametry_modul["Odstępy"](frame.args["uchwyt"]) or nil;
  local nazwa_strony;
  local html_modul=require("Module:Html");
  local nazwy_modul=require("Module:Nazwy");
  local ksiazkowe_modul=require("Module:Książkowe");
  local techniczne_modul=require("Module:Techniczne");
  local nazwa_przestrzeni;local nazwa_ksiazki;local nazwa_artykulu;
  
  nazwa_artykulu=frame.args["nazwa artykułu"];
  nazwa_ksiazki=frame.args["nazwa książki"];
  
  local tabela_listy_danych_analizy_ksiazki=mw.loadData("Module:StronicowyParser/informacje").tablica_zebranych_danych_ksiazkowych;
  
  local czy_aktualna_strona=nil;
  if((not nazwa_artykulu)and(not nazwa_ksiazki))then
  		czy_aktualna_strona=1;
  	    nazwa_strony="";
  elseif((nazwa_artykulu)and(not nazwa_ksiazki))then
  	  	czy_aktualna_strona=2;
  	  	nazwa_przestrzeni=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
  		nazwa_ksiazki=tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
  	    nazwa_artykulu=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](nazwa_artykulu);
  	    nazwa_artykulu,_=mw.ustring.gsub(nazwa_artykulu,"([_%s]+)"," ");
  	  	nazwa_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "");
  else
  		nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_ksiazki);
		nazwa_ksiazki=ksiazkowe_modul["NazwaKsiążki"](nazwa_ksiazki);
		nazwa_artykulu=html_modul["TransformacjaKoduZnakuDoZnakuŁancucha"](nazwa_artykulu);
		nazwa_artykulu,_=mw.ustring.gsub(nazwa_artykulu,"([_%s]+)"," ");
		
		nazwa_strony=((nazwa_przestrzeni~="") and (nazwa_przestrzeni..":") or "")..nazwa_ksiazki..((nazwa_artykulu~="") and ("/"..nazwa_artykulu) or "");
  end;
  local link = function(adres_linku,nazwa_linku,klasa,styl)
       local czy_klasa=parametry_modul.CzyTak(klasa);
       local czy_styl=parametry_modul.CzyTak(styl);
       if(czy_klasa or czy_styl)then
       		spanramka=mw.html.create('span');
       		if(czy_klasa)then spanramka:attr("class",klasa);end;
       		if(czy_styl)then spanramka:attr('style',styl);end;
       		spanramka:wikitext(nazwa_linku);
       		local kod_html=spanramka:allDone();
       		return "[["..adres_linku.."|"..tostring(kod_html).."]]";
       else
       		return "[["..adres_linku.."|"..nazwa_linku.."]]";
       end;
  end;
  local wzor = function(uchwyt,numeracja,styl_main,styl_odstepu,pole_odstepu,styl_wzoru,klasa_wzoru,wzor,opis,opis2,klasa_opisu,styl_opisu,styl_opisu_2,wzor_opisu,wzor_opisu_2,styl_alternatywy_opisu,styl_alternatywy_opisu_2,pozycja_numeracji,klasa_numeracji,styl_numeracji,bez_automatu)
  	   divramka=mw.html.create('div');
  	   local parametry_modul=require("Module:Parametry");
  	   local czy_pozycja_numeracji_prawa=parametry_modul.CzyTak(pozycja_numeracji);
  	   if(parametry_modul.CzyTak(uchwyt))then
  	   		if(parametry_modul.CzyTak(bez_automatu))then
  	   			divramka:attr('id',"wzór_"..uchwyt);
  	   		else
  	   			if(numeracja)then
  	   				divramka:attr('id',"wzór_"..numeracja);
  	   			else
  	   				divramka:attr('id',"wzór_"..uchwyt);
  	   			end;
  	   		end;
  	   end;
  	   if(parametry_modul.CzyTak(styl_main))then
  	   		divramka:attr('style',styl_main);
  	   end;
  	   local uchwyt_fun=function()
  			if(parametry_modul.CzyTak(uchwyt))then
  				local divuchwytramka=mw.html.create('div');
  				divuchwytramka:attr('class',klasa_numeracji);
  				divuchwytramka:attr('style',styl_numeracji);
  				if(parametry_modul.CzyTak(bez_automatu))then
  	   				divuchwytramka:wikitext('(',uchwyt..")");
  	   			else
  	   				if(numeracja)then
  	   					divuchwytramka:wikitext('('..numeracja..")");
  	   				else
  	   					divuchwytramka:wikitext("(Niedopasowany uchwyt: "..uchwyt..")");
  	   				end;
  				end;
     			divramka:node(divuchwytramka);
  			end;
  	   end;
  	   local pole_odstepu_fun=function()
  			divramka:addClass("wzory");
  			local divramka2=mw.html.create('div');
  			divramka2:attr('style',styl_odstepu);
  			divramka2:wikitext(pole_odstepu);
  			divramka:node(divramka2);
  	   end;
  	   local opis_fun=function(opis,styl_opisu,wzor_opisu,styl_alternatywy_opisu)
  	        if(parametry_modul.CzyTak(opis))then
  	   			local divramka5=mw.html.create('div')
  	   			divramka5:attr('class',klasa_opisu)
  	   			divramka5:attr('style',styl_opisu)
  	   			divramka5:wikitext(wzor_opisu)
  	   			divramka:node(divramka5)
  			else
  	   			local divramka5=mw.html.create('div');
  	   			divramka5:attr('style',styl_alternatywy_opisu);
  	   			divramka:node(divramka5)
  	        end;
  	   end;
  	   if(not czy_pozycja_numeracji_prawa)then
  	   	   uchwyt_fun();
  	   else
  	   	   pole_odstepu_fun();
  	   end;
  	   opis_fun(opis2,styl_opisu_2,wzor_opisu_2,styl_alternatywy_opisu_2);
  	   local divramka4=mw.html.create('div');
  	   divramka4:attr('class',klasa_wzoru);
  	   divramka4:attr('style',styl_wzoru);
  	   divramka4:wikitext(wzor);
  	   divramka:node(divramka4);
       opis_fun(opis,styl_opisu,wzor_opisu,styl_alternatywy_opisu);
  	   if(czy_pozycja_numeracji_prawa)then
  	   	    uchwyt_fun();
  	   else
  	   	    pole_odstepu_fun();
  	   end;
  	   return tostring(divramka:allDone());
  end;
  local rysunek=function(uchwyt,numeracja,opis, rysunek, pozycja,rozmiar,klasa,styl,bez_automatu)
  	local divramka=mw.html.create('div');
  	divramka:attr('class',klasa);
  	divramka:attr('style',styl);
  	local czy_uchwyt=parametry_modul.CzyTak(uchwyt);
  	if(czy_uchwyt)then
  		if(numeracja)then
  			if(parametry_modul.CzyTak(bez_automatu))then
  				divramka:attr('id',"rysunek_"..uchwyt);
  			else
  				divramka:attr('id',"rysunek_"..numeracja);
  			end;
  		else
  			divramka:attr('id',"rysunek_"..uchwyt);
  		end;
  	end;
  	local czy_opis=parametry_modul.CzyTak(opis);
  	local wywolanie_rysunku="[[File:"..((rysunek)and rysunek or "Przykładowy rysunek.svg").."|thumb|"..(pozycja or "right").."|"..(rozmiar or "200px")..((czy_uchwyt or czy_opis)and ("|"..((parametry_modul.CzyTak(uchwyt))and "(Rys. "..((numeracja)and (parametry_modul.CzyTak(bez_automatu) and uchwyt or numeracja) or "Niedopasowany uchwyt: "..uchwyt)..")" or "").." "..opis) or "").."]]";
  	divramka:wikitext(wywolanie_rysunku);
  	return tostring(divramka:allDone());
  end;
  local wypowiedzenie = function(uchwyt,przedrostek,numeracja,klasa,styl,przedrostek2,rodzaj,kogo,czego,jakie,styl_naglowka,styl_tekstu,tekst,bez_automatu)
  	local divramka=mw.html.create('div');
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			divramka:attr('id',przedrostek.."_"..uchwyt);
  		else
  			divramka:attr('id',przedrostek.."_"..numeracja);
  		end;
  	end;
  	divramka:attr('class',klasa);
  	divramka:attr('style',styl);
  	local wikitext="";
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			wikitext="("..przedrostek2.." "..uchwyt..")";
  		else
  			if(numeracja)then
  				wikitext="("..przedrostek2.." "..numeracja..")";
  			else
  				wikitext="("..przedrostek2.." Niedopawany uchwyt: "..uchwyt..")";
  			end;
  		end;
  	end;
  	if(parametry_modul.CzyTak(styl_naglowka))then
  		local spanramka=mw.html.create('span');
  		spanramka:attr('style',styl_naglowka);
  		spanramka:wikitext(rodzaj.." "..kogo.." "..czego.." "..jakie.." "..wikitext);
  		divramka:node(spanramka);
  	else
  		divramka:wikitext(rodzaj.." "..kogo.." "..czego.." "..jakie.." "..wikitext);
  	end;
  	divramka:wikitext('<BR>');
  	if(parametry_modul.CzyTak(styl_tekstu))then
  		local spanramka=mw.html.create('span');
  		spanramka:attr('style',styl_tekstu);
  		spanramka:wikitext(tekst);
  		divramka:node(spanramka);
  	else
  		divramka:wikitext(tekst);
  	end;
  	  	return tostring(divramka:allDone());
  end;
  local punkty = function(uchwyt,numeracja,przedrostek_id,klasa,styl,prefiks,bez_automatu)
  	local spanramka=mw.html.create('sup');
  	spanramka:attr('style',klasa);
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			spanramka:attr('id',przedrostek_id.."_"..uchwyt);
  		else
  			if(parametry_modul.CzyTak(numeracja))then
  				spanramka:attr('id',przedrostek_id.."_"..numeracja);
  			else
  				spanramka:attr('id',przedrostek_id.."_"..uchwyt);
  			end;
  		end;
  	end;
  	spanramka:attr('style',styl);
  	local smallramka=mw.html.create('small');
  	if(parametry_modul.CzyTak(uchwyt))then
  		if(parametry_modul.CzyTak(bez_automatu))then
  			smallramka:wikitext(prefiks..": "..uchwyt);
  		else
  			if(parametry_modul.CzyTak(numeracja))then
  				smallramka:wikitext('['..prefiks..": "..numeracja..']');
  			else
  				smallramka:wikitext('['..prefiks..": Niedopsowany uchwyt: "..uchwyt..']');
  			end;
  		end;
  	else
  		smallramka:wikitext('['..prefiks..": Niedopasowany uchwyt: brak uchwytu]");
  	end;
  	spanramka:node(smallramka);
  	return tostring(spanramka:allDone());
  end;
  local nazwa_strony_fun=function(nazwa_strony)
  	  if((tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni==nazwa_przestrzeni)
         and(tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki==nazwa_ksiazki)
      		and (tabela_listy_danych_analizy_ksiazki.nazwa_artykulu==nazwa_artykulu))then
      		  return "";
      end;
      return  nazwa_strony;
  end;
  if(parametry_modul.CzyTak(frame.args["bez automatu"]))then
  	  if(frame.args["obiekt"])then
  		if(frame.args["obiekt"]=="link")then
  			local nazwa_strony=nazwa_strony_fun(nazwa_strony);
  			if(uchwyt_obiektu)then
      	    	return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"]..uchwyt_obiektu,frame.args["klasa"],frame.args["styl"])..")";
      	    else
	            return "("..link(nazwa_strony.."#"..frame.args["id"].."_".."Nieznany uchwyt",frame.args["przedrostek"].."Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"),frame.args["klasa"],frame.args["styl"])..")";
  			end;
  		elseif(frame.args["obiekt"]=="wzór")then
      	    return wzor(uchwyt_obiektu,uchwyt_obiektu,frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="rysunek")then
    		return rysunek(uchwyt_obiektu,uchwyt_obiektu,frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="wypowiedzenie")then
			return wypowiedzenie(uchwyt_obiektu,frame.args["przedrostek id"],uchwyt_obiektu,frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);
  		elseif(frame.args["obiekt"]=="punkt")then
		  return punkty(uchwyt_obiektu,uchwyt_obiektu,frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
        else
        	return uchwyt_obiektu;
  		end;
    else
    	return uchwyt_obiektu;
    end;
  end;
  
  local tabela_listy_uchwytow_i_numeracji_na_stronie;
  if(czy_aktualna_strona==nil)then
		local dane_analizy_artykulu=tabela_listy_danych_analizy_ksiazki.dane_analizy_artykulu;
		if(dane_analizy_artykulu)then
			local tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni=dane_analizy_artykulu[nazwa_przestrzeni];
			if(tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni)then
				local tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce=tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazkach_w_danej_przestrzeni[nazwa_ksiazki];
				if(tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce)then
					local lista_artykolow=tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce.lista_artykolow;
					if(lista_artykolow)then
						local tabela_listy_analizy_na_stronie=lista_artykolow[nazwa_artykulu]
						if(tabela_listy_analizy_na_stronie)then
							tabela_listy_uchwytow_i_numeracji_na_stronie=tabela_listy_analizy_na_stronie.uchwyty_i_numeracje;
						end;
					end;
				end;
			end;
		end;
  elseif(czy_aktualna_strona==1)then
		tabela_listy_uchwytow_i_numeracji_na_stronie=tabela_listy_danych_analizy_ksiazki.tablica_aktualnego_artykolu;
  elseif(czy_aktualna_strona==2)then	
		tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce=tabela_listy_danych_analizy_ksiazki.tablica_aktualnej_ksiazki;
		if(tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce)then
			local lista_artykolow=tabela_listy_uchwytow_i_numeracji_obiektow_w_ksiazce.lista_artykolow;
			if(lista_artykolow)then
				local tabela_listy_analizy_na_stronie=lista_artykolow[nazwa_artykulu]
				if(tabela_listy_analizy_na_stronie)then
					tabela_listy_uchwytow_i_numeracji_na_stronie=tabela_listy_analizy_na_stronie.uchwyty_i_numeracje;
				end;
			end;
		end;
	end;
	if(tabela_listy_uchwytow_i_numeracji_na_stronie)then
  		local spis_uchwytow=tabela_listy_uchwytow_i_numeracji_na_stronie[nazwa_obiektu];
  		if(spis_uchwytow)then
  			if((uchwyt_obiektu)and(uchwyt_obiektu~=""))then
    			for _, dany_artykul in ipairs(spis_uchwytow)do
      				if(dany_artykul[1]==uchwyt_obiektu)then
      						if(nazwa_obiektu~="Nagłówkuj")then
      								if(frame.args["obiekt"])then
      										if(frame.args["obiekt"]=="link")then
      												local nazwa_strony=nazwa_strony_fun(nazwa_strony);
  					        						if(not dany_artykul[2])then 
  					        								return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"].."Niedopasowany uchwyt: "..uchwyt_obiektu,frame.args["klasa"],frame.args["styl"])..")";
  					        						end;
      					    						return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..dany_artykul[2],frame.args["przedrostek"]..dany_artykul[2],frame.args["klasa"],frame.args["styl"])..")";
      										elseif(frame.args["obiekt"]=="wzór")then
  					    				    		return wzor(uchwyt_obiektu,dany_artykul[2],frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
  					    					elseif(frame.args["obiekt"]=="rysunek")then
  					    								return rysunek(uchwyt_obiektu,dany_artykul[2],frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
  					    					elseif(frame.args["obiekt"]=="wypowiedzenie")then
														return wypowiedzenie(uchwyt_obiektu,frame.args["przedrostek id"],dany_artykul[2],frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);	
										    elseif(frame.args["obiekt"]=="punkt")then
														return punkty(uchwyt_obiektu,dany_artykul[2],frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
            								else
            											return ((dany_artykul[2])and dany_artykul[2] or "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"));
      										end;
			            			else
			            				return ((dany_artykul[2])and dany_artykul[2] or "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"));
			            			end;
            				else
            					if(dany_artykul[2])then
            							local tytul_szablonu=frame.args["nazwa szablonu"] or techniczne_modul.NazwaSzablonu(frame:getParent():getTitle());
            							if(tytul_szablonu=="LinkNagłówkuj")then
            									return link(dany_artykul[2][1],dany_artykul[2][2],frame.args["klasa"],frame.args["styl"])
            							elseif(tytul_szablonu=="LinkNagłówkujTutaj")then
                        	    				return link(dany_artykul[2][1],"tutaj",frame.args["klasa"],frame.args["styl"])
                        	    		end;
                        	    end;
            				end;
            		end;
        		end;
  			end;	
      end;
   end;
  if(frame.args["obiekt"])then
	if(frame.args["obiekt"]=="link")then
		local nazwa_strony=nazwa_strony_fun(nazwa_strony);
		return "("..link(nazwa_strony.."#"..frame.args["id"].."_"..uchwyt_obiektu,frame.args["przedrostek"].."Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu"),frame.args["klasa"],frame.args["styl"])..")";
	elseif(frame.args["obiekt"]=="wzór")then
  	     return wzor(uchwyt_obiektu,nil,frame.args["styl główny"],frame.args["styl odstępu"],frame.args["pole odstępu"],frame.args["styl wzoru"],frame.args["klasa wzoru"],frame.args["wzór"],frame.args["opis"],frame.args["opis 2"],frame.args["klasa opisu"],frame.args["styl opisu"],frame.args["styl opisu 2"],frame.args["wzór opisu"],frame.args["wzór opisu 2"],frame.args["styl alternatywy opisu"],frame.args["styl alternatywy opisu 2"],frame.args["pozycja numeracji"],frame.args["klasa numeracji"],frame.args["styl numeracji"],frame.args["bez automatu"]);
	elseif(frame.args["obiekt"]=="rysunek")then
  		return rysunek(uchwyt_obiektu,nil,frame.args["opis"],frame.args["rysunek"],frame.args["pozycja"],frame.args["rozmiar"],frame.args["klasa"],frame.args["styl"],frame.args["bez automatu"]);
    elseif(frame.args["obiekt"]=="wypowiedzenie")then
			return wypowiedzenie(uchwyt_obiektu,frame.args["przedrostek id"],nil,frame.args["klasa"],frame.args["styl"],frame.args["przedrostek numeracji"],frame.args["rodzaj"],frame.args["kogo"],frame.args["czego"],frame.args["jakie"],frame.args["styl nagłówka"],frame.args["styl tekstu"],frame.args["tekst"],frame.args["bez automatu"]);
	elseif(frame.args["obiekt"]=="punkt")then
		  return punkty(uchwyt_obiektu,nil,frame.args["przedrostek_id"],frame.args["klasa"],frame.args["styl"],frame.args["prefiks"],frame.args["bez automatu"]);
  	else
  		 return "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu");
  	end;
 else 					    				    
 	return "Niedopasowany uchwyt: "..((parametry_modul.CzyTak(uchwyt_obiektu))and uchwyt_obiektu or "brak uchwytu");
 end;
end;
return p;