Moduł:Kategorie/sortowanie
Wygląd
|
Zobacz podstrony tego modułu.
|
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;