Przejdź do zawartości

Moduł:Kategorie/sortowanie

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
local p={};
local CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania=function(nazwa_sortowania)
	local czy_tak=mw.ustring.match(nazwa_sortowania,"^[%c%s_%p]*$")
	if(czy_tak)then return true;end;
	return false;
end;
local UsuwanieElementuArtykularnegoWoluminu=function(nazwa_sortowania,nawias_lewy,nawias_prawy)
	local ile_zmieniono=0;
	local kategorie_dane_modul=mw.loadData("Module:Kategorie/dane");
	local tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania=kategorie_dane_modul.tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania;
	nazwa_sortowania=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*%"..nawias_lewy.."[%p%s_]*([^%"..nawias_lewy.."%"..nawias_prawy.."]-)[%p%s_]*%"..nawias_prawy,function(wyrazenie)
		if(wyrazenie=="")then return "";end;
		if(tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania[wyrazenie])then
			ile_zmieniono=ile_zmieniono+1;
			return "";
		end;
	end);
	return nazwa_sortowania,ile_zmieniono;
end;
local UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony=function(nazwa_sortowania)
	repeat
		local ile1;local ile2;local ile3;local ile4;local ile5;
		nazwa_sortowania,ile1=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*%(([^%(%)]+)%)","%1");
		nazwa_sortowania,ile2=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*%[([^%(%)]+)%]","%1");
		nazwa_sortowania,ile3=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*%{([^%(%)]+)%}","%1");
		nazwa_sortowania,ile4=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*\"([^%(%)]+)\"","%1");
		nazwa_sortowania,ile5=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*„([^%(%)]+)”","%1");
		local ile=ile1+ile2+ile3+ile4+ile5;
	until (ile==0);
	nazwa_sortowania=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]*","");
	return nazwa_sortowania;
end;
local UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania=function(nazwa_sortowania,czy_koniec)
	local czy_tak=CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania);
	if(czy_tak)then return nazwa_sortowania,0;end;
	local ile;
	if(czy_koniec)then
		local ile1;local ile2;
		nazwa_sortowania,ile1=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]+","");
		nazwa_sortowania,ile2=mw.ustring.gsub(nazwa_sortowania,"[%p%s_]+$","");
		ile=ile1+ile2;
	else
		local UsuwanieNiepoprawnejInterpunkcjiNawiasowej=function(nazwa_sortowania,numer)
			local ile;local ile_nawias;
			repeat
				if(numer==1)then
					nazwa_sortowania,ile_nawias=UsuwanieElementuArtykularnegoWoluminu(nazwa_sortowania,"(",")");
					if(ile_nawias==0)then
						nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^([%p%s_]*)%(([^%(%)]+)%)","%1%2");
					else
						ile=ile_nawias;
					end;
					elseif(numer==2)then
						nazwa_sortowania,ile_nawias=UsuwanieElementuArtykularnegoWoluminu(nazwa_sortowania,"[","]");
						if(ile_nawias==0)then
							nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^([%p%s_]*)%[([^%[%]]+)%]","%1%2");
						else
							ile=ile_nawias;
						end;
					elseif(numer==3)then
						nazwa_sortowania,ile_nawias=UsuwanieElementuArtykularnegoWoluminu(nazwa_sortowania,"{","}");
						if(ile_nawias==0)then
							nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^([%p%s_]*)%{([^%{%}]+)%}","%1%2");
						else
							ile=ile_nawias;
						end;
					elseif(numer==4)then
						nazwa_sortowania,ile_nawias=UsuwanieElementuArtykularnegoWoluminu(nazwa_sortowania,"\"","\"");
						if(ile_nawias==0)then
							nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^([%p%s_]*)\"([^\"]+)\"","%1%2");
						else
							ile=ile_nawias;
						end;
					elseif(numer==5)then
						nazwa_sortowania,ile_nawias=UsuwanieElementuArtykularnegoWoluminu(nazwa_sortowania,"„","”");
						if(ile_nawias==0)then
							nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^([%p%s_]*)„([^„”]+)”","%1%2");
						else
							ile=ile_nawias;
						end;
					else
						mw.log("Funkcja: UsuwanieNiepoprawnejInterpunkcjiNawiasowej, niewłaściwa wartość parametru: numer.")
					end;
				until (ile==0);
				return nazwa_sortowania,ile;
			end;
		local ile1;local ile2;local ile3;local ile4;local ile5;local ile6;local ile7;
		nazwa_sortowania,ile1=UsuwanieNiepoprawnejInterpunkcjiNawiasowej(nazwa_sortowania,1);
		nazwa_sortowania,ile2=UsuwanieNiepoprawnejInterpunkcjiNawiasowej(nazwa_sortowania,2);
		nazwa_sortowania,ile3=UsuwanieNiepoprawnejInterpunkcjiNawiasowej(nazwa_sortowania,3);
		nazwa_sortowania,ile4=UsuwanieNiepoprawnejInterpunkcjiNawiasowej(nazwa_sortowania,4);
		nazwa_sortowania,ile5=UsuwanieNiepoprawnejInterpunkcjiNawiasowej(nazwa_sortowania,5);
		nazwa_sortowania,ile6=mw.ustring.gsub(nazwa_sortowania,"^[%p%s_]+","");
		nazwa_sortowania,ile7=mw.ustring.gsub(nazwa_sortowania,"[%s_]+$","");
		ile=ile1+ile2+ile3+ile4+ile5+ile6+ile7;
	end;
	nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
	return nazwa_sortowania,ile;
