Przejdź do zawartości

Moduł:Html

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
function p.KodowanieOmijanieFunkcyjne(html,normalnie,wzor,funkcja)
	local szeregi_modul=require("Module:Szeregi");
	wzor=wzor or "&([^&;%s]+);"
	html=szeregi_modul.SzeregiOmijanieFunkcyjne(html,normalnie,wzor,funkcja,
	function(kod)
		return "&"..kod..";";
	end);
	return html;
end;
p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
    tekst=mw.ustring.gsub(tekst,"([%|%[%]%(%)%+%-%*%?%.%^%$%%'])",function (s) return "&#"..tostring(mw.ustring.byte(s))..";";end)
	return tekst;
end;
p["TransformacjaKoduHtmlDoZnakuCiągu"]=function(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	tekst=mw.ustring.gsub(tekst,"&#(%d+);",function (s) return tostring(mw.ustring.char(s));end);
	tekst=mw.ustring.gsub(tekst,"&#x(%x+);", function(n) return mw.ustring.char(tonumber(n, 16));end);
	return tekst;
end;
function p.ZnakiSpecjalneTaguNowiki(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tab_nawiasy=html_dane_modul.tabela_nawiasowa;
    tekst=mw.ustring.gsub(tekst,"([%!{}|=<>%[%]])",tab_nawiasy);
    return tekst;
end;
function p.ZnakiSpecjalneWikiLinku(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tab_nawiasy=html_dane_modul.tabela_nawiasowa;
    tekst=mw.ustring.gsub(tekst,"([{}|<>%[%]])",tab_nawiasy);
    return tekst;
end;
function p.EncodeSpecjalneZnakiHtml(frame,normalnie)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametryRamki=parametry_modul.PobierzParametryRamki(frame);
	local html=PobierzParametryRamki("html");
	local __normalnie=PobierzParametryRamki("normalnie");
	normalnie=parametry_modul.CzyTak(__normalnie) or normalnie;
	---
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tab_nawiasy=html_dane_modul.tabela_nawiasowa;
	local wzor_kody="([{}|<>%[%]#=%?&])";
	html=p.KodowanieOmijanieFunkcyjne(html,normalnie,nil,function(ciag)
		ciag=mw.ustring.gsub(ciag,wzor_kody,tab_nawiasy);
		return ciag;
	end);
	return html;
end;
function p.EncodeZnakProloguList(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tab_nawiasy=html_dane_modul.tabela_nawiasowa;
	local lista_znaki="%#%*%;%:";
    tekst=mw.ustring.gsub(tekst,"^\n?(["..lista_znaki.."])",tab_nawiasy);
    tekst=mw.ustring.gsub(tekst,"\n(["..lista_znaki.."])",function(znak)
    	return "\n"..(tab_nawiasy[znak] or znak);
    end);
    return tekst;
end;
function p.ParametryPrzypisaniaZnakowegoEncodeHtml(frame,normalnie)
	local parametry_modul=require("Module:Parametry");
	local PobierzParametryRamki=parametry_modul.PobierzParametryRamki(frame);
	local tekst=PobierzParametryRamki("tekst");
	local __normalnie=PobierzParametryRamki("normalnie");
	normalnie=parametry_modul.CzyTak(__normalnie) or normalnie;
	---
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tabela_nawiasowa=html_dane_modul.tabela_nawiasowa;
	tekst=p.KodowanieOmijanieFunkcyjne(tekst,normalnie,nil,function(ciag)
		ciag=mw.ustring.gsub(ciag,"([=%?&])",tabela_nawiasowa);
		return ciag;
	end);
	return tekst;
end;
function p.PrzypisanieZnakoweEncodeHtml(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tabela_nawiasowa=html_dane_modul.tabela_nawiasowa;
	tekst=mw.ustring.gsub(tekst,"([=])",tabela_nawiasowa);
	return tekst;
end;
function p.ZamianaDwukropkaNaKodHtml(frame)
	local parametry_modul=require("Module:Parametry");
	local tekst=parametry_modul.PobierzParametryRamki(frame)("tekst");
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tabela_nawiasowa=html_dane_modul.tabela_nawiasowa;
	tekst=mw.ustring.gsub(tekst,"([:])",tabela_nawiasowa);
	return tekst;
end;
function p.KodHTMLZnaku(frame)
	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
  	local znak=PobierzParametr(1);
  	if(not parametry_modul.CzyTak(znak))then return "(błąd)";end;
  	local czy_kod_znaku=PobierzParametr(2);
 
	local czy_tak=parametry_modul["CzyTakCiąg"](czy_kod_znaku);
	local ZnakFun=function(znak)
		if(#znak>1)then
			return mw.ustring.codepoint(znak);
		else
			return mw.ustring.byte(znak);
		end;
	end;
	if(czy_tak)then
		return "&amp;&num;"..tostring(ZnakFun(znak))..";";
	else
		return "&#"..tostring(ZnakFun(znak))..";";
	end;
end;
p["KodyHTMLZnakówWikiCiągu"] = function (frame)
	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
  	local ciag_znakow=PobierzParametr(1);
  	if(not parametry_modul.CzyTak(ciag_znakow))then return "(błąd)";end;
  	local czy_kod_znaku=PobierzParametr(2);
  	
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local tab_znakowo_kodowa={};
	local tabela_znakowa=html_dane_modul.tabela_znakowa;
    local ciag,_=mw.ustring.gsub(ciag_znakow,"(.)",function(znak)
    	if(tabela_znakowa[znak])then
    		if(not czy_kod_znaku)then
    			return "&#"..tabela_znakowa[znak]..";";
    		else
    			return "&amp;&num;"..tabela_znakowa[znak]..";";
    		end;
    	end;
    	return nil;
    end);
    return ciag;
end;
function p.EncodeId(id,bez_transformacji)
	id=(not bez_transformacji) and p.DecodeHtml(id,true) or id;
	local id=p.EncodeSpecjalneZnakiHtml(id,true);
	return id;
end;
function p.UsuwanieSpecjalnychNieschematycznychSymboli(parametr)
	parametr=mw.ustring.gsub(parametr,"‎","");
	return parametr;
end;
function p.EncodeWiki(parametr,czy_nie_odstepy)
	parametr=p["TransformacjaKoduHtmlDoZnakuCiągu"](parametr);
	parametr=p.UsuwanieSpecjalnychNieschematycznychSymboli(parametr);
	local parametry_modul=require("Module:Parametry");
	if(not czy_nie_odstepy)then
	   	parametr=parametry_modul["Odstępy"]{[1]=parametr,[2]="tak",[3]="tak",};
	end;
	parametr=mw.text.encode(parametr);
	return parametr;
end;
function p.DecodeWiki(parametr,czy_nie_odstepy)
	parametr=mw.text.decode(parametr);
	parametr=p["TransformacjaKoduHtmlDoZnakuCiągu"](parametr);
	parametr=p.UsuwanieSpecjalnychNieschematycznychSymboli(parametr);
	if(not czy_nie_odstepy)then
		local parametry_modul=require("Module:Parametry");
	   	parametr=parametry_modul["Odstępy"]{[1]=parametr,[2]="tak",};
	end;
	return parametr;
end;
function p.IsEncodedHtml(parametr,encode,encode_real)
	local parametry_modul=require("Module:Parametry");
	local spr_parametr_szereg=nil;
	local TempFunParametr=function(parametr)
		if(parametry_modul.TypeNil(spr_parametr_szereg))then
			local __spr_parametr_szereg=mw.ustring.match(parametr,"^[%w%p%s]*$");
			spr_parametr_szereg=__spr_parametr_szereg and true or false;
			return spr_parametr_szereg;
		end;
		return spr_parametr_szereg;
	end;
	local spr_parametr_bez_procentu=nil;
	local TempFunBezProcentu=function(parametr)
		if(parametry_modul.TypeNil(spr_parametr_bez_procentu))then
			local __spr_parametr_bez_procentu=mw.ustring.match(parametr,"^[^%%]*$");
			spr_parametr_bez_procentu=__spr_parametr_bez_procentu and true or false;
			return spr_parametr_bez_procentu;
		end;
		return spr_parametr_bez_procentu;
	end;
	local wynik=((encode_real)and(TempFunParametr(parametr)and(TempFunBezProcentu(parametr))))
		                       or((encode)and(TempFunBezProcentu(parametr)))
		                       or(((not encode_real)or((encode_real)and(TempFunParametr(parametr))))
		                       	      and(mw.ustring.match(parametr,"%%%x%x"))
		                              and(not mw.ustring.match(parametr,"%%$"))
		                              and(not mw.ustring.match(parametr,"%%.$"))
		                              and(not mw.ustring.match(parametr,"%%[^%x]."))
		                              and(not mw.ustring.match(parametr,"%%.[^%x]")));
	return wynik and true or false;
end;
function p.EncodeHtml(parametr,encode,encode_real,czy_nie_odstepy)
	if(not parametr)then return;end;
	if(p.IsEncodedHtml(parametr,encode,encode_real))then
		return p.EncodeWiki(parametr,czy_nie_odstepy);
	end;
	return mw.uri.encode(parametr,"WIKI");
end;
function p.DecodeHtml(parametr,spacje,encode,encode_real,czy_nie_odstepy)
	if(not parametr)then return;end;
	if(p.IsEncodedHtml(parametr,encode,encode_real))then
		if(spacje)then
	    	return p.DecodeWiki(mw.uri.decode(parametr,"WIKI"));
	    else
	        return p.EncodeWiki(mw.uri.decode(parametr,"WIKI"));
	    end;
	end;
	if(spacje)then
	    return p.DecodeWiki(parametr,czy_nie_odstepy);
	else
		return p.EncodeWiki(parametr,czy_nie_odstepy);
	end;
end;
function p.TekstoweZnakiTypowoTagoweParametroweZamienianiaNaKodHtml(znacznik)
	znacznik=mw.ustring.gsub(znacznik,"([\"'])(.-[^\\])(%1)",function(cudzyslow_otwierajacy,atrybut,cudzyslow_zamykajacy)
		local ile1;local ile2;
		atrybut,ile1=mw.ustring.gsub(atrybut,"([<>&])",function(a)
			return mw.text.encode(a);
		end);
		atrybut,ile2=mw.ustring.gsub(atrybut,"(\\\")",function(a)
			return p["KodyHTMLZnakówWikiCiągu"](a);
		end);
		if(ile1+ile2>0)then
			return cudzyslow_otwierajacy..atrybut..cudzyslow_zamykajacy;
		end;
		return nil;
	end);
	return znacznik;
end;
function p.TekstoweKodyHtmlZnacznikoweTypowoTagoweParametroweZamienianiaNaZnak(value)
	value=mw.ustring.gsub(value,"(&)(%a+)(;)",function(amp,kod_html,srednik)
		kod_html=mw.ustring.lower(kod_html);
		if((kod_html=="lt")or(kod_html=="gt")or(kod_html=="amp"))then
			return mw.text.decode(amp..kod_html..srednik);
		end;
		return nil;
	end);
	local lewy_ukosnik=mw.ustring.byte("\\");
	local cudzyslow=mw.ustring.byte("\"");
	value=mw.ustring.gsub(value,"(&#"..lewy_ukosnik..";&#"..cudzyslow..";)","\\\"");
	return value;
end;
p["NagłówekStronyAdresu"]=function(frame,czy_nie_dolne_myslniki,tabela_nazw_adresu)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_nie_dolne_myslniki=PobierzParametr("z nie dolnymi z myślnikami") or PobierzParametr(2) or czy_nie_dolne_myslniki;
	czy_nie_dolne_myslniki=parametry_modul.CzyTak(czy_nie_dolne_myslniki);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=tabela_nazw_adresu and tabela_nazw_adresu.nazwa_jednostki or p.DecodeHtml(nazwa_jednostki,true);
    if((tabela_nazw_adresu)and(not tabela_nazw_adresu.nazwa_jednostki))then tabela_nazw_adresu.nazwa_jednostki=nazwa_jednostki;end;
    
  	local naglowek=czy_nie_dolne_myslniki and mw.ustring.match(nazwa_jednostki,"^[^#]*#[%s_]*(.-)[%s_]*$") or mw.ustring.match(nazwa_jednostki,"^[^#]*#(.-)%s*$");
  	naglowek=parametry_modul["Odstępy"]{[1]=naglowek,[2]="tak",[3]=((not czy_nie_dolne_myslniki)and "tak" or nil),};
  	return naglowek;
  end;
p["ParametryStronyAdresu"]=function(frame,czy_naprawiaj,tabela_nazw_adresu)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=tabela_nazw_adresu and tabela_nazw_adresu.nazwa_jednostki or p.DecodeHtml(nazwa_jednostki,true);
    if((tabela_nazw_adresu)and(not tabela_nazw_adresu.nazwa_jednostki))then tabela_nazw_adresu.nazwa_jednostki=nazwa_jednostki;end;
    
    if(czy_naprawiaj)then
  		local bez_naglowka=tabela_nazw_adresu and tabela_nazw_adresu.bez_naglowka or mw.ustring.gsub(nazwa_jednostki,"^[%s_]*([^#]-)[%s_]*#(.*)$","%1");
  		if((tabela_nazw_adresu)and(not tabela_nazw_adresu.bez_naglowka))then tabela_nazw_adresu.bez_naglowka=bez_naglowka;end;
  		
		local parametry=mw.ustring.match(bez_naglowka,"^.-%?*%?[%s_]*([^&]+=[^&]-.-)[%s_]*$");
		if(parametry)then
			parametry=mw.ustring.gsub(parametry,"[%s_]*=[%s_]*","=") or nil;
			parametry=mw.ustring.gsub(parametry,"[%s_]*&[%s_]*","&") or nil;
		end;
		return parametry;
	else
		local bez_naglowka=tabela_nazw_adresu and tabela_nazw_adresu.bez_naglowka or mw.ustring.gsub(nazwa_jednostki,"^([^#]-)#(.*)$","%1");
		if((tabela_nazw_adresu)and(not tabela_nazw_adresu.bez_naglowka))then tabela_nazw_adresu.bez_naglowka=bez_naglowka;end;
		
		local parametry=mw.ustring.match(bez_naglowka,"^.-%?*%?([^&]+=[^&]-.-)%s*$");
		return parametry;
	end;
end;
p["NazwaStronyAdresu"]=function(frame,czy_naprawiaj,tabela_nazw_adresu)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	if(not nazwa_jednostki)then return;end;
	
    nazwa_jednostki=tabela_nazw_adresu and tabela_nazw_adresu.nazwa_jednostki or p.DecodeHtml(nazwa_jednostki,true);
    if((tabela_nazw_adresu)and(not tabela_nazw_adresu.nazwa_jednostki))then tabela_nazw_adresu.nazwa_jednostki=nazwa_jednostki;end;
    
    if(czy_naprawiaj)then
		nazwa_jednostki=tabela_nazw_adresu and tabela_nazw_adresu.bez_naglowka or mw.ustring.gsub(nazwa_jednostki,"^[%s_]*([^#]-)[%s_]*#(.*)$","%1");
		if((tabela_nazw_adresu)and(not tabela_nazw_adresu.bez_naglowka))then tabela_nazw_adresu.bez_naglowka=nazwa_jednostki;end;
		
		nazwa_jednostki=mw.ustring.gsub(nazwa_jednostki,"^(.-%?*)[%s_]*%?[^&]+=[^&]*.*$","%1");
	else
		nazwa_jednostki=tabela_nazw_adresu and tabela_nazw_adresu.bez_naglowka or mw.ustring.gsub(nazwa_jednostki,"^([^#]-)#(.*)$","%1");
		if((tabela_nazw_adresu)and(not tabela_nazw_adresu.bez_naglowka))then tabela_nazw_adresu.bez_naglowka=nazwa_jednostki;end;
		
		nazwa_jednostki=mw.ustring.gsub(nazwa_jednostki,"^(.-%?*)%?[^&]+=[^&]*.*$","%1");
	end;
	local strony_modul=require("Module:Strony");
	local czy_url=strony_modul.SprawdzanieURL(nazwa_jednostki);
	czy_url=czy_url and true or (not czy_naprawiaj);
	
	nazwa_jednostki=parametry_modul["Odstępy"]{[1]=nazwa_jednostki,[2]="tak",[3]=czy_url and true or false,};
	return nazwa_jednostki;
end;
p["NazwaStronyZParametrówStronyAdresu"]=function(frame,czy_naprawiaj)
  	 local parametry_modul=require("Module:Parametry");
  	 local PobierzParametr=parametry_modul.PobierzParametr(frame);
	 local parametry_strony=PobierzParametr("parametry") or PobierzParametr(1);
	 czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	 czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	 
	 if(parametry_modul.CzyTak(parametry_strony))then
	 	local nazwa_strony_linku;
	 	if(czy_naprawiaj)then
    		if(mw.ustring.match(parametry_strony,"^[%s_]*title[%s_]*=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"^[%s_]*title[%s_]*=([^&]+)&?.*$");
    			parametry_strony=mw.ustring.gsub(parametry_strony,"^[%s_]*title[%s_]*=([^&]+)&?","");
    		elseif(mw.ustring.match(parametry_strony,"&[%s_]*title[%s_]*=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"&[%s_]*title[%s_]*=([^&]+)&?.*$");
    			parametry_strony=mw.ustring.gsub(parametry_strony,"&[%s_]*title[%s_]*=([^&]+).*$","");
    		end;
    	else
    		if(mw.ustring.match(parametry_strony,"^title=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"^title=([^&]+)&?.*$");
    			parametry_strony=mw.ustring.gsub(parametry_strony,"^title=([^&]+)&?","");
    		elseif(mw.ustring.match(parametry_strony,"&title=[^&]*"))then
    			nazwa_strony_linku=mw.ustring.match(parametry_strony,"&title=([^&]+)&?.*$");
    			parametry_strony=mw.ustring.gsub(parametry_strony,"&title=([^&]+).*$","");
    		end;
    	end;
    	nazwa_strony_linku=parametry_modul["Odstępy"]{[1]=nazwa_strony_linku,[2]="tak",[3]=(not czy_naprawiaj),};
    	return nazwa_strony_linku,parametry_strony;
    else
    	return nil;
    end;
end;
p["PoprawAdresNagłówkaOrazParametrówStronyAdresu"]=function(frame,czy_naprawiaj,tabela_nazw_adresu)
  	local parametry_modul=require("Module:Parametry");
  	local PobierzParametr=parametry_modul.PobierzParametr(frame);
	local nazwa_jednostki=PobierzParametr("nazwa jednostki") or PobierzParametr("strona") or PobierzParametr(1);
	czy_naprawiaj=PobierzParametr("czy naprawiać") or PobierzParametr(2) or czy_naprawiaj;
	czy_naprawiaj=parametry_modul.CzyTak(czy_naprawiaj);
	
	local tabela_nazw_adresu=tabela_nazw_adresu or {};
	local adres=p["NazwaStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil,tabela_nazw_adresu);
   	local parametry_strony=p["ParametryStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil,tabela_nazw_adresu);
    local naglowek_strony=p["NagłówekStronyAdresu"](nazwa_jednostki,(czy_naprawiaj)and true or nil,tabela_nazw_adresu);
    nazwa_jednostki=adres..(parametry_strony and ("?"..parametry_strony) or "")..(naglowek_strony and ("#"..naglowek_strony) or "");
    
    return nazwa_jednostki;
end;
function p.URLStrona(frame)
   local parametry_modul=require("Module:Parametry");
   local PobierzParametr=parametry_modul.PobierzParametr(frame);
   local url=PobierzParametr("url") or PobierzParametr(1);
   local z_ukosnikiem=parametry_modul.CzyTak(PobierzParametr("ukośnik") or PobierzParametr(2));
   local serwer,nazwa=mw.ustring.match(url,"^//+([^%s/]+)"..((z_ukosnikiem) and "/+" or "").."(/?.-)$");
   return serwer,nazwa;
end;
p["UrlBezProtokołu"]=function(frame)
   local parametry_modul=require("Module:Parametry");
   local PobierzParametr=parametry_modul.PobierzParametr(frame);
   local url=PobierzParametr("url") or PobierzParametr(1);
   local mail=mw.ustring.match(url,"^.*@([^@]+)$");
   if(mail)then
   	  return "//"..mail,"mail",1;
   end;
   local protokol,strona=mw.ustring.match(url,"^(%a+:)(/+.-)$");
   if((protokol)and(strona))then
   		strona=mw.ustring.gsub(strona,"^(/+)","//");
   		return strona,protokol,2;
   end;
   local strona=mw.ustring.match(url,"^:?(/+.-)$");
   if(strona)then
   	   	strona=mw.ustring.gsub(strona,"^(/+)","//");
   		return strona,nil,3;
   end;
   return "//"..url,nil,-1;
end;
function p.DecodeKoduHTMLZnaku(tekst)
	local html_dane_modul=mw.loadData("Module:Html/dane");
	local kody_literowe_html_i_ich_odpowiedniki_znakowe=html_dane_modul.kody_literowe_html_i_ich_odpowiedniki_znakowe;
	-- najpierw nazwane encje
	local ile1;
	tekst,ile1 = mw.ustring.gsub(tekst,"(&%a+%;)", kody_literowe_html_i_ich_odpowiedniki_znakowe);

	-- encje numeryczne dziesiętne: &#956;
	local ile2;
	tekst,ile2=mw.ustring.gsub(tekst,"&#(%d+);", function(n)
    	return mw.ustring.char(tonumber(n))
	end);

	-- encje numeryczne szesnastkowe: &#x3BC;
	local ile3;
	tekst,ile3 = mw.ustring.gsub(tekst,"&#x(%x+);", function(n)
    	return mw.ustring.char(tonumber(n, 16))
	end);
	return tekst,ile1,ile2,ile3;
end;
function p.ZamianaEncodeTekst(tekst)
	tekst=mw.uri.encode(mw.uri.decode(tekst,"PATH"),"PATH");
	return tekst;
end;
function p.ZamianaEncodeNaPodstawieWzoruTekstu(tekst,wzor)
	tekst=mw.ustring.gsub(tekst,wzor,function(tekst)
		tekst=p.ZamianaEncodeTekst(tekst);
		return tekst;
	end);
	return tekst;
end;
function p.StronaParametryIdentyfikacjaAdresuHtml(adres)
	local ile_w;local ile;
	adres,ile_w,ile=p.EncodeHashKoduHtmlTekstu(adres);
	local ile1;local ile2;
	if(ile_w>0)then
		adres,ile1,ile2=p.EncodeTempHashKoduHtmlTekstu(adres);
	end;
	
	local strona,naglowek=mw.ustring.match(adres,"^[%s_]*([^#]-)[%s_]*#[%s_]*(.-)[%s_]*$");
	if((not strona)or(not naglowek))then
		strona=mw.ustring.match(adres,"^[%s_]*(.-)[%s_]*$");
	end;
	local __strona,parametry=mw.ustring.match(strona,"^(.-%?*)%?([^&=]-=.*)$");
	strona=__strona or strona;
	
	if(ile_w>0)then
		strona=p.DecodeHashKoduHtmlTekstu(p.DecodeTempHashKoduHtmlTekstu(strona,ile1,ile2),ile);
		parametry=parametry and p.DecodeHashKoduHtmlTekstu(p.DecodeTempHashKoduHtmlTekstu(parametry,ile1,ile2),ile) or nil;
		naglowek=naglowek and p.DecodeHashKoduHtmlTekstu(p.DecodeTempHashKoduHtmlTekstu(naglowek,ile1,ile2),ile) or nil;
	end;
	return strona,parametry,naglowek;
end;
function p.TworzenieAdresuHtml(strona,parametry,naglowek)
	local adres=strona..(parametry and ("?"..parametry) or "")..((naglowek)and ("#"..naglowek) or "");
	return adres;
end;
function p.TworzenieStronaParametryIdentyfikacjaAdresuHtml(adres,funkcja_strona,funkcja_parametry,funkcja_naglowek)
	local strona,parametry,naglowek=p.StronaParametryIdentyfikacjaAdresuHtml(adres);
	strona=funkcja_strona and funkcja_strona(strona) or strona;
	parametry=(parametry and funkcja_parametry) and funkcja_parametry(parametry) or parametry;
	naglowek=(naglowek and funkcja_naglowek) and funkcja_naglowek(naglowek) or naglowek;
	local adres=p.TworzenieAdresuHtml(strona,parametry,naglowek);
	return adres;
end;
function p.ParametryEncodeURL(adres,w_adresie,funkcja_strona,funkcja_naglowek)
	local function ParametryEncodeURL(a,b,c)
		return a..p.ZamianaEncodeTekst(b).."="..p.ZamianaEncodeTekst(c);
	end;
	local function OperacjeHtml(adres)
		adres=mw.ustring.gsub(adres,"^(%??)([^&=]*)=([^&]*)",ParametryEncodeURL);
		adres=mw.ustring.gsub(adres,"(&)([^&=]*)=([^&]*)",ParametryEncodeURL);
		return adres;
	end;
	if(not w_adresie)then
		return OperacjeHtml(adres);
	else
		return p.TworzenieStronaParametryIdentyfikacjaAdresuHtml(adres,funkcja_strona,OperacjeHtml,funkcja_naglowek);
	end;
end;
function p.ParametryZaawansowanyEncodeURL(adres,w_adresie,funkcja_strona,funkcja_naglowek)
	function ParametryZaawansowanyEncodeURL(a,b,c)
		b=mw.uri.decode(b,"PATH");b=p.EncodeSpecjalneZnakiHtml(b,true);b=mw.uri.encode(b,"PATH");
		c=mw.uri.decode(c,"PATH");c=p.EncodeSpecjalneZnakiHtml(c,true);c=mw.uri.encode(c,"PATH");
		return a..(b.."="..c);
	end;
	local function OperacjeURL(adres)
		adres=mw.ustring.gsub(adres,"^(%??)([^&=]*)=([^&]*)",ParametryZaawansowanyEncodeURL);
		adres=mw.ustring.gsub(adres,"(&)([^&=]*)=([^&]*)",ParametryZaawansowanyEncodeURL);
		return adres;
	end;
	if(not w_adresie)then
		return OperacjeURL(adres);
	else
		return p.TworzenieStronaParametryIdentyfikacjaAdresuHtml(adres,funkcja_strona,OperacjeURL,funkcja_naglowek);
	end;
end;
function p.EncodeParametryHtml(parametr,w_adresie,funkcja_strona,funkcja_naglowek)
	local EncodeHtmlAB=function(a,b,c)
		b=p.EncodeHtml(b);c=p.EncodeHtml(c);
		return a..b.."="..c;
	end;
	local function ParametryHtml(parametr)
		parametr=mw.ustring.gsub(parametr,"^(%??)([^&=]*)=([^&]*)",EncodeHtmlAB);
		parametr=mw.ustring.gsub(parametr,"(&)([^&=]*)=([^&]*)",EncodeHtmlAB);
		return parametr;
	end;
	if(not w_adresie)then
		return ParametryHtml(parametr);
	else
		return p.TworzenieStronaParametryIdentyfikacjaAdresuHtml(parametr,funkcja_strona,ParametryHtml,funkcja_naglowek);
	end;
end;
function p.EncodeZaawansowanyParametryHtml(adres,z_kodowaniem,w_adresie,funkcja_strona,funkcja_naglowek)
	local KrokEncodeZaawansowanyParametryHtmlABC=function(a)
		a=mw.uri.decode(a,"PATH");
		a=p.EncodePodstawoweHtmlTekstu(a);
		if(z_kodowaniem)then a=mw.uri.encode(a,"PATH");end;
		return a;
	end;
	local EncodeZaawansowanyParametryHtmlABC=function(a,b,c)
		b=KrokEncodeZaawansowanyParametryHtmlABC(b);
		c=KrokEncodeZaawansowanyParametryHtmlABC(c);
		return (a or "")..(b.."="..c);
	end;
	local function OperacjeParametryHtmlABC(adres)
		adres=mw.ustring.gsub(adres,"^(%??)([^&=]-)=([^&]*)",EncodeZaawansowanyParametryHtmlABC);
		adres=mw.ustring.gsub(adres,"([&])([^&=]-)=([^&]*)",EncodeZaawansowanyParametryHtmlABC);
		return adres;
	end;
	if(not w_adresie)then
		return OperacjeParametryHtmlABC(adres);
	else
		return p.TworzenieStronaParametryIdentyfikacjaAdresuHtml(adres,funkcja_strona,OperacjeParametryHtmlABC,funkcja_naglowek);
	end;
end;
function p.EncodeHashKoduHtmlTekstu(tekst)
	local ile;local ile2=0;
	tekst,ile=mw.ustring.gsub(tekst,"&([^&;%s]+);",function(kod)
		if((kod=="num")or(kod=="#35")or(kod=="#x23"))then
			ile2=ile2+1;
			return "&amp;num;";
		end;
		return nil;
	end);
	return tekst,ile,ile2;
end;
function p.DecodeHashKoduHtmlTekstu(tekst,ile)
	if(((ile)and(ile>0))or(not ile))then
		tekst=mw.ustring.gsub(tekst,"&amp;num;",function(kod)
			return "&#35;";
		end);
	end;
	return tekst;
end;
function p.EncodeTempHashKoduHtmlTekstu(tekst)
	local ile1;local ile2;
	tekst,ile1=mw.ustring.gsub(tekst,"&#(%d+);",function(kod)
		return "&&num;"..kod..";";
	end);
	tekst,ile2=mw.ustring.gsub(tekst,"&#x(%x+);",function(kod)
		return "&&num;x"..kod..";";
	end);
	return tekst,ile1,ile2;
end;
function p.DecodeTempHashKoduHtmlTekstu(tekst,ile1,ile2)
	if(((ile1)and(ile1>0))or(not ile1))then
		tekst=mw.ustring.gsub(tekst,"&&num;(%d+);",function(kod)
			return "&#"..kod..";"
		end);
	end;
	if(((ile2)and(ile2>0))or(not ile2))then
		tekst=mw.ustring.gsub(tekst,"&&num;x(%x+);",function(kod)
			return "&#x"..kod..";"
		end);
	end;
	return tekst;
end;
function p.AdresDomniemanieBezProtokolarnyEncodeURL(adres,protokolarny)
	local adres=p.ParametryEncodeURL(adres,true,
	function(strona)
		local function Func(strona)
			strona=p.ZamianaEncodeNaPodstawieWzoruTekstu(strona,"[^/]+");
			return strona;
		end;
		if(protokolarny)then
			local adres,protokol=p["UrlBezProtokołu"](strona);
			adres=Func(adres);
			adres=(protokol or "")..adres;
			return adres;
		else
			return Func(strona);
		end;
	end,
	function(naglowek)
		naglowek=p.ZamianaEncodeTekst(naglowek);
		return naglowek;
	end);
	
	return adres;
end;
function p.UriEncode(frame)
	local parametry_modul=require("Module:Parametry");
	local html=parametry_modul.PobierzParametryRamki(frame)("html");
	html=mw.ustring.gsub(html,"^(%a+://)(.+)$",function(prot,strona)
		return prot..p.AdresDomniemanieBezProtokolarnyEncodeURL(strona,false);
	end);
	return html;
end;
function p.EncodePodstawoweHtmlTekstu(elementy_adresu_strony)
	elementy_adresu_strony=p.KodowanieOmijanieFunkcyjne(elementy_adresu_strony,true,"&(#35);",function(elementy_adresu_strony)
		elementy_adresu_strony=p.DecodeKoduHTMLZnaku(elementy_adresu_strony);
		return elementy_adresu_strony;
	end);
	elementy_adresu_strony=p.EncodeSpecjalneZnakiHtml(elementy_adresu_strony,true);
    return elementy_adresu_strony;
end;
function p.EncodeElementyAdresuStrony(elementy_adresu_strony,czy_parametry_strony,z_kodowaniem)
	if(czy_parametry_strony)then
		elementy_adresu_strony=p.EncodeZaawansowanyParametryHtml(elementy_adresu_strony,z_kodowaniem);
	else
		elementy_adresu_strony=mw.uri.decode(elementy_adresu_strony,"PATH");
    	elementy_adresu_strony=p.EncodePodstawoweHtmlTekstu(elementy_adresu_strony);
    	if(z_kodowaniem)then elementy_adresu_strony=mw.uri.encode(elementy_adresu_strony,"PATH");end;
    end;
    return elementy_adresu_strony;
end;
function p.AdresProjektuEncodeHtml(frame,z_kodowaniem,protokolarny)
	local parametry_modul=require("Module:Parametry")
	local PobierzParametry=parametry_modul.PobierzParametryRamki(frame);
	local html=PobierzParametry("html");
	local z_kodowaniem_html=PobierzParametry("encode");
	if(z_kodowaniem_html)then z_kodowaniem=parametry_modul.CzyTak(z_kodowaniem_html);end;
	
	local html=p.EncodeZaawansowanyParametryHtml(html,z_kodowaniem,true,
	function(strona)
		local function Func(strona)
			strona=p.EncodePodstawoweHtmlTekstu(mw.uri.decode(strona,"PATH"));
			if(z_kodowaniem)then strona=mw.uri.encode(strona,"PATH");end;
			return strona;
		end;
		if(protokolarny)then
			local adres,protokol=p["UrlBezProtokołu"](strona);
			adres=mw.ustring.gsub(adres,"[^/]+",function(element)
				element=Func(element);
				return element;
			end);
			adres=(protokol or "")..adres;
			return adres;
		else
			return Func(strona);
		end;
	end,
	function(naglowek)
		naglowek=p.EncodePodstawoweHtmlTekstu(mw.uri.decode(naglowek,"PATH"));
		if(z_kodowaniem)then naglowek=mw.uri.encode(naglowek,"PATH") end;
		return naglowek;
	end);
	return html;
end;
return p;