Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.WstawKategorie(frame)
  local tabela_listy_danych_analizy_ksiazki=mw.loadData('Module:StronicowyParser/informacje').tablica_zebranych_danych_ksiazkowych;
  if(not tabela_listy_danych_analizy_ksiazki.problemy)then return nil;end;
  if(not tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie)then return "";end;
  local pf=frame:getParent();
  local nazwa_szablonu_rodzica=frame.args[2] or pf.args["nazwa szablonu rodzica"] or require("Module:Szablonowe").NazwaSzablonu(pf:getTitle());
  local ktory_szablon_stronicowy_ma_zwracac_kategorie1=nazwa_szablonu_rodzica..":"..frame.args[1];
  local ktory_szablon_stronicowy_ma_zwracac_kategorie2=tabela_listy_danych_analizy_ksiazki.ktory_szablon_stronicowy_ma_zwracac_kategorie;
  if(ktory_szablon_stronicowy_ma_zwracac_kategorie1==ktory_szablon_stronicowy_ma_zwracac_kategorie2)then
  		-----
  		local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty");
  		local nazwa_przestrzeni_nazw_strony=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni;
		local nazwa_przestrzeni_nazw_ksiazki_strony=tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu;
		local nazwa_ksiazki_strony=tabela_listy_danych_analizy_ksiazki.nazwa_woluminu;
		local nazwy_np_modul=mw.loadData("Module:Nazwy/Np");
		-----
  	    mw.log("+++++++++++++++++++++++++++++++++++++++")
  	    mw.log("Udało się zwrócić dla sygnatury szablonu: "..ktory_szablon_stronicowy_ma_zwracac_kategorie1..".")
  	    local parametry_modul=require("Module:Parametry");
  	    local strony_z_wielkiej_litery,strony_z_malej_litery;
  	    if(nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)then
  	      	strony_z_wielkiej_litery="Artykuły";
  	    	strony_z_malej_litery="artykułów";
  	    elseif(nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)then
  	    	strony_z_wielkiej_litery="Artykuły dla dzieci,";
  	    	strony_z_malej_litery="artykułów dla dzieci";
  	    elseif((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User)and(mw.ustring.match(nazwa_przestrzeni_nazw_ksiazki_strony,"^([^/]+)$")))then
  	    	strony_z_wielkiej_litery="Strony użytkowników,";
  	    	strony_z_malej_litery="stron użytkowników";
  	    elseif((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks)and(mw.ustring.match(nazwa_przestrzeni_nazw_ksiazki_strony,"^%s*[Bb]rudnopis/([^/]+)$")))then
  	    	strony_z_wielkiej_litery="Strony brudnopisu projektu,";
  	    	strony_z_malej_litery="stron brudnopisu projektu";
  	    else
  	    	strony_z_wielkiej_litery="Strony niepodręcznikowe";
  	    	strony_z_malej_litery="stron niepodręcznikowych";
  	    end;
  	    ----
  	    local function Czy_jest_taki_element_w_tabeli_problemow(element, tablica_nazwy_ksiazki)
  	    	local tablica_element=tablica_nazwy_ksiazki[element];
  	    	if(tablica_element)then return true;end;
  	    	return false;
  	    end;
  	    local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy");
  	    local self={};
  	    self.tabela_listy_danych_analizy_ksiazki=tabela_listy_danych_analizy_ksiazki;
  	    ----
  	    local tabela_kategorii={};
  	    local latki_modul=require("Module:Łatki");
  	    
  	    ----
  	    if(tabela_listy_danych_analizy_ksiazki.problemy["problemy książkowe"])then
  	    	for nazwa_przestrzeni,tablica_przestrzeni in pairs(tabela_listy_danych_analizy_ksiazki.problemy["problemy książkowe"])do
  	    		for nazwa_przestrzeni_ksiazki,tablica_nazwy_przestrzeni_ksiazki in  pairs(tablica_przestrzeni) do
  	    			for nazwa_ksiazki, tablica_nazwy_ksiazki in pairs(tablica_nazwy_przestrzeni_ksiazki)do
  	    				local tablica_bledy=tablica_nazwy_ksiazki["błędy uchwytów dołączonych stron"];
  	    				if(tablica_bledy)then
  	    					for _,element_w_podtablicy_kategorii_bledow in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
  	    						local wartosc_elementu_pierwszego=element_w_podtablicy_kategorii_bledow[1];
  	    						local bledy_obiektow=tablica_bledy[wartosc_elementu_pierwszego];
  	    						if(bledy_obiektow)then
  	    							----
  	    							if((nazwa_przestrzeni==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(nazwa_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_woluminu))then
	                    					parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z dołączonymi innymi stronami, w książkach, "..latki_modul.Z(element_w_podtablicy_kategorii_bledow[6]).." "..element_w_podtablicy_kategorii_bledow[6]..((mw.ustring.match(element_w_podtablicy_kategorii_bledow[6],"[%s_]+"))and ", " or " ").."ze złymi uchwytami]]");
                    				else
                    					parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z dołączonymi ".. ((nazwa_przestrzeni==nazwy_np_modul.Main)and "artykułami, " 
    		                                            or((nazwa_przestrzeni==nazwy_np_modul.Wikijunior)and "artykułami dla dzieci, " 
    		                                               or (((nazwa_przestrzeni==nazwy_np_modul.User)and(mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$"))) and "stronami użytkowników, "
    		                                               	  or (((nazwa_przestrzeni==nazwy_np_modul.Wikibooks)and(mw.ustring.match(nazwa_przestrzeni_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$"))) and "stronami brudnopisu projektu, "
    		                                                      or "stronami niepodręcznikowymi, ")))).."w innych książkach, "..latki_modul.Z(element_w_podtablicy_kategorii_bledow[6]).." "..element_w_podtablicy_kategorii_bledow[6]..((mw.ustring.match(element_w_podtablicy_kategorii_bledow[6],"[%s_]+"))and ", " or " ").."ze złymi uchwytami]]");
                    				end;
  	    						end;
  	    				  	end;
      					end;
  	    				----
  	    				local tablica_bledy=tablica_nazwy_ksiazki["brak spisów treści do dołączonych stron"];
  	    				if(bledy_obiektow)then
  	    					local czy_pomijaj=Czy_jest_taki_element_w_tabeli_problemow("brak spisów treści do dołączonych książek na ich stronach głównych", tablica_nazwy_ksiazki)
        			                      or Czy_jest_taki_element_w_tabeli_problemow("dołączone strony główne nie istnieją", tablica_nazwy_ksiazki);
        					if(not czy_pomijaj)then
            					parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Brakujące spisy treści, dołączonych do "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and  "artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and "stron użytkowników"
    		                                               	   or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu"
    		                                                      or "stron niepodręcznikowych"))))..", "..(((nazwa_przestrzeni==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(nazwa_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_woluminu)) and "stron w książkach" or (((element_w_podtablicy_kategorii_bledow==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci," 
    		                                               or ((nazwa_przestrzeni==nazwy_np_modul.User) and "stron użytkowników,"
    		                                               	 or ((nazwa_przestrzeni==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu,"
    		                                                      or "stron")))).." w innych książkach")).."]]");
        					end;
  	    				end;
  	    				----
  	    				local tablica_bledy=tablica_nazwy_ksiazki["brak spisów treści do dołączonych książek na ich stronach głównych"];
  	    				if(bledy_obiektow)then
  	    					local czy_pomijaj=Czy_jest_taki_element_w_tabeli_problemow("doloczone_strony_glowne_nie_istnieja", tablica_nazwy_ksiazki)
        			                		    or((nazwa_przestrzeni==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)
        			                      			  and(nazwa_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_woluminu));
    		    			if(not czy_pomijaj)then
    								parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Brak spisu treści, dołączonych do "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and "stron użytkowników"
    		                                               	 or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu"
    		                                                      or "stron niepodręcznikowych"))))..", do książek"..((nazwa_przestrzeni==nazwy_np_modul.Main)and "" 
    		                                            or((nazwa_przestrzeni==nazwy_np_modul.Wikijunior)and " dla dzieci" 
    		                                               or ((nazwa_przestrzeni==nazwy_np_modul.User) and " użytkowników"
    		                                               	  or ((nazwa_przestrzeni==nazwy_np_modul.Wikibooks) and " brudnopisu projektu"
    		                                                      or " innych")))).."]]");
    		        		end;
  	    				end;
  	    				-----
  	    				local tablica_bledy=tablica_nazwy_ksiazki["dołączone strony główne nie istnieją"];
  	    				if(bledy_obiektow)then
  	    					local czy_ta_sama_ksiazka=((nazwa_przestrzeni==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni)and(nazwa_przestrzeni_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_przestrzeni_woluminu)and(nazwa_ksiazki==tabela_listy_danych_analizy_ksiazki.nazwa_woluminu));
    		    			if(not czy_ta_sama_ksiazka)then
    									parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Nieistniejące strony główne, dołączonych do "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and "stron użytkowników"
    		                                               	 or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu"
    		                                                      or "stron niepodręcznikowych"))))..", książek"..((nazwa_przestrzeni==nazwy_np_modul.Main)and "" 
    		                                            or((nazwa_przestrzeni==nazwy_np_modul.Wikijunior)and " dla dzieci" 
    		                                               or ((nazwa_przestrzeni==nazwy_np_modul.User) and " użytkowników"
    		                                               	  or ((nazwa_przestrzeni==nazwy_np_modul.Wikibooks) and " brudnopisu projektu"
    		                                                      or " innych")))).."]]");
    		        		end;
  	    					-----
  	    				end;
  	    				local function Dodaj_kategorie_naglowkuj(kategoria_bledu,czesc_nazwy_kategorii)
      				    	local tablica_bledy=tablica_nazwy_ksiazki[kategoria_bledu];
  	    					if(bledy_obiektow)then
            					parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..":"..strony_z_wielkiej_litery.." z dołączonymi "
            							..(
            							(nazwa_przestrzeni==nazwy_np_modul.Main)
            					    		and "artykułami" 
            					    			or ((nazwa_przestrzeni==nazwy_np_modul.Wikijunior)
            					     				and "artykułami dla dzieci,"
            					     					or (((nazwa_przestrzeni==nazwy_np_modul.User)and(mw.ustring.match(nazwa_przestrzeni_ksiazki,"^([^/]+)$")))
            					     	  	    				and "stronami użytkowników,"
            					     	  	    				or (((nazwa_przestrzeni==nazwy_np_modul.Wikibooks)and(mw.ustring.match(nazwa_ksiazki,"^%s*[Bb]rudnopis/([^/]+)$")))
            					     	  	    			and "stronami brudnopisu projektu,"
            					     	  	    			or "stronami niepodręcznikowymi"
            					     	  	    		)
            					     	  			)
            					     			)
            								)
            							.." "..czesc_nazwy_kategorii.."]]");
            				
  	    					end;
      					end;
      					Dodaj_kategorie_naglowkuj("powtórka nagłówek w stronie dołączonej","z wielokrotnymi użyciami szablonu nagłówka w jednym nagłówku");
      					Dodaj_kategorie_naglowkuj("nagłowek w tekście rozdziału w stronie dołączonej","z użyciami szablonu nagłówka w tekstach rozdziałów");
  	    			end;
  	    		end;
  			end;
  	    end;
  	    ----
  	    for _,element_w_podtablicy_kategorii_bledow in pairs(stronicowyparser_obiekty_modul.tablica_obiektowych_form)do
  	    	local wartosc_elementu_pierwszego=element_w_podtablicy_kategorii_bledow[1];
  	    	if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron",wartosc_elementu_pierwszego))then
                  parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." "..latki_modul.Z(element_w_podtablicy_kategorii_bledow[6]).." "..element_w_podtablicy_kategorii_bledow[6]..((mw.ustring.match(element_w_podtablicy_kategorii_bledow[6],"[%s_]+"))and "," or "").." ze złymi uchwytami]]");
  	    	end;
  	    	if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"błędy uchwytów korzystanych stron","Link"..wartosc_elementu_pierwszego))then
                   parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." ze złymi uchwytami do "..element_w_podtablicy_kategorii_bledow[7].."]]");
    		end;
   			if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",wartosc_elementu_pierwszego,1))then
                    parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z pustymi uchwytami w odnośnikach do "..element_w_podtablicy_kategorii_bledow[7].."]]");
    		end;
  	    	if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",wartosc_elementu_pierwszego,2))then
                    parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z pustymi nazwami artykułów w odnośnikach do "..element_w_podtablicy_kategorii_bledow[7].."]]");
    		end;
  	    	if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"puste parametry szablonów stronicowych linkujących",wartosc_elementu_pierwszego,3))then
                   parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z pustymi nazwami książek w odnośnikach do "..element_w_podtablicy_kategorii_bledow[7].."]]");
    		end;
  	    	if(stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"brak uchwytu",wartosc_elementu_pierwszego))then
                   parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z odnośnikami, z brakiem uchwytu, do "..element_w_podtablicy_kategorii_bledow[7].."]]");
    		end;
  	    end;
    	if((tabela_listy_danych_analizy_ksiazki.problemy["brak spisu treści do korzystanych stron"])and((not tabela_listy_danych_analizy_ksiazki.problemy["brak spisów treści do korzystanych książek na ich stronach głównych"])and(not tabela_listy_danych_analizy_ksiazki.problemy["korzystana strona główna nie istnieje"])))then 
            	parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Brakujące spisy treści, do korzystanych "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and " artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and " artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and " stron użytkowników"
    		                                               	  or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and " stron brudnopisu projektu"
    		                                                      or "stron"))))..", w książkach]]");
    	end;
    	function Dodaj_kategorie_naglowkuj(zmienna_korzystane,czesc_nazwy_kategorii)
    		if(tabela_listy_danych_analizy_ksiazki.problemy[zmienna_korzystane])then 
    			if(tabela_listy_danych_analizy_ksiazki.problemy[zmienna_korzystane]==0)then 
	    	   	   parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." "..czesc_nazwy_kategorii.."]]");
    		   end;	    		
    		end;
    	end;
    	Dodaj_kategorie_naglowkuj("powtórka nagłowek w stronie korzystanej","z wielokrotnymi użyciami szablonu nagłówka w jednym nagłówku")
    	Dodaj_kategorie_naglowkuj("nagłówek w tekście rozdziału w stronie korzystanej","z użyciami szablonu nagłówka w tekstach rozdziałów")
    	
    	if(tabela_listy_danych_analizy_ksiazki.problemy["nieprawidłowe nazwy korzystanych stron"])then 
        	if(tabela_listy_danych_analizy_ksiazki.problemy["nieprawidłowe nazwy korzystanych stron"]==0)then
            	parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z nieprawidłowymi nazwami korzystanych stron]]");
        	end;
    	end;
    	if(tabela_listy_danych_analizy_ksiazki.problemy["nieprawidłowe nazwy stron dołączanych do stron"])then 
        	if(tabela_listy_danych_analizy_ksiazki.problemy["nieprawidłowe nazwy stron dołączanych do stron"]==0)then
            	parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z nieprawidłowymi nazwami dołączonych stron]]");
        	end;
    	end;       
    	if(tabela_listy_danych_analizy_ksiazki.problemy["strona nie istnieje"])then 
        	if(tabela_listy_danych_analizy_ksiazki.problemy["strona nie istnieje"]==0)then
            	parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z dołączonymi nieistniejącymi stronami]]");
        	end;
    	end;
    	if(tabela_listy_danych_analizy_ksiazki.problemy["błąd wewnętrzny modułu lua stronicowego parsera"])then 
        	if(tabela_listy_danych_analizy_ksiazki.problemy["błąd wewnętrzny modułu lua stronicowego parsera"]==0)then
            	parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": "..strony_z_wielkiej_litery.." z błędami wewnętrznymi skryptów]]");
        	end;
    	end;
    	if(tabela_listy_danych_analizy_ksiazki.problemy["niedozwolone znaki w spisach treści"])then
    		if(tabela_listy_danych_analizy_ksiazki.problemy["niedozwolone znaki w spisach treści"]==0)then
    			parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..":Nazwy "..strony_z_malej_litery..", w spisach treści zawierają niedozwolone znaki]]");
    		end;
    	end;
    	if((tabela_listy_danych_analizy_ksiazki.problemy["brak spisów treści do korzystanych książek na ich stronach głównych"])and(not tabela_listy_danych_analizy_ksiazki.problemy["korzystana strona główna nie istnieje"]))then
    		parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Brak spisu treści, korzystanych "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and "stron użytkowników"
    		                                               	  or  ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu"
    		                                                      or "stron"))))..", do książek]]");
    	end;
    	if(tabela_listy_danych_analizy_ksiazki.problemy["korzystana strona główna nie istnieje"])then
    		parametry_modul.DodajElementDoZbioru(tabela_kategorii,"[["..nazwy_np_modul.Category..": Nieistniejące strony główne, korzystanych "..((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Main)and "artykułów" 
    		                                            or((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikijunior)and "artykułów dla dzieci" 
    		                                               or ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.User) and "stron użytkowników"
    		                                               	  or  ((nazwa_przestrzeni_nazw_strony==nazwy_np_modul.Wikibooks) and "stron brudnopisu projektu"
    		                                                      or "stron"))))..", książek]]");
    	end;
	    return table.concat(tabela_kategorii,"");
    end;
end;
return p;