end;
local ZamienianieWyrazoweSzereguWyrazu=function(nazwa_sortowania,wzor,funkcja,czy_wielkosc)
	nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania);
	local ile_dopasowania=0;
	local nazwa,ile=mw.ustring.gsub(nazwa_sortowania,wzor,function(wyraz)
		wyraz=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(wyraz,true);
		if(not czy_wielkosc)then wyraz=mw.ustring.lower(wyraz);end;
		local wynik=funkcja(wyraz);
		if(wynik)then
			ile_dopasowania=ile_dopasowania+1;
			return nil;
		end;
		return nil;
	end);
	return nazwa,ile,ile_dopasowania;
end;
local ZamienianieWyrazoweSzereguWyrazuKompleksowe=function(nazwa_sortowania,wzor,tablica_kompletne_wyrazy,tablica_niekompletne_wyrazy,czy_wielkosc)
	local ile;local ile_dopasowan;
	local nazwa,ile,ile_dopasowan=ZamienianieWyrazoweSzereguWyrazu(nazwa_sortowania,wzor,function(wyraz)
		if(tablica_kompletne_wyrazy)then
			if(tablica_kompletne_wyrazy[wyraz])then
				return true;
			end;
		end;
		if(tablica_niekompletne_wyrazy)then
			for name,_ in pairs(tablica_niekompletne_wyrazy)do
				local czy_dopasowano=mw.ustring.match(wyraz,"^"..name)
				if(czy_dopasowano)then
					return true;
				end;
			end;
		end;
		return nil;
	end,czy_wielkosc);
	return nazwa,ile,ile_dopasowan;
end;
local UsuwaneElemementyNazwySortowania=function(nazwa_sortowania,tablica_kompletne_wyrazy,tablica_niekompletne_wyrazy,czy_nie,czy_od_poczatku)
	nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania);
	local ile_niezastapil=0;
	local nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,((czy_od_poczatku and "^" or "").."%s*(%S+)"),function(wyraz)
		wyraz=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(wyraz,true);
		wyraz=mw.ustring.lower(wyraz);
				
		if(tablica_kompletne_wyrazy)then
			if(tablica_kompletne_wyrazy[wyraz])then
				return "";
			end;
		end;
		if(tablica_niekompletne_wyrazy)then
			for p_wzor_wyrazy,_ in pairs(tablica_niekompletne_wyrazy)do
				local p_wyraz=mw.ustring.match(wyraz,"^"..p_wzor_wyrazy)
					or (czy_nie and mw.ustring.match(wyraz,"^nie"..p_wzor_wyrazy) or nil);
				if(p_wyraz)then
					return "";
				end;
			end;
		end;
		ile_niezastapil=ile_niezastapil+1;
		return nil;
	end);
	ile=ile-ile_niezastapil;
	return nazwa_sortowania,ile;
end;
local UsuwanieKolejnegoPierwszegoWyrazuNazwySortowania=function(nazwa_sortowania)
	local nazwa_sortowania_stare=nazwa_sortowania;
	nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania);
	local czy_pusta_nazwa_sortowania=CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania);
	if(czy_pusta_nazwa_sortowania)then
		return nazwa_sortowania_stare,0;
	end;
	nazwa_sortowania=mw.ustring.gsub(nazwa_sortowania,"^%s*([^/%s]+%s+)","");
	local ile_wyrazy_niedopuszczalne=0;
	local kategorie_dane_modul=mw.loadData("Module:Kategorie/dane");
	local tablica_wyrazy_niedopuszczalne=kategorie_dane_modul.tablica_wyrazy_niedopuszczalne;
	local _,_,ile_wyrazy_niedopuszczalne=ZamienianieWyrazoweSzereguWyrazuKompleksowe(nazwa_sortowania,"^(%S+)",nil,tablica_wyrazy_niedopuszczalne);
	if(ile_wyrazy_niedopuszczalne>0)then
		nazwa_sortowania=nazwa_sortowania_stare;
	end;
	return nazwa_sortowania,ile_wyrazy_niedopuszczalne;
