Moduł:StronicowyParser/StronaSubst

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.LiczOperacjeStronZbiorczych=function(glowna_tablica,tekst_rozwiniety_calego_artykulu)
    local nazwy_modul=require("Module:Nazwy");
        		
    local toc_nowe={};
    local tab_powtarzane={};
    local function Powtarzane(rozdzial)
    	local b=1;
    	for i=1,#tab_powtarzane,1 do
    		if(tab_powtarzane[i]==rozdzial)then
    			b=b+1;
    		end;
    	end;
    	tab_powtarzane[#tab_powtarzane+1]=rozdzial;
    	return b;
    end;
    			
	local AnalizaStronZbiorczych=function()
		local function CzyStronaSubst()
  			if(not glowna_tablica.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"])then
  				glowna_tablica.tabela_listy_danych_analizy_ksiazki["CzyStronaSubst"]="tak";
  			end;
  		end;
		local function StronaSubstParametr(tab_strona,link,p,postep)
  	    	local strona;local id;
	  	    if(type(tab_strona)=="table")then strona=tab_strona[2];id=tab_strona[1];else strona=tab_strona;end;
  	    	local naglowek_strony;
  	    	local artykul;
  	    	local ile=0;
  	    	if(id)then
  	    		strona,_=mw.ustring.gsub(strona,"<[^<>]*>","");
  	    		--strona,_=mw.ustring.gsub(strona,"'+","");
  	    		naglowek_strony,ile=mw.ustring.gsub(id,"^([^#]*)#(.*)$","%2");
  	    		--artykul,_=id.gsub(id,"^([^#]*)#(.*)$","%1#"..strona);
  	    	else
  	    		naglowek_strony,ile=mw.ustring.gsub(strona,"^([^#]*)#(.*)$","%2");
  	    		--artykul=strona;
  	    	end;
			local str="<div style=\"display:block;\" class=\"rozdział_książki\">\n";
			local parametry_modul=require("Module:Parametry");
			local czy_link=parametry_modul.CzyTak(link);
				
			local nazwa_przestrzeni;local nazwa_ksiazki;
			if(glowna_tablica.tabela_listy_danych_analizy_ksiazki.zastepczy)then
				nazwa_przestrzeni=glowna_tablica.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni;
				nazwa_ksiazki=glowna_tablica.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki;
			else
				nazwa_przestrzeni=glowna_tablica.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
				nazwa_ksiazki=glowna_tablica.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
			end;
			local adres=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":")  or "")..nazwa_ksiazki.."/"..(id and id or strona);
			p=p or 1;
			p=(p<1)and 1 or p;
			p=(p<=6)and p or 6;
			if(not czy_link)then
				local kotwica="";
				if(id)then
					id,_=mw.ustring.gsub(id,"^[%s_]*","");
					id,_=mw.ustring.gsub(id,"[%s_]*$","");						
					id,_=mw.ustring.gsub(id,"[%s_]+","_");	
					kotwica="<span id=\""..id.."\"></span>";
				end;
				str=str..mw.ustring.rep("=",p)..kotwica..((ile==0) and mw.ustring.match(naglowek_strony,"/([^/]+)$") or naglowek_strony)..mw.ustring.rep("=",p).."\n";
			else
				local linki_modul=require("Module:Linki");
	        	local str_link=linki_modul["Link wewnętrzny"]{
	            	    ["strona"]=adres,
	            		["nazwa"]=((ile==0) and mw.ustring.match(naglowek_strony,"/([^/]+)$") or naglowek_strony),
	        	};
	        	local kotwica="";
	        	if(id)then
					id,_=mw.ustring.gsub(id,"^[%s_]*","");
					id,_=mw.ustring.gsub(id,"[%s_]*$","");						
					id,_=mw.ustring.gsub(id,"[%s_]+","_");	
					kotwica="<span id=\""..id.."\"></span>";
				end;
				str=str..mw.ustring.rep("=",p)..kotwica..str_link..mw.ustring.rep("=",p).."\n";
			end;
			if(postep)then
				str=str.."<div class=\"postęp_ładowania_artykułu\"><div class=\"pasek_postępu\"></div> <span style=\"color:blue\">Ładuję artykuł...</span></div>";
			end;
			str=str.."<div class=\"strona_subst\" style=\"display:"..((not postep)and "block" or "none")..";\">"..((not czy_link) and (adres) or "").."</div>\n";
			str=str.."</div>";
			return str;
		end;
  		local function StronaSubst(ciag)
	  		local techniczne_modul=require("Module:Techniczne");
			local parametry_modul=require("Module:Parametry");
			
    	    local parametry_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](ciag);
        	local postep=parametry_modul.CzyTak(parametry_szablonu["postęp"]);
	        local strona=parametry_szablonu[1];
    	    local link=parametry_szablonu["link"];
        	local parametry_modul=require("Module:Parametry");
	        local czy_link=parametry_modul.CzyTak(link);
    	    if(glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"] 
        	      and glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona]
	        	       and glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")]
    		)then 
        	   return glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")];
    		end;
    	
    		local naglowek=mw.ustring.match(strona,"/([^/]*)$") or strona;
	  								--end;
	  		local liczba_powtarzanego=Powtarzane(naglowek);
	  						
			table.insert(toc_nowe,{{"#"..mw.ustring.gsub(naglowek,"[%s_]+","_")..((liczba_powtarzanego>1) and ("_"..liczba_powtarzanego) or ""), naglowek,},1,})
			
        	local str=StronaSubstParametr(strona,link,nil,postep);
        	if(not glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"])then
            	   glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"]={};
        	end;
        	if(not glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona])then
            	    glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona]={};
        	end;
        	glowna_tablica.tabela_listy_danych_analizy_ksiazki["StronaSubst"][strona][(czy_link and "tak" or "")]=str;
        	return str;
  		end;
  		function AnalizujArtykulyRozdzialu(tab_lista_artykulow_w_ksiazce,substrona)
	  	   local parametry_modul=require("Module:Parametry");
  		   local html_modul=require("Module:Html");
  		   local tablica_stron={};
  		   for _,tab_lista in ipairs(tab_lista_artykulow_w_ksiazce)do
				local rozdzial=tab_lista[1][1];
				if(substrona==rozdzial)then
					local function KsiazkaRozdzialSubst(ciag)
						local techniczne_modul=require("Module:Techniczne");
	  	    			local parametry_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](ciag);
  		    			if(parametry_szablonu[0]~="KsiążkaSubst")then return ciag;end;
  	    				local naglowki=parametry_modul.CzyTak(parametry_szablonu["nagłówki"]);
  	    				local postep=parametry_modul.CzyTak(parametry_szablonu["postęp"]);
  	    					
						if(tab_lista[2])then
							local wikikod="";
  							for _,strona in ipairs(tab_lista[2])do
	  							local PobierzParametr=parametry_modul.PobierzParametr(strona[1]);
  								local nazwa_strony=PobierzParametr(1);
								nazwa_strony=html_modul["NazwaStronyAdresu"](nazwa_strony);
  								if(naglowki or not tablica_stron[nazwa_strony])then
  									if(not naglowki)then
  										  tablica_stron[nazwa_strony]=true;
  									end;
  							    
  							      	local naglowek;
	  								--if(mw.ustring.match(nazwa_strony,"^[^#]*#(.*)$"))then 
	  								--	naglowek=mw.ustring.gsub(nazwa_strony,"^[^#]*#(.*)$","%1");
	  								--else
	  									naglowek=mw.ustring.match(nazwa_strony,"/([^/]*)$") or nazwa_strony;
	  								--end;
	  								local liczba_powtarzanego=Powtarzane(naglowek);
	  						
									table.insert(toc_nowe,{{"#"..mw.ustring.gsub(rozdzial,"[%s_]+","_")..((liczba_powtarzanego>1) and ("_"..liczba_powtarzanego) or ""), naglowek,},1,})
  							    
  							    
  									wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(strona[1],nil,nil,postep);
	  							end;
  							end;
  							glowna_tablica.tabela_listy_danych_analizy_ksiazki["KsiążkaSubst"]=wikikod;
  							return wikikod;
						end;
  						return "";
					end;
					tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*StronaSubst%s*|[^{}]+}})",StronaSubst);
  					tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*[Kk]siążkaSubst%s*|[^{}]*}})",KsiazkaRozdzialSubst);
  					tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*[Kk]siążkaSubst%s*}})",KsiazkaRozdzialSubst);
  					CzyStronaSubst();
                	break;       
  				end;
  			end;
  		end;
  		function AnalizujKsiazka(tab_lista_artykulow_w_ksiazce)
  			local function KsiazkaCalaSubst(ciag)
  	    		local techniczne_modul=require("Module:Techniczne");
				local parametry_modul=require("Module:Parametry");
	  	    	local parametry_szablonu=techniczne_modul["ParsujWywołanieSzablonu"](ciag);
  		    	if(parametry_szablonu[0]~="KsiążkaSubst")then return ciag;end;
  	    		local naglowki=parametry_modul.CzyTak(parametry_szablonu["nagłówki"]);
  	    		local sekcje=parametry_modul.CzyTak(parametry_szablonu["sekcje"]);
	  	    	local postep=parametry_modul.CzyTak(parametry_szablonu["postęp"]);
	  	    	
	  	    	local nazwa_przestrzeni;local nazwa_ksiazki;
				if(glowna_tablica.tabela_listy_danych_analizy_ksiazki.zastepczy)then
					nazwa_przestrzeni=glowna_tablica.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_przestrzeni;
					nazwa_ksiazki=glowna_tablica.tabela_listy_danych_analizy_ksiazki.normalna_nazwa_ksiazki;
				else
					nazwa_przestrzeni=glowna_tablica.tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
					nazwa_ksiazki=glowna_tablica.tabela_listy_danych_analizy_ksiazki.nazwa_ksiazki;
				end;
	  	    	
    			local wikikod="<div id=\"klasa_książki\">";
    			local delta_m=0;
    			local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
	    		local HNumer=stronicowyparser_potrzebne_modul.LiczonyHNumer();
    			local parametry_modul=require("Module:Parametry");
    			local tablica_stron={};
    			local naglowki_ostatnie=nil;
    			local stronicowyparser_dalszefunkcje_modul=require("Module:StronicowyParser/DalszeFunkcje");
	     	    for _,tab_lista in pairs(tab_lista_artykulow_w_ksiazce)do
    	 	         local rozdzial=tab_lista[1][1];
     		         wikikod=wikikod.."<div class=\"klasa_naglowka klasa_nagłówka\">";
     	    	     local m=tab_lista[1][2][1];
					 if((rozdzial)and(type(rozdzial)=="string")and(rozdzial~="")and(rozdzial~="Spis treści")and(rozdzial~="Bibliografia")and(rozdzial~="Zobacz też")and(rozdzial~="Inne")and(rozdzial~="Licencja")
					)then
     	        		 local m_uzyskane=HNumer(m);
						 wikikod=((wikikod~="")and (wikikod.."\n") or "").."\n"..mw.ustring.rep("=",m_uzyskane)..rozdzial..mw.ustring.rep("=",m_uzyskane).."\n";
						 
						 local liczba_powtarzanego=Powtarzane(rozdzial);
						 table.insert(toc_nowe,{{"#"..mw.ustring.gsub(rozdzial,"[%s_]+","_")..((liczba_powtarzanego>1) and ("_"..liczba_powtarzanego) or ""), rozdzial,},m_uzyskane,})
					end;
					if(tab_lista[2])then
  						for _,strona in ipairs(tab_lista[2])do
  							local roznica=(strona[2][1]>0)and strona[2][1] or 0;
	  						local m_roznica=m+roznica;
  							local m_uzyskane=HNumer(m_roznica);
  							local PobierzParametr=parametry_modul.PobierzParametr(strona[1]);
  							local nazwa_strony_parametr=PobierzParametr(1);
  							
  							local nazwa_strony,_=mw.ustring.gsub(nazwa_strony_parametr,"^([^#]*)(#.*)$","%1");
  							
  							local naglowek;
	  						if(mw.ustring.match(nazwa_strony_parametr,"^[^#]*#(.*)$"))then 
	  							naglowek=mw.ustring.gsub(nazwa_strony_parametr,"^[^#]*#(.*)$","%1");
	  						else
	  							naglowek=mw.ustring.match(nazwa_strony_parametr,"/([^/]*)$") or nazwa_strony_parametr;
	  						end;
	  						local liczba_powtarzanego=Powtarzane(naglowek);
	  						
							table.insert(toc_nowe,{{"#"..mw.ustring.gsub(naglowek,"[%s_]+","_")..((liczba_powtarzanego>1) and ("_"..liczba_powtarzanego) or ""), naglowek,},m_uzyskane,})
  							
  							if((naglowki or (not tablica_stron[nazwa_strony]))and(not sekcje))then
  								if(not naglowki)then
  										tablica_stron[nazwa_strony]=true;
	  							end;
	  							
  					        	wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(strona[1],nil,m_uzyskane,postep);
  					        	
  							elseif((sekcje)and(not tablica_stron[nazwa_strony]))then
  				        		tablica_stron[nazwa_strony]=true;
  			    	    		wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(strona[1],nil,m_uzyskane);
  			        			local nazwa_modolu=((nazwa_przestrzeni~="")and (nazwa_przestrzeni..":") or "")..nazwa_ksiazki.."/"..nazwa_strony;
  			        			local tekst_rozwiniety_calego_artykulu=stronicowyparser_dalszefunkcje_modul.SpreparowanyWikikodStrony(nil,nazwa_modolu);
  			        			if(tekst_rozwiniety_calego_artykulu)then
	  			        			 local toc=stronicowyparser_dalszefunkcje_modul.SpisTresciWstep(nil,tekst_rozwiniety_calego_artykulu);
  				        			 if(toc)then
  				        			      for licznik, element_w_tablicy in ipairs(toc)do
  				        			    		local naglowek_rozdzialu=element_w_tablicy[1][2];
  			    	    			      	   	local link=nazwa_strony..element_w_tablicy[1][1];
  			        				      	   	local poziom_rozdzialu=element_w_tablicy[2];
  			        				      	   	
  			        				      	   	local poziom_rozdzialu_sekcji=HNumer(poziom_rozdzialu+m_roznica);
  			        				      	    
												table.insert(toc_nowe,{{"#"..link, naglowek_rozdzialu,}, poziom_rozdzialu_sekcji, })
						 
  			        				      	   	wikikod=((wikikod~="")and (wikikod.."\n") or "")..StronaSubstParametr(link,nil,poziom_rozdzialu_sekcji,postep);
  			        				      end;
	  			        			 end;
  				        		end;
  					        end;
  						end;
					end;
	  				wikikod=wikikod.."</div>";
    	 	   end;
 	    	   wikikod=wikikod.."</div>";
     		   glowna_tablica.tabela_listy_danych_analizy_ksiazki["KsiążkaSubst"]=wikikod;
      		   return wikikod;
  	    	end;
    		tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*[Ss]tronaSubst%s*|[^{}]+}})",StronaSubst);
  			tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*[Kk]siążkaSubst%s*|[^{}]*}})",KsiazkaCalaSubst);
  			tekst_rozwiniety_calego_artykulu,_=mw.ustring.gsub(tekst_rozwiniety_calego_artykulu,"({{%s*[Kk]siążkaSubst%s*}})",KsiazkaCalaSubst);
  			CzyStronaSubst();
		end;
  		local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne");
  		local NieFun=function(parametr) return "";end;
  		local TakFun=function(tab_lista_artykulow_w_ksiazce)
  			AnalizujKsiazka(tab_lista_artykulow_w_ksiazce);
  			return "tak";
  		end;
  		local FunRozdzial=function(tab_lista_artykulow_w_ksiazce,substrona)
  			AnalizujArtykulyRozdzialu(tab_lista_artykulow_w_ksiazce,substrona);
  			return "tak";
  		end;
  		stronicowyparser_potrzebne_modul.AnalizaStronaSubst(glowna_tablica.tabela_listy_danych_analizy_ksiazki,nil,TakFun,NieFun,FunRozdzial);
  		return "tak";
	end;
	local val=AnalizaStronZbiorczych();
	glowna_tablica.tabela_listy_danych_analizy_ksiazki.TOC_StronaZbiorcza=toc_nowe;
	return tekst_rozwiniety_calego_artykulu;
end;
return p;