end;
local IleJestSpacjiNazwySortowania=function(nazwa_sortowania)
	local _,ile=mw.ustring.gsub(nazwa_sortowania,"(%s)",function()return nil;end);
	return ile;
end;
local TekstPoPrzyimkuNazwySortowania=function(nazwa_sortowania)
	local kategorie_dane_modul=mw.loadData("Module:Kategorie/dane");
	local tablica_wyrazowa_wybrane_przyimki=kategorie_dane_modul.tablica_wyrazowa_wybrane_przyimki;
	local ile=0;
	for name,value  in pairs(tablica_wyrazowa_wybrane_przyimki)do
		nazwa_sortowania,ile=mw.ustring.gsub(nazwa_sortowania,"^%s*%S.-%s+("..name..")%s+(%S.*)%s*$","%2");
		--if(ile>0)then break;end;
	end;
	return nazwa_sortowania,ile;
end;
local WydzielonaNazwaSortowaniaPoMinusieLubPauzie=function(nazwa_sortowania)
	local czy_niezmieniono=true;
	
	local nazwa_sortowania_temp=mw.ustring.match(nazwa_sortowania,"^%s*[^%s%-%–][^%-%–]*%s+[%-%–]%s+(%S.-)%s*$");
	czy_niezmieniono=czy_niezmieniono and (not nazwa_sortowania_temp);
	nazwa_sortowania=nazwa_sortowania_temp or nazwa_sortowania;
			
	local nazwa_sortowania_temp=mw.ustring.match(nazwa_sortowania,"^%s*[^%s%:][^%:]*%s*[%:]%s*(%S.-)%s*$");
	czy_niezmieniono=czy_niezmieniono and (not nazwa_sortowania_temp);
	nazwa_sortowania=nazwa_sortowania_temp or nazwa_sortowania;
			
	return nazwa_sortowania,(not czy_niezmieniono);
end;
local WyrazOdWielkiejLiteryNazwySortowania=function(nazwa_sortowania,czy_od_poczatku)
	local ktoras_duza_litera=mw.ustring.match(nazwa_sortowania,((czy_od_poczatku and "^%s*" or "%s+").."%p*%u"));
	return ktoras_duza_litera and true or false;
end;
function p.NazwaSortowaniaNazwyStrony(frame)
	local parametry_modul=require("Module:Parametry");
	local args=parametry_modul.PobierzArgsParametry(frame,true);
	local nazwa_sortowania=args[1];
	local techniczne_modul=require("Module:Techniczne");
	nazwa_sortowania=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(nazwa_sortowania);
	if(not mw.ustring.match(nazwa_sortowania,"/"))then
		local kategorie_dane_modul=mw.loadData("Module:Kategorie/dane");
		local tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania=kategorie_dane_modul.tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania;
		local _,_,ile_jest_na_poczatku=ZamienianieWyrazoweSzereguWyrazuKompleksowe(nazwa_sortowania,"^[%s_]*(.-)[%s_]*$",nil,tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania);
		if(ile_jest_na_poczatku>0)then
			nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania,false);
			return nazwa_sortowania,true;
		end;
		local czy_zmieniono;
		local stara_nazwa_sortowania=nazwa_sortowania;
		nazwa_sortowania,czy_zmieniono=WydzielonaNazwaSortowaniaPoMinusieLubPauzie(nazwa_sortowania);
		if(czy_zmieniono)then
			if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
				nazwa_sortowania=stara_nazwa_sortowania;
			else
				local _,_,ile_jest_na_poczatku=ZamienianieWyrazoweSzereguWyrazuKompleksowe(nazwa_sortowania,"^[%s_]*(.-)[%s_]*$",nil,tablica_kompletne_wyrazowy_do_sortowania_bez_analizowania);
				if(ile_jest_na_poczatku>0)then
					nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania,false);
					if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
						nazwa_sortowania=stara_nazwa_sortowania;
						nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
					end;
					return nazwa_sortowania,true;
				end;
			end;
		end;
		local ktoras_duza_litera=WyrazOdWielkiejLiteryNazwySortowania(nazwa_sortowania);
		local tablica_analizowanie_bez=kategorie_dane_modul.tablica_analizowanie_bez;
		local _,_,ile_wyrazy_specialne=ZamienianieWyrazoweSzereguWyrazuKompleksowe(nazwa_sortowania,"%s+(%S+)",nil,tablica_analizowanie_bez,true);
		if((not ktoras_duza_litera)or(ile_wyrazy_specialne>0))then
			local ile_przyimki;
			local stara_nazwa_sortowania=nazwa_sortowania;
			nazwa_sortowania,ile_przyimki=TekstPoPrzyimkuNazwySortowania(nazwa_sortowania);
			if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
				nazwa_sortowania=stara_nazwa_sortowania;
			end;
		end;
		if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
			nazwa_sortowania=stara_nazwa_sortowania;
			nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
			return nazwa_sortowania,true;
		end;
		local ile=IleJestSpacjiNazwySortowania(nazwa_sortowania);
		if(ile>0)then
			local stara_nazwa_sortowania=nazwa_sortowania;
			if(not ktoras_duza_litera)then
				local tablica_wyrazowa_alternatyw=kategorie_dane_modul.tablica_wyrazowa_alternatyw;
				local _,_,ile_znalezione=ZamienianieWyrazoweSzereguWyrazuKompleksowe(stara_nazwa_sortowania,"%s+(%S+)",tablica_wyrazowa_alternatyw,nil);
				if(ile_znalezione>0)then
					local tablica_wyrazowa_gdy_alternatywy=kategorie_dane_modul.tablica_wyrazowa_gdy_alternatywy;
					local _,_,ile_specjalne_gdy_alternatywy=ZamienianieWyrazoweSzereguWyrazuKompleksowe(stara_nazwa_sortowania,"^%s*(%S+)",nil,tablica_wyrazowa_gdy_alternatywy);
					if(ile_specjalne_gdy_alternatywy==0)then
						nazwa_sortowania=stara_nazwa_sortowania;
						nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania,false);
						if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
							nazwa_sortowania=stara_nazwa_sortowania;
							nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
						end;
						return nazwa_sortowania,true;
					end;
				end;
			end
			local tablica_wyrazowa_niealternatyw=kategorie_dane_modul.tablica_wyrazowa_niealternatyw;
			local tablica_wyrazy_do_usuwania_przez_sortowanie=kategorie_dane_modul.tablica_wyrazy_do_usuwania_przez_sortowanie;
			local tablica_kompletne_wyrazy_do_usuwania_przez_sortowanie=kategorie_dane_modul.tablica_kompletne_wyrazy_do_usuwania_przez_sortowanie;
			local tablica_dzielenia_elementowa_sortowania=kategorie_dane_modul.tablica_dzielenia_elementowa_sortowania;
			
			nazwa_sortowania=UsuwanieKolejnegoPierwszegoWyrazuNazwySortowania(nazwa_sortowania);
			if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then
				nazwa_sortowania=stara_nazwa_sortowania;
				if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
					nazwa_sortowania=stara_nazwa_sortowania;
					nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
				end;
				return nazwa_sortowania,true;
			end;
			repeat
				local ile=0;local ile1=0;local ile2=0;local ile3=0;
				nazwa_sortowania,ile1=UsuwaneElemementyNazwySortowania(nazwa_sortowania,tablica_wyrazowa_niealternatyw,nil,false,true);
				nazwa_sortowania,ile2=UsuwaneElemementyNazwySortowania(nazwa_sortowania,tablica_kompletne_wyrazy_do_usuwania_przez_sortowanie,tablica_wyrazy_do_usuwania_przez_sortowanie,true,true);
				if(not ktoras_duza_litera)then
					nazwa_sortowania,ile3=UsuwaneElemementyNazwySortowania(nazwa_sortowania,nil,tablica_dzielenia_elementowa_sortowania,false,true);
				end;
				ile=ile1+ile2+ile3;
			until (ile==0);
			nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania,false);
			if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
				nazwa_sortowania=stara_nazwa_sortowania;
				nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
			end;
			return nazwa_sortowania,true;
		end;
		local stara_nazwa_sortowania=nazwa_sortowania;
		nazwa_sortowania=UsuwanieZnakoweInterpunkcjiWprowadzeniaNazwySortowania(nazwa_sortowania,false);
		if(CzyZnakiTylkoNiewidzialneInterpukcjiOrazKreskiDolnejNazwySortowania(nazwa_sortowania))then 
			nazwa_sortowania=stara_nazwa_sortowania;
			nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
		end;
		return nazwa_sortowania,true;
	end;
	nazwa_sortowania=UsuwanieSekwencjiArtykularnychLubZnakowychNawiasowychZnakoweInterpunkcjiWprowadzeniaNazwySortowaniaStrony(nazwa_sortowania);
	return nazwa_sortowania,false;
end;
return